如何解决为什么我的 Python 程序会返回 ValueError?
我正在尝试编写一个类似于 D&D 掷骰子游戏的程序。它将提示用户输入他们想要做的卷数,输入他们的卷数,并输出结果。将有三个主要功能,get_damage:接受用户输入,如果攻击高于防御,则显示伤害计数。如果防御更大,则显示伤害为0。 get_roll:应该模拟一个无限可能的骰子和面,看起来像10d3或20d50(100个骰子有3个面,或20个骰子有50个面)。它将选择一个随机数并添加滚动的总和以显示一个整数。最后,我有 main_menu 函数,它会询问用户要玩的回合数、输入并显示预期的结局。
例如,我打算进行这样的交换:
你想要做多少卷/要玩几轮? :(用户输入,ex 2) 输入玩家 1 的攻击和玩家 2 的防御以进行掷骰:(用户输入,例如 10d4,5d3) 输入玩家 1 的攻击和玩家 2 的防御用于掷骰 2:(用户输入,ex 4d6,1d600)
输出: 玩家 1 攻击:10d4,玩家 2 防御:5d3,伤害:0 玩家 1 攻击:4d6,玩家 2 防御:1d600,伤害:12
问题是,我收到一条错误消息,显示“ValueError:randrange() (10,5,-5) 的空范围”。我的代码附在下面。有人能对此有所了解吗?
def get_damage(attack,defense):
if attack > defense:
return attack - defense
else:
return 0
def get_roll(rollstring):
repeat = int(rollstring.split("d")[0])
torandom = int(rollstring.split("d")[1])
for i in range(repeat):
complete = random.randint(repeat,torandom)
return complete
def main_menu():
a = int(input("How many rolls do you want to do? "))
c = 0
list = []
for roll in range (0,a):
print("Input Player 1 and Player 2's rolls for round",roll + 1,": ")
b = input()
list = list + b.split(",")
for element in range (0,a):
attack = list[c]
defense = list[c + 1]
attack1 = get_roll(attack)
defense1 = get_roll(defense)
print("Player 1 Attack: " + str(attack) + "," + "Player 2 Defense: " + str(defense) + "," + ">> Damage: " + str(get_damage(attack1,defense1)))
c = c + 2
解决方法
for i in range(repeat):
complete = random.randint(repeat,torandom)
return complete
您希望在 1 和 torandom
之间而不是在 repeat
和 torandom
之间滚动。你需要总结所有的滚动,所以只有在循环完成后才返回。
complete = 0
for i in range(repeat):
complete += random.randint(1,torandom)
return complete
如果您对该功能感到满意,您可以使用 generator expression 将其压缩为单行。
return sum(random.randint(1,torandom) for i in range(repeat))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。