Dice Roller для Python

Я пытаюсь создать программу для игры в кости на питоне, которая бросает кости, учитывая, что пользователи вводят стороны, кости и броски. В настоящее время этот код более или менее работает, но проблема, с которой я сталкиваюсь, заключается в том, что я даю им 3 кости, которые бросают 3 раз с 6 сторонами.

Код, который у меня есть, отображает это как вывод:

Roll #1 6
Roll #2 5
Roll #3 1
Roll #4 6
Roll #5 4
Roll #6 6
Roll #7 3
Roll #8 1
Roll #9 1

Когда мне нужно, чтобы он отображался как:

Roll #1 6 5 1
Roll #2 6 4 6
Roll #3 3 1 1

Вот мой код до сих пор. Я предполагаю, что он должен что-то делать с пустыми аргументами и параметрами? Я не совсем уверен. Вот мой код:

import random

def main ():
    rolls = get_rolls()
    dice = get_dice()
    sides = get_sides()

    nrolls = 1
    for r in range (rolls):
        for d in range (dice):
            print ('Roll #', nrolls, random.randint(1,sides))
            nrolls += 1 

def get_rolls():
    rolls = int(input('Enter the number of rolls: '))
    while rolls <= 0:
        print ('Number of rolls must be higher than 0')
        rolls = int (input('Enter the number of rolls: '))
    return rolls

def get_dice():
    dice = int (input('Enter the number of dice being rolled: '))
    while dice < 1 or 5 < dice:
        print ('Number of dice being rolled must be between 1 and 5')
        dice = int (input('Enter the number of dice being rolled: '))
    return dice ()

def get_sides():
    sides = int (input('Enter the number of sides on the dice: '))
    while sides < 2 or 36 < sides:
        print ('Number of sides on dice must be between 2 and 36')
        sides = int (input('Enter the number of sides on the dice: '))
    return sides


main()        

person Whitekong    schedule 12.07.2017    source источник


Ответы (3)


Ваша проблема в том, что вы помещаете свой оператор print во внутренний цикл for, что означает, что вы печатаете результаты слишком много раз, а также слишком часто увеличиваете nrolls.

nrolls = 1
for r in range (rolls):
    roll = []
    for d in range (dice):
        roll.append(random.randint(1,sides))
    print('Roll #', nrolls, *roll)
    nrolls += 1
>Roll # 1 3 3 1
>Roll # 2 1 5 2
>Roll # 3 6 5 4
person victor    schedule 12.07.2017

Для минимальной модификации вашего кода измените его на это:

for r in range (rolls):
    print('Roll #', nrolls, end=' ')
    for d in range (dice):
        print (random.randint(1,sides), end=' ')
    print()
    nrolls += 1

Кроме того, следующая строка выдает ошибку.

return dice ()

Измените его на:

return dice
person Carter    schedule 13.07.2017

Вы должны использовать цикл while для продолжения запроса кубиков, а затем броска этого количества кубиков.

e.g.

import random
from random import randint
import string

while True:
  str = input("What dice would you like to roll")
  prefix, d, suffix = str.partition("d")
  if str == "quit" or str == "q":
    break
  elif str.startswith("d"):
    print random.randint(1, int(suffix))
  elif str.startswith(prefix):
    for _ in range(int(prefix)):
      print (random.randint(1, int(suffix)))
  elif str.startswith("d"):
    print random.randint(1, suffix)
  else:
   print ("Keep rolling or type q or quit")

print ("exiting")
person Community    schedule 09.01.2018