D

#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) . Однако мне не особенно нравится print побочный эффект.

Ответ №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-строки можно использовать для еще большего сокращения этого по мере необходимости