我需要在我的程序中做一个'while'循环,但不能正确地完成它。下面是我到目前为止的内容:
restart ="y"
while restart == "y":
sentence = input("What is your sentence?: ")
sentence_split = sentence.split()
sentence2 = [0]
print(sentence)
for count, i in enumerate(sentence_split):
if sentence_split.count(i) < 2:
sentence2.append(max(sentence2) + 1)
else:
sentence2.append(sentence_split.index(i) +1)
sentence2.remove(0)
print(sentence2)
outfile = open("testfile.py", "wt")
outfile.write(sentence)
outfile.close()
print (outfile)
restart = input("would you like restart the programme y/n?")
if restart == "n":
print ("programme terminated")
else:
print("you were asked y or n")
当输入"n"时,循环工作正常,它打印"程序终止",但当输入"y"时,它将重新启动程序,但仍然打印"您被要求y或n"。
这是因为如果restart
包含与'n'不同的东西,程序将遵循else
。(y或任何其他值)。如果您按下'y',它将跟随else
语句,然后while的条件也将计算为true
。您可以使用elif restart != 'y'
作为快速解决方案,在这里发出print语句。然后,您可以将restart
设置为y
,以便循环重复,或者为整个循环使用不同的变量。
这是因为if/else语句的结构方式。当您输入y
时,n
在if语句中失败。这意味着您的else
语句将立即执行。但是在else语句执行之后,控制流循环到while循环的下一个迭代,程序仍然重新启动。
你最可能想要的是在你的else语句下添加一个break
语句,这样控制流不会循环到你的while循环的下一次迭代,而是退出它:
else:
print("you were asked y or n")
break # <---------- add a break statement under your else
使用while: true
和break
来控制y/n
的问题,并且记住使用lower()
来只获得小写字符。
restart = 'y'
while (True):
# other code goes here
restart = raw_input("would you like restart the programme y/n?").lower()
if (restart == 'n'):
print ("programme terminated")
break
elif (restart == 'y'):
pass
else:
print "Please enter y or n"