2012-10-07 105 views
1

我有點卡在模擬滾動骰子的作業問題上。該問題要求創建一個函數,該函數返回從1到6的隨機整數值,並創建一個主程序,詢問用戶需要擲出多少個骰子(必須限制爲5個骰子),然後調用該函數以打印生成的值。到目前爲止,我有這樣的:Python骰子模擬

import random 

def dice(number_of_dice): 
    for i in range(0,number_of_dice): 
     return random.randint(1,6) 


number_of_dice = input("How many dice would you like to roll? ") 
while number_of_dice >5: 
    number_of_dice = input("You may only have a limit of 5 dice, enter a number under 5. ") 
print dice(number_of_dice) 

運行程序時,它只返回一個隨機整數值,無論「number_of_dice」輸入是什麼。這到底是什麼錯誤?

任何幫助表示讚賞,謝謝。

+1

改變使用這樣

import random from random import randint while True: dice = input("how many dice would you like to roll?") prefix, middle, suffix = dice.partition("d") 

while循環爲d返回收益率 –

+0

return語句將在第一次進入循環後立即返回。 – nhahtdh

回答

4

只要您的dice函數執行並第一次遇到return語句,它就會返回而不繼續執行for循環的其餘部分。

要解決此問題,您可以在dice內聲明一個局部變量,該變量包含要返回的多個結果。像

使用報表
retval = [] 

retval.append(...) 

return retval 

(我將讓你來填補空白。)

更先進的使用Python的涉及使用yield語句從一種特殊的返回一個值函數稱爲生成器,它記住它的位置,並且可以稍後重新啓動。但是,在使用yield之類的功能之前,牢記基礎知識是值得的。

+0

感謝您的提示,通過將所有數字添加到一個變量中,然後像您所說的那樣返回該變量,從而使其自行工作。 – user1679073

0
def dice(number_of_dice): 
    for i in range(0,number_of_dice): 
     yield random.randint(1,6) #yield will successivly return as opposed to just return 

現在你可以訪問骰子像一個列表...

+1

不是真的應該寫作業代碼的問題〜 –

+0

我所做的只是改變他的一個術語 –

+0

並添加一個for循環。 – Eric

0

您在2D6等

for _ in range (int(prefix)): 

     print (random.randint(1, int(suffix))) 
+0

你也必須把你的最後一行中的打印語句放入一個縮進 – 2018-01-08 05:21:26