Как использовать raw_input() с циклом while?

моя задача - выполнить несколько буферов с помощью цикла списка!

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"

Итак, следующий шаг: если имя файла уже существует (raw_input), пользователя просят ввести новое имя набора данных, пока не будет найдено имя, которого еще не существует!

Я думал о цикле while, но не знаю, как интегрировать его в приведенный выше код.

я закончил с этим

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"

Что вы думаете? Любая помощь приветствуется и приветствуется!


person Josh    schedule 21.04.2014    source источник
comment
Если это работает и (относительно) лаконично, я думаю, все в порядке. В противном случае вы должны проверить это на codereview.   -  person sshashank124    schedule 21.04.2014
comment
не вижу в этом проблемы! Но в будущем убедитесь, что ваш отступ выражен в вашем форматировании. Я также считаю, что это действительно должно быть на проверке кода.   -  person J_mie6    schedule 21.04.2014
comment
Похоже, цикл for следует поместить вне цикла while.   -  person jfs    schedule 21.04.2014


Ответы (2)


Вы хотели бы сначала убедиться, что у вас правильное имя файла, а затем перейти к следующему шагу. Код должен быть: (при условии, что 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"

Ваш предыдущий код запускал бы цикл for для всех предоставленных входных данных (даже неправильных).

person Sriram    schedule 21.04.2014

Хорошо, если вы хотите использовать input(), в цикле while код будет таким:

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