0

これは、昨日の質問に対するフォローアップの質問のようなものです。Pythonの初心者で、現在ZedShawのLPTHWを使用して自分自身を教えています。以下のコードは壊れており、RPGで使用するための乱数ジェネレーターを作成しようとしています。

from random import randint
name = raw_input('\n Hello there. Please Type in your name > ')

print """
Hello {} & welcome to the Random Number Generator by Ray Weiss.
""".format(name)

upper = int(raw_input('Enter the type of dice you want to roll > '))

n = int(raw_input("How many D{} you'd like to roll? ".format(upper)))

for _ in xrange(n):
    print randint(1, upper)

prompt = """
Would you like to roll another D{}? Type 'yes', 'no', or 'quit'
""".format(upper)

answer = raw_input(prompt)

while answer == "yes":
    for _ in xrange(n):
            print randint(1, upper)
            prompt = """
            Would you like to roll another D{}? Type 'yes', 'no', or 'quit'
            """.format(upper)
            answer = raw_input(prompt)

if answer == "no":
    upper = int(raw_input('Enter the type of dice you want to roll > '))
    n = int(raw_input("How many D{} you'd like to roll? ".format(upper)))
    for _ in xrange(n):
        print randint(1, upper)
        prompt = """
        Would you like to roll another D{}? Type 'yes', 'no', or 'quit'
        """.format(upper)
        answer = raw_input(prompt)

if answer == "quit":
    print """
    Thank you {} for using the D{} RNG by Ray Weiss! Goodbye!
    """.format(name, upper)

理想的には、私がやりたいことは、最初に私が欲しいサイコロの数と、転がしたいサイコロの数を尋ねることです。その後、同じダイと量をもう一度ロールするかどうかを尋ねたいのですが、「はい」と答えると、それが実行されます。私がノーと言った場合、私はそれを元に戻して、どちらのサイドダイと何人のダイをもう一度ロールしたいのかを尋ねます。

編集:このコードは少し良いと思いますが、それでも機能しません

from random import randint

def roll(sides, num_of_dices):
    return [randint(1, sides) for i in range(num_of_dices)]

prompt = "> "

# Main Program

num_of_dices = input(prompt)
sides = input(prompt)


while True:
  results = roll(sides, num_of_dices)
  print results

  s = input(prompt)
  if s == 'quit':
      break
4

1 に答える 1

0

したがって、プログラムは次のようになります。

def roll(sides, num_of_dices):
    # returns some list

# main program

sides = input(...)
num_of_dices = input(...)

while True:
  results = roll(sides, num_of_dices)
  print results

  s = input(...)
  if s == 'quit':
      break

まず、個別に実装してテストrollし、準備ができたら、メインプログラムと統合します。

実装またはrollに関しては、N個のサイコロを振るのは1個のサイコロをN回振るのと同じです。Pythonでは、アクションをN回実行して結果を収集するには、リスト内包表記を使用します。

results = [action for i in range(N)]

ですから、あなたの行動は片側のsidesサイコロを振ることであり、それをnum_of_dices何度も繰り返す必要があります。すべてを一緒に入れて、

def roll(sides, num_of_dices):
    return [roll_one_dice(sides) for i in range(num_of_dices)]
于 2012-09-21T16:25:03.953 に答える