繁体   English   中英

为什么我的 python 程序返回 ValueError?

[英]Why does my python program return a ValueError?

我正在尝试编写一个类似于 D&D 掷骰子游戏的程序。 它将提示用户输入他们想要做的卷的数量,输入他们的卷,output 结果。 将有三个主要功能,get_damage:接受用户输入,如果攻击高于防御,则显示伤害计数。 如果防御更高,则显示伤害为 0。 get_roll:应该模拟具有无限可能骰子和面的骰子,看起来像 10d3 或 20d50(100 骰子有 3 个面,或 20 骰子有 50 个面)。 它将选择一个随机数并添加卷的总和以显示 integer。 最后,我有 main_menu function,它将询问用户要玩的轮数、输入并显示预期的结局。

例如,我打算交换 go 是这样的:

你想玩几卷/几轮? :(用户输入,前 2)输入玩家 1 攻击和玩家 2 防御以进行掷骰 1:(用户输入,前 10d4,5d3)输入玩家 1 攻击和玩家 2 防御用于掷骰 2:(用户输入,前 4d6,1d600)

Output:玩家 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之间滚动,而不是在repeattorandom之间滚动。 你需要总结所有的卷,所以只有在循环完成后才返回。

complete = 0
for i in range(repeat):
  complete += random.randint(1, torandom)
return complete

如果您对该功能感到满意,您可以使用生成器表达式将其压缩为单行。

return sum(random.randint(1, torandom) for i in range(repeat))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM