【问题标题】:Pulling raw_input options form a list从列表中提取 raw_input 选项
【发布时间】:2011-09-04 17:46:52
【问题描述】:

您好,我刚开始学习 Python,我正在使用“艰难地学习 Python”这本书,其中一个练习是构建一个简单的游戏。我想从列表中为用户提供选项。

例如,我会制作一个名为动物的列表,其中包括 3 种动物,狮子老虎和鱼。可以从列表中提供选定的元素。我很确定它是,但我只是不知道如何。

我在想这样的事情(显然是错误的,但我认为这有助于理解我的意思)

animals = ['Lion', 'Tiger', 'Fish']

print "which of these animals is your favourite?"
favourite = raw_input(animals[0] or animals[2])
if favourite = "Lion':
    print "Nice choice"
else:
    print "Bad choice"

再次强调,我知道上面的内容确实很垃圾,但本质上我想提供列表中的某些项目作为 raw_input 的选项。在上述情况下,0 项和 2 项。

提前感谢您的帮助。

【问题讨论】:

    标签: python list input


    【解决方案1】:
    favourite = raw_input(' or '.join(animals))
    

    这将从animals 列表中取出所有字符串,并将它们与or 连接在一起,所以你最终会得到

    狮子或老虎或鱼

    如果你想在末尾添加问号和空格,你可以这样做

    favourite = raw_input(' or '.join(animals) + '? ')
    

    还有,就行了

    if favourite = "Lion':
    

    您的引号不匹配 - 确保使用双引号或单引号,而不是每个引号。您还需要使用== 来比较两件事; = 用于赋值,而不是比较。

    我可能会这样做

    animal_string = ' or '.join(animals)
    favourite = raw_input("Which of these animals is your favourite:\n{}? ".format(animal_string))
    

    首先创建动物字符串,然后将选项格式化为新行上的问题(因为\n),然后将?放在后面。

    【讨论】:

    • 哇,我简直不敢相信这里的回答这么快!非常感谢。除此之外,如果我只想选择其中两种动物,而不是列出所有动物,我该怎么做?
    • @Craig ' or '.join(animals[x] for x in (0, 2)) 是一个好方法。这会将索引放在元组(0, 2) 中,然后创建一个生成器表达式(基本上是一个循环),从animals 获取每个索引处的项目。 join 函数然后运行生成器,并连接它产生的值。
    • @steabert 如果你想要的动物数量发生变化,你必须更多地改变那个版本——我的版本对于任何数量的动物都基本不变。
    • 没错,这就是我给你+1的原因,我的不是那么灵活
    • @steabert 你的版本肯定更简单:)
    【解决方案2】:

    这个怎么样?

    favourite = raw_input("which of these animals is your favourite? "+",".join([str(a)+":"+b for a,b in enumerate(animals)])+">")
    fav = animals[int(favourite)]
    print fav+" is a nice choice indeed!. The big bear will kill you anyway. Good bye."
    

    【讨论】:

    • 感谢您的帮助 bpgergo,我认为这对我来说有点高级,其中有很多我无法理解的内容。不过感谢您的帮助。
    • @Craig enumerate 给出动物中每个项目的索引和值(0, Lion)(1, Tiger)(2, Fish)。然后,他用1:Tiger 之间的冒号将索引和值连接在一起,然后用0:Lion,1:Tiger,2:Fish 之间的逗号将它们连接在一起。然后您输入您喜欢的动物的编号,他将输入的字符串转换为整数int(favourite) 并在列表中查找该动物,然后告诉您这是一个不错的选择。
    • @Craig,很抱歉超出您的深度。我只是试图给出一个答案,这在某种程度上概括了让用户通过 row_input 从列表中选择一个元素的问题。无论如何,Zed Shaw 的书是开始编程(和 Python)的最佳方式,所以请继续阅读。
    猜你喜欢
    • 2020-07-01
    • 2019-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多