是否可以使用 python 列表作为选择?

Is it possible to use a python list as a choice?

全部。我对 Python 有点陌生。我最近参加了一门课程并学习了一些教程。我正在尝试自己探索并制作“东西”。这是基于文本的角色扮演游戏。我正在尝试从我已经创建的预先存在的列表中读取用户输入,以防他们以不同的方式输入选项。

right_Choices = ["right", "Right", "RIGHT"]
left_Choices = ["left", "Left", "LEFT"]

稍后在代码中我询问用户他们想“向左还是向右”走哪个方向?在他们输入之后,我试图让代码理解任何可能的输入,即如果他们先输入“左”,然后再输入“左”或“左”,它仍然会继续理解。

    # Check user input for left or right
    left_or_right = input("You wake up dazed in a random alley... Unsure of where you are, which way will you go? Left or Right? ")

    #Left option
    if left_or_right == left_Choices:
        ans = input("You stumble into a saloon nearly empty but some faces are there. Feel like having a drink at the bar? Or sitting at an empty table? (bar/table)? ")

        if ans == "bar":
            print("You sat at the bar and the bartender slides a glass across On the house partner! Nice! A free drink to help out. (+10HP)")
            health +=10
        elif ans == "table":
            print("You sit at an empty table and a group on men approach and seat themselves So tough guy where's our 450Gold!?")

        else:
            print("You were too drunk to walk, fell down and passed out...")

我希望我的解释至少是可以理解的,因为我对此很陌生,我不确定如何表达这个问题。

x)

你应该进行测试set-theoretic。例如。 :

如果在 Set_of_Left_Turns 中选择或在 Set_of_Right_Turns 中选择: 打印('first branch') 别的: 打印('second branch')

此外,如果您将 choices 变量限制为仅 upper-case 答案,然后使用 choice.upper() 比较已映射到 [=31= 的输入,这将简化事情] 针对一组 upper-case 个选择。

更一般地说,使用想法(例如奇异值分解),您可以使用算法将文本短语映射到几个关键名词,然后根据足够的统计数据而不是原文。即可以使用降维思路。

更一般地说,模糊逻辑的相关之处在于您可以 'defuzzify' 输入,计算该结果的函数,然后模糊化输出。这个概念也与深度学习/神经网络中自动编码器的工作有关。这些都是主成分分析的降维原理。

我建议在您的角色扮演游戏中将动作集设为静态(或明确提供),以便您的用户知道候选选项是什么。看看例如Zork 或 Ultima 5 寻找灵感。

最后的想法,研究 Python 中 switch 语句的可能模拟:

What is the Python equivalent for a case/switch statement?

可以通过不同的方式实现。我假设你想要一个 while 循环。

一种方法是对列表使用 if/elif。

代码:

right_Choices = ["right", "Right", "RIGHT"]
left_Choices = ["left", "Left", "LEFT"]


while True:
    user_choice = input('choose direction: ')
    if user_choice in right_Choices:
        print('right')
        break
    elif user_choice in left_Choices:
        print('left')
        break
    else:
        print('choice not valid! Please choose again')
        continue

输出:

choose direction: no
choice not valid! Please choose again
choose direction: left
left

[Program finished]

您可以在匹配之前将输入转换为小写或大写并跳过列表。

像这样:

while True:
    user_choice = input('choose direction: ')
    if user_choice.lower() == "right":
        print('right')
        break
    elif user_choice.lower() == "left":
        print('left')
        break
    else:
        print('choice not valid please choose agaim')
        continue

输出:

choose direction: LEFT
left

[Program finished]

或者制作一个全部小写的路线列表,并检查 user_choice.lower() 是否在列表中。

代码:


directions = ['left', 'right', 'forward', 'back']

while True:
    user_choice = input('choose direction: ')
    if user_choice.lower() in directions:
        print(user_choice.lower())
        break
    else:
        print('choice not valid please choose agaim')
        continue

输出:

choose direction: To space
choice not valid! Please choose again
choose direction: RIght
right

[Program finished]