下面的代码会列出目录中的所有文件,每个文件都有自己的编号。然后,它会要求用户通过选择相应的数字来选择文件。它应该返回一个包含至少一个文件名的列表。例如,
[' file1.xvg']
问题是,即使在用户输入数字后,第二次出现提示。再次输入相同的号码后,程序终止。
#function to determine data files to process
def file_names():
print ""
print "Choose file(s) to analyze:"
print ""
#display available files in the current directory
f = filter((lambda x: x.endswith(".xvg")),os.listdir(os.curdir))
for i in f:
print " %s ----- %s"%(str(f.index(i)+1),i)
file_set = [] #list of data files
x = (raw_input("Enter file index(es), separated with spaces: ")).split()
for i in x:
file_set.append(f[int(i)-1])
print "igiveup"
print file_set
return file_set
if file_names() == ['file1.xvg']:
print "icantdo"
if file_names() == ['file2.xvg']:
print "thisanymore"
当我执行此代码并在它请求输入后我给它" 1"对应于file1.xvg,这是终端上显示的内容:
igiveup
[file1.xvg]
icantdo
然后它再次提示我,当我回答" 1"再次,出现的是:
igiveup
[file1.xvg]
如何确保仅提示用户输入一次?
答案 0 :(得分:1)
您正在调用该函数两次,这就是为什么它会导致两个输入提示。解决这个问题的正确方法是改变
if file_names() == ['file1.xvg']:
print "icantdo"
if file_names() == ['file2.xvg']:
print "thisanymore"
到此
result = file_names()
if result == ['file1.xvg']:
print "icantdo"
if result == ['file2.xvg']:
print "thisanymore"