为了账号安全,请及时绑定邮箱和手机立即绑定

在收到无效输入后,如何阻止程序跳转到不同的 if 语句?

在收到无效输入后,如何阻止程序跳转到不同的 if 语句?

鸿蒙传说 2023-10-18 15:29:31
作为我自己的第一个程序,我编写了一个文本游戏,您可以在其中输入(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()
查看完整描述

1 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

因此,我认为,将您的选择打包到字典中,类似于下面所示的那样,应该会更容易管理这里的选择(几乎肯定有比这更好的方法)。然后每次做出选择时添加到空字符串并尝试访问字典。如果选择在字典中,那么它将恢复一个文本字符串和一个结束状态,这将使我们能够在需要时结束游戏。


这种方法还可以生成所有可能的状态组合,从而使测试变得更加容易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()

    


查看完整回答
反对 回复 2023-10-18
  • 1 回答
  • 0 关注
  • 79 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信