#python #python-3.x #dice
#python #python-3.x #игральные кости
Вопрос:
Попытка бросить кости, как в dungeons и dragon, но отображать каждый бросок. Я не совсем понимаю, что я делаю не так, и ценю всю помощь.
from random import randint
def d(y): #basic die roll
return randint(1, y)
def die(x, y): #multiple die roll 2d20 could roll 13 and 7 being 20
for [x*d(y)]:
print (sum(int(y)))
print (die(3, 20))
хорошо, я воспользовался советом и изменил его, но все еще получаю ошибку в своей строке возврата
#
#trying to roll dice like in dungeons and dragon but display each roll
from random import randint
def d(sides):
return randint(1, sides)
def roll(n, sides):
return tuple(d(sides) for _ in range(n))
def dice(n, sides):
print (roll(n, sides))
return sum(dice)
print(dice(3,20))
Комментарии:
1. Не могли бы вы объяснить, что вы пытаетесь сделать с этой строкой :
for [x*d(y)]:
. Это недопустимый синтаксис.2. например, 2 * d (20) переворачивает число между 2 и 40, но я не вижу, какие числа вошли в него
3.
dice
это функция, которую вы не можете суммироватьdice
. Вам нужно зафиксировать возвратroll(n, sides)
в качестве переменной, напримерx = roll(n, sides); print(x); return sum(x)
. Однако мне не особенно нравится
Ответ №1:
Вы не можете просто умножить результат одного вызова на d()
, вам нужно выполнить n
разные вызовы d()
:
from random import randint
def d(sides):
return randint(1, sides)
def roll(n, sides):
return tuple(d(sides) for _ in range(n))
dice = roll(3, 20)
print(dice, sum(dice))
# (20, 18, 1) 39
Комментарии:
1. хорошо, я последовал вашему совету, но я не хочу делать dice классом, чтобы я мог написать print (dice (3,20)) и упростить процесс скручивания, вот как далеко я продвинулся # # пытаясь бросать кости, как в dungeons и dragon, но отображать каждый бросок из random import randint def d(стороны): возвращает randint(1, стороны) def roll(n, стороны): возвращает кортеж (d (стороны) для _ в диапазоне (n)) def dice(n, стороны): печать (бросок (n, стороны)) возвращает сумму (кости) печать (кости (3,20))
Ответ №2:
Примечание: для этого используется Python 3.6 или выше
from random import randint
def roll(roll)
rolling = []
try:
for x in range(int(roll.split('d')[0])):
rolling.append(randint(1,int(roll.split('d')[1])))
except Exception as err:
print(f'I got bungled @_@ n Error: {err}')
print(f'You rolled {" ".join(str(x) for x in rolling)} which has a total'
f' of {sum(rolling)}')
Что делает эта функция, так это принимает любую комбинацию бросков кости (например, 3d10, 10d10 и т. Д.) И печатает, используя fstring, каждый из брошенных кубиков, а затем выводит объединенный итог.
Редактировать: f-строки можно использовать для еще большего сокращения этого по мере необходимости