每当我运行这个程序(不是一个严肃的程序,只是为了了解事情的想法)时,monster (monster[1]) 造成的损害只是一遍又一遍地重复相同的数字。它随机化一次然后重复它。我明白发生了什么,但我不明白为什么会这样。这是代码(对不起,我不知道我是否把我的问题说清楚了......在我的脑海中是有道理的,哈哈)

编辑 - 我希望 Monster[1] 函数每次都随机化,但我不知道如何在不编写更多代码的情况下做到这一点(即 damage=random.randint(5, 15) health-=damage )。如果我这样写,它工作正常。但如果我有一系列 10 个不同的怪物,我不想特别写。如果有意义的话,我想调用每个怪物并让它自己运行。

编辑#2:是否有可能在列表中创建一个元组,因为元组是不可变的(即 monster=[100, (random.randint(5, 15)), random.randint(15, 30)] 这段代码不起作用我已经尝试过了,但只是想知道是否有可能。

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"

最佳答案

monster[1] 在代码的第二行被分配一个随机整数。然后将其作为整数存储在列表 monster 中。该整数将保持不变。您必须重新运行 random.randint(5, 15) 调用才能获得新的“损坏”数字或新的 exp 量。

虽然我认为这可能超出了您在这里工作的范围,但您可能希望研究创建一个 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

关于python - random.randint 函数没有按照我希望的方式工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18808729/

10-10 14:27