如何在while循环中使用raw_input()?

2 投票
2 回答
1414 浏览
提问于 2025-04-18 03:35

我的任务是用列表循环来执行多个缓冲区!

import arcpy

arcpy.env.overwriteOutput = 1  
arcpy.env.workspace="C:\\salzburg.gdb"  
sbgRivers="sbg_rivers"
buff_name=raw_input("Please insert a file name:")  
for buffer_size in [100,200,300,450]:  
    outfile="C:\\salzburg.gdb\\buffer_output"
    arcpy.Buffer_analysis(sbgRivers,buff_name+str(buffer_size),buffer_size)  
    print "Buffer complete"

接下来的步骤是:如果文件名已经存在(通过用户输入),就要让用户一直输入新的数据集名称,直到找到一个还不存在的名称为止!

我考虑过用一个循环,但不太确定怎么把它放到上面的代码里。

最后我得到了这个结果。

import arcpy
arcpy.env.overwriteOutput = 1  
arcpy.env.workspace="C:\\salzburg.gdb"  
sbgRivers="sbg_rivers"
buff_name=raw_input("Please insert a new data set name:")
while arcpy.Exists(buff_name):    
    buff_name=raw_input("Please enter a new data set name")  
    for buffer_size in [100,200,300,450]:    
         arcpy.Buffer_analysis(sbgRivers,buff_name+str(buffer_size),buffer_size) 
         print "Buffer complete"

你觉得怎么样?任何帮助都非常欢迎和感激!

2 个回答

0

好的,如果你想在一个循环中使用input(),代码会像这样:

sett=True
while sett:
    buff_name=raw_input("Please insert a file name:")  
    if buff_name=="":
        continue 
    else: 
        break ##Or: sett=False
0

你首先要确保你有正确的文件名,然后再进行下一步。代码应该是这样的:(假设 arcpy.Exists(buff_name) 是正常工作的,因为我觉得应该是 arcpy.Exists(buff_name+str(100)) 或者类似的东西。)

import arcpy
arcpy.env.overwriteOutput = 1  
arcpy.env.workspace="C:\\salzburg.gdb"  
sbgRivers="sbg_rivers"
buff_name=raw_input("Please insert a new data set name:")
while arcpy.Exists(buff_name):    
    buff_name=raw_input("Name already exists. Please enter a new data set name")  
for buffer_size in [100,200,300,450]:    
    arcpy.Buffer_analysis(sbgRivers,buff_name+str(buffer_size),buffer_size) 
    print "Buffer complete"

你之前的代码会对所有提供的输入(即使是错误的)都执行这个循环。

撰写回答