2011-09-04 84 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

相關問題