每当我运行这个程序(不是一个严肃的程序只是搞乱了解事物)时,monster (monster[1])
的损坏只是一遍又一遍地重复相同的数字。它随机化一次,然后重复它。我明白发生了什么,但我不明白为什么会这样。这是代码(对不起,我不知道我是否明白我的问题是否清楚......在我的脑海中有意义大声笑)
编辑 - 我希望怪物[1]函数每次都能随机化,但我不知道怎么做而不编写更多代码(即damage=random.randint(5, 15)
health-=damage
)。如果我这样写它就可以了。但如果我有一系列10个不同的怪物,我不想特别写。我想只是召唤每个怪物并让它自己运行,如果这是有道理的。
monster=[100, (random.randint(5, 15)), random.randint(15, 30)]
此代码不起作用我已经尝试过但只是想知道它是否可行。< / p>
import random
monster = [100, random.randint(5, 15), random.randint(15, 30)]
health = 200
a = 1
print "you run into a monster"
while a == 1:
if monster[0] <= 0:
print "monster is dead"
print "you get, " + str(monster[1]) + " exp"
a += 1
elif monster[0] >= 0:
att = random.randint(5, 15)
monster[0] -= att
health -= monster[1]
print ("you attack the monster and do, " + str(att) + " damage"
" the monster does," + str(monster[1]) + " damage to you")
print "you have, " + str(health) + " health left"
print "monster has, " + str(monster[0]) + " health left"
答案 0 :(得分:2)
monster[1]
在代码的第二行分配一个随机整数。然后它作为整数存储在列表monster
中。那个整数将保持不变。您必须重新运行random.randint(5, 15)
电话才能获得新的“损害”号码或新的预付金额。
虽然我认为它可能超出了你在这里工作的范围,你可能想要研究创建一个class
怪物而不是使用一个数组,然后有一个生成这些随机整数的方法每次攻击。
这是一个示例怪物类,可以让您了解它是如何工作的。
class monster():
def __init__(self,health):
self.health = health
def attack(self):
return random.randint(5,15)
然后您可以按如下方式创建一个新怪物。
monster = monster(100)
查看它造成的伤害程度如下。
monsterDamage = monster.attack()
health -= monsterDamage
print "The monster does " + str(monsterDamage) + " damage to you."
如下所示降低怪物的健康状况。
att = random.randint(5,15)
monster.health -= att
答案 1 :(得分:1)
这一行:
monster=[100,random.randint(5, 15), random.randint(15, 30)]
保存100
和两个随机数一次。例如,这可能是monster
在运行时的表示:
monster=[100, 11, 26]
这些数字不会改变,因为作业只发生一次。 (例如,在循环之外)
答案 2 :(得分:1)
monster=[100,random.randint(5, 15), random.randint(15, 30)]
定义此列表时,它将始终相同。每次执行monster[1]
时,这些值都不会改变。
要解决此问题,您可以执行以下操作:
monster=[100, random.randint, random.randint]
当你去打电话时:
monster[1](15, 15)
只是一个选择。虽然字典在这里可能更好。
答案 3 :(得分:1)
嗯,你只给了monster[1]
一个值,在第二行:
monster=[100,random.randint(5, 15), random.randint(15, 30)]
该行只执行一次,因此“当然”monster[1]
始终是相同的。如果您想要更改monster[1]
(和/或monster[2]
),则需要在循环中为其设置新值 。你为att
做了那个!您需要为所有其他想要改变的事情做类似的事情: - )
答案 4 :(得分:0)
当你拨打电话时:
monster = [100, random.randint(5, 15), ...]
执行random.randint(5,15)函数,并将特定值存储在列表中。
通过将函数存储为字符串,我将提供另外一种替代方法来做你想做的事情;你可以写:
monster = [100, "random.randint(5, 15)", ...]
然后当你想得到一个新的随机整数时,你打电话:
r=eval(monster[1])
并且每次调用它时都会给出一个不同的整数,因为该函数会被重新评估。
(请注意,如果要重新使用随机值,例如打印它,则必须将其存储在临时变量“r”中,然后使用str(r)而不是str(eval( monster [1])),因为前一种方式打印存储在“r”中的调用结果,后一种方式再次重新评估该函数。)
例如
tmp = eval(monster[1])
health -= tmp
print ("you attack the monster and do, " + str(att) + " damage. the monster does," + str(tmp) + " damage to you")