1

サイコロを振るのをシミュレートする宿題の質問に少しこだわっています。質問は、1から6までのランダムな整数値を返す関数を作成し、ユーザーに何個のサイコロを振るか(5個のサイコロに制限する必要があります)を尋ねるメインプログラムを作成し、生成されたサイコロを出力する関数を呼び出すことを求めています。値。これまでのところ私はこれを持っています:

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つだけ返されます。ここで正確に何が問題になっていますか?

どんな助けでもありがたいです、ありがとう。

4

3 に答える 3

4

関数が実行されてステートメントに初めてdice遭遇するとすぐに、残りのループを続行せずに戻ります。returnfor

diceこれを修正するには、返したい複数の結果を保持するローカル変数を内部で宣言できます。次のようなステートメントを使用します

retval = []

retval.append(...)

return retval

(空欄を埋めるのはあなたにお任せします。)

Pythonのより高度な使用法では、yieldステートメントを使用して、ジェネレーターと呼ばれる特別な種類の関数から単一の値を返します。ジェネレーターは、それがどこにあったかを記憶し、後で再起動できます。ただし、などの機能を使用する前に、基本をしっかりと把握しておくことは価値がありますyield

于 2012-10-07T19:14:50.620 に答える
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

今、あなたはリストのようにサイコロにアクセスすることができます...

于 2012-10-07T19:15:25.407 に答える
0

このようなwhileループを使用します

import random

from random import randint

while True:

  dice = input("how many dice would you like to roll?")

    prefix, middle, suffix = dice.partition("d")

2d6などのdの場合

    for _ in range (int(prefix)):

      print (random.randint(1, int(suffix)))
于 2018-01-08T05:19:01.807 に答える