gpt4 book ai didi

python - 在收到无效输入后,如何阻止程序跳转到其他if语句?

转载 作者:行者123 更新时间:2023-12-03 09:07:35 24 4
gpt4 key购买 nike

我是Stackoverflow和Python的新手。作为我的第一个程序,我编写了一个文字游戏,您在其中输入(a)或(b),并以此方式决定角色做出的决定。它的效果很好,但是我有一个问题。如果用户在第一个决策上输入例如“a”,在第二个决策上输入“b”,但是在第三个决策上输入无效,则下一个有效输入将再次触发第一个决策,而不是第三个决策。我试图制作一个简短的版本来描述我的问题。任何帮助表示赞赏。

def test():
while True:
input_zero = input("1. > ")
if input_zero == "a":
print("a")
input_a = input("2. > ")
if input_a == "a":
print("a, a")
break
elif input_a == "b":
print("a, b")
break
else:
print("Invalid input.")
elif input_zero == "b":
print("b")
input_b = input("2. > ")
if input_b == "a":
print("b, a")
break
elif input_b == "b":
print("b, b")
break
else:
print("Invalid input.")
else:
print("Invalid input.")


test()

最佳答案

因此,我认为,将您的选择打包到一个字典中,类似于下面显示的内容,应该可以使在这里管理选择稍微容易一些(几乎肯定有比这更好的方法了)。然后,每次选择时都添加到空字符串中,并尝试访问字典。如果选择是在字典中,则它将恢复文本字符串和结束状态,这将使我们能够在需要时结束游戏。
这种方法还可以使用itertools生成所有可能的状态组合,从而使测试更加容易,从而可以找出缺失的状态。如果找到了end_state(在元组的第二个位置值为1),那么您将获得游戏结束消息,并结束循环。如果元素不在字典中,则删除最后一个选择,并调用invalid_input函数。

def test():

choice_dict = {"a": (dP_lvl1.path_a, 0),
"b": (dP_lvl1.path_b, 0),
"c": (dP_lvl1.path_c, 1)
"bb": (dP_lvl2.path_bb, 0),
"aa": (dP_lvl2.path_aa, 0),
"ba": (dP_lvl2.path_ba, 0),
"ab": (dP_lvl2.path_ab, 0),
"aaa": (dP_lvl3.path_aaa, 0),
"aab": (dP_lvl3.path_aab 0),
"aba": (dP_lvl3.path_aba, 0),
"abb": (dP_lvl3.path_abb, 0),
"bab": (dP_lvl3.path_bab, 0),
"bba": (dP_lvl3.path_bba} 0),
"bbb": (dP_lvl3.path_bbb, 0),
"aaaa": (dP_lvl4.path_aaaa, 0),
"abaa": (dP_lvl4.path_abaa, 0),
"aaba": (dP_lvl4.path_aaba, 0),
"aaab": (dP_lvl4.path_aaab, 1),
"bbba": (dP_lvl4.path_bbba, 0),
"bbab": (dP_lvl4.path_bbab, 0),
"babb": (dP_lvl4.path_babb, 0),
"abbb": (dP_lvl4.path_abbb, 0),
"abba": (dP_lvl4.path_abba, 1),
"abab": (dP_lvl4.path_abab, 0),
"aabb": (dP_lvl4.path_aabb, 0),
"baab": (dP_lvl4.path_baab, 0),
"bbaa": (dP_lvl4.path_bbaa, 1),
"baba": (dP_lvl4.path_baba, 0),
"baaa": (dP_lvl4.path_baaa, 0),
"bbbb": (dP_lvl4.path_bbbb, 0),}
# etc. you get the idea

decisions = ""
playing = True
while playing:
decision = input("choose an option 'a' or 'b':")
decisions += decision

try:
data, end_state = choice_dict[decisions]
print(data)
if end_state:
playing = False
print("Game over")
else:
continue
except KeyError:
decisions = decisions[:-1]
invalid_input()

关于python - 在收到无效输入后,如何阻止程序跳转到其他if语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64248824/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com