我正在做一个项目。我需要创建骰子。我有一个解决方案如下:
from random import randint
def make_fair_dice(sides):
"""Return a die that returns 1 to SIDES with equal chance."""
assert type(sides) == int and sides >= 1, 'Illegal value for sides'
def dice():
return randint(1,sides)
return dice
four_sided = make_fair_dice(4)
six_sided = make_fair_dice(6)我不明白为什么解决方案要创建一个内部函数dice()。我认为这没有必要。但我知道我可能错过了一个重要的概念。一如既往,代码不是难懂的,而是概念。
发布于 2021-01-18 12:44:09
这里的想法是你的“死亡”是一个函数。如果您这样做了:
four_sided = make_fair_dice(4)
six_sided = make_fair_dice(6)您正在创建一个四面骰子和一个六面骰子。您可以通过调用函数来“滚动”它;您不需要再次提供边数,因为"die“(由make_fair_dice函数返回的函数)已经包含了该信息。
例如,您可以执行以下操作:
print(f"5d4: {sum(four_sided() for _ in range(5))}")
print(f"3d6: {sum(six_sided() for _ in range(3))}")另一种表示相同概念的方法是使骰子对象包含边的数量,并具有滚动它们的方法:
class FairDie:
def __init__(self, sides: int) -> None:
assert type(sides) == int and sides >= 1, 'Illegal value for sides'
self._sides = sides
def roll(self) -> int:
return randint(1, self._sides)然后:
four_sided = FairDie(4)
six_sided = FairDie(6)
print(f"5d4: {sum(four_sided.roll() for _ in range(5))}")
print(f"3d6: {sum(six_sided.roll() for _ in range(3))}")https://stackoverflow.com/questions/65766819
复制相似问题