2015-02-08 75 views
-2

功能中的隨機數保持原樣,例如,當數字爲1時,它保持爲1.但是,當它在一個函數之外時,它會生成其他數字。如何在類中的函數中生成非重複的隨機數字?

如何在函數中生成非重複的隨機數字?

from random import * 
randomEnemyNames = ["Gandalf", "Batman", "Magikarp", "Ed Sheeran", "Justin Bieber"] 
class Character(object): 
    def __init__(self, name): 
     self.name = name 
     self.attackPhysical = getrandbits(4) 
     self.attackMagical = getrandbits(5) 
     self.enemyAttack = getrandbits(6) 
     self.critChance = random() 
     self.randomHeal = getrandbits(3) 
    def attack(self, enemy): 
     #inside the class and functions 
     print self.critChance #testing with two trials to see if all of it goes random in different ways 
     print self.critChance 
     print self.attackPhysical 
     print self.attackPhysical 
     print self.attackMagical 
     print self.attackMagical 
     print enemy.enemyAttack 
     print enemy.enemyAttack 
     print self.critChance 
     print self.critChance 
     print self.randomHeal 
     print self.randomHeal 
     print self.name 
     print enemy.name 
the_player = Character("Roy") 
the_enemy = Character(choice(randomEnemyNames)) 
the_player.attack(the_enemy) 
#outside the class and functions 
print random() 
print getrandbits(3) 
print getrandbits(4) 
print getrandbits(5) 
print getrandbits(6) 
raw_input("Enter to exit") 

回答

1

你是你的類,而不是代碼的這些屬性分配值,它也可能是這樣的:

def getrandbits(n): 
    return 9 # I rolled 3d6 

class Character: 
    def __init__(self): 
     self.attackPhysical = getrandbits(4) 
    def attack(self, enemy): 
     print(self.attackPhysical) 
     print(self.attackPhysical) 

你需要生成一個新的號碼各一次。也許像:

class Character: 
    def __init__(self): 
     self.attackPhysical = 4 
    def roll(self, n): 
     return getrandbits(n) 
    def attack(self, enemy): 
     physical_dmg = self.roll(self.attackPhysical) 
+0

謝謝你給我答案!我有另一個問題,但我會嘗試修復它。無論如何,非常感謝你! – Roy 2015-02-08 13:57:13