这是我的一段代码:
choice = ""
while choice != "1" and choice != "2" and choice != "3":
choice = raw_input("pick 1, 2 or 3")
if choice == "1":
print "1 it is!"
elif choice == "2":
print "2 it is!"
elif choice == "3":
print "3 it is!"
else:
print "You should choose 1, 2 or 3"
虽然它有效但我觉得它真的很笨拙,特别是while子句。如果我有更多可接受的选择怎么办?是否有更好的方法来制定该条款?
答案 0 :(得分:30)
通过检查元素是否在这样的选择列表中,可以稍微重构while位以使其更清晰
while choice not in [1, 2, 3]:
这是检查选择的值不是该列表中的元素
答案 1 :(得分:4)
您可以将逻辑推入循环,然后替换
while choice != "1" and choice != "2" and choice != "3":
与
while True:
然后不需要初始行choice = ""
。然后,在每个分支中,一旦完成了您想要做的事情,您可以break
。
答案 2 :(得分:3)
我认为这样的事情会更好
possilities = {"1":"1 it is!", "2":"2 it is!", "3":"3 it is!"}
choice = ""
while True:
choice = raw_input("pick 1, 2 or 3")
if choice in possilities:
print possilities[choice]
break
else:
print "You should use 1, 2 or 3"
答案 3 :(得分:1)
当1为值时,您可以使用字典将1映射到要执行的代码,依此类推......这样就可以摆脱ifs,并且您的代码将来可以通过简单的方式支持其他值更新字典。对于while中的条件,您只需检查密钥是否在字典中。
答案 4 :(得分:1)
我建议让a function循环直到选择有效选项,然后返回所选的值。
这意味着您的其余代码不适用于while
,保持所有内容都很好("Flat is better than nested")
def get_choice(options):
"""Given a list of options, makes the user select one.
The options must be strings, or they will never match (because raw_input returns a string)
>>> yn_choices = ['y', 'n']
>>> a = get_choice(options = yn_choices)
"""
prompt_string = "Pick " + ", ".join(options)
while True:
choice = raw_input(prompt_string)
if choice in options:
return choice
else:
print "Invalid choice"
# Prompt user for selection
choice = get_choice(["1", "2", "3"])
# Do stuff with choice...
if choice == "1":
print "1 it is!"
elif choice == "2":
print "2 it is!"
elif choice == "3":
print "3 it is!"
else:
print "You should choose 1, 2 or 3"
答案 5 :(得分:0)
while str(choice) not in "123"
.....
答案 6 :(得分:0)
我认为您可以使用包含所有可能选择的集合,并使用“in”表达式来判断while部分。
至于if-else部分,print(选择,“它是!”)就可以了。