我正在试着写一个类似于D&D掷骰子游戏的程序。它将提示用户输入他们想要做的卷的量,输入他们的卷,并输出结果。将有三个主要函数,get_damage:接受用户输入,如果攻击高于防御,则显示损害计数。如果防御能力更强,则将伤害显示为0。get_roll:假设要模拟一个有无限可能的骰子和面孔的diceroll,看起来像10d3或20d50 (100个骰子有3个面,或20个骰子有50个面)。它将选取一个随机数,并将卷数之和相加,以显示一个整数。最后,我有一个main_menu函数,它将询问用户要玩的回合的数量,接受输入,并显示预期的结束。
例如,我的预期交换是这样的:
你想玩几轮?:(用户输入,例如2)输入玩家1的攻击和玩家2的防御:(用户输入,例如10d4,5d3)输入玩家1的攻击和玩家2的防御:(用户输入,例如4d6,1d600)
输出:玩家1攻击: 10d4,玩家2防御: 5d3,伤害:0,玩家1攻击: 4d6,玩家2防御: 1d600,伤害: 12
问题是,我得到了一个错误,说"ValueError:随机范围()的空范围(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发布于 2021-03-16 13:49:15
I in range(Repeat)的完成:
= random.randint(repeat,torandom)返回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))https://stackoverflow.com/questions/66649649
复制相似问题