2014-04-21 123 views
2

我的任務是用列表循環執行多個緩衝區!如何在while循環中使用raw_input()?

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),則要求用戶知道名字被發現進入一個新的數據集的名字,這doesn't存在呢!

我想過一個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" 

你覺得它集成?任何幫助,歡迎和讚賞!

+1

如果它工作,它是(相對)簡潔,我想這很好。否則,你應該檢查codereview – sshashank124

+0

我沒有看到它的問題!但將來請確保您的縮進以格式表示。我也第二它應該真的在代碼審查 –

+0

它看起來像'for'循環應該放在'while'循環之外。 – jfs

回答

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" 

你前面的代碼會運行for循環對所有的投入提供(即使是錯誤的)。

0

好吧,如果你想使用的輸入()在while循環的代碼將是這樣的:

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