2011-09-04 42 views
2

嗨,我刚刚开始学习Python,我正在使用本书“学习python硬的方式”,其中一个练习是建立一个简单的游戏。我想从列表中给用户提供选项。拉raw_input选项形成一个列表

例如我会制作一个名为动物的名单,其中包括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项。

在此先感谢您的帮助。

回答

3
favourite = raw_input(' or '.join(animals)) 

这将采取一切从列表animals字符串利用两者or将它们连接在一起,所以你会

 
Lion or Tiger or Fish 

,如果你想添加一个问号和空间结束到最后,你可以做

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的),之后把?

+0

哇我不能相信这里有多快的东西得到答案!非常感谢。为了补充一点,虽然如果我只想挑选两只动物,我会怎么做,而不是列出所有的动物? – Craig

+1

@Craig''或'.join(动物[x] for x in(0,2))'是一种好方法。这将索引放入一个元组“(0,2)”中,然后创建一个生成器表达式(基本上是一个循环),从“动物”获取每个索引处的项目。 'join'函数然后运行生成器,并加入它生成的值。 – agf

+1

'input('{} or {}?\ n'.format(animals [0],animals [2]))' – steabert

1

这个怎么样?

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." 
+0

感谢您的帮助bpgergo,我认为现在对我来说有点高级,那里有太多我无法理解的地方。尽管感谢您的帮助。 – Craig

+1

@Craig'enumerate'给出索引,动物'(0,Lion)','(1,Tiger)','(2,Fish)'中的每个项目的值。然后,他用'1:Tiger'之间的冒号将索引和值连接在一起,然后用'0:Lion,1:Tiger,2:Fish'之间的逗号将它们连接在一起。然后你输入你喜欢的动物的数字,然后他将输入的字符串转换成一个整数“int(favorite)”并在列表中查找该动物,然后告诉你这是一个不错的选择。 – agf

+0

@克雷格,抱歉超出你的深度。我试图给出一个答案,这有点概括了让用户通过row_input从列表中选择一个元素的问题。无论如何,Zed Shaw的书是开始编程(和Python)的最佳方式,所以继续保持它。 – bpgergo

相关问题