首页 文章

对于循环不“刷新”Python

提问于
浏览
1

我在Python中运行一个石头剪刀蜥蜴Spock游戏 . 我希望它用不同的机器人玩5轮 . 我遇到的问题是,当我尝试在我的主函数中循环回合时,即使机器人随机选择其移动,也会打印出相同的匹配5次 .

for循环:

for x in range(0, 5):
    p1move = p1.play()
    p2move = p2.play()
    print(p1move.compareTo(p2move))

游戏方法:

class Human(Player):
    if decisionint == 1:
       def play(hum1):
           hum1 = Rock
           return hum1

机器人的例子:

class RandomBot(Player):
num = randint(1, 5)
if num == 1:
    def play(rando1):
        rando1 = Rock
        return rando1
else:
    if num == 2:
        def play(rando2):
            rando2 = Paper
            return rando2

摇滚课:

class Rock(Element):
def compareTo(_name):
    if _name == Lizard:
        global p1wins
        p1wins += 1
        print("Rock crushes Lizard, Win")

主要方法询问你想要两个玩家是谁,然后将你的第一选择设置为 p1 ,将你的第二选择设置为 p2

如果您需要更多代码,请告诉我们 . 我认为这应该足够但我并不积极 . 谢谢

2 回答

  • 1

    虽然我喜欢你在这里使用物品,但我认为你可以做的比你更多的继承,并进一步滥用干 . 试试这个:

    import random
    
    class Selection(object):
        def __init__(self, value, wins_against, name=None):
            self.value = value
            self.wins_against = wins_against
            self.name = name
        def compare(self,other):
            if other.value == self.value: return 0
            elif other.value in self.wins_against: return 1
            else: return -1
    
    Rock = Selection(0, (2,3), "Rock")         # beats scissors+lizard
    Paper = Selection(1, (0,4), "Paper")       # beats rock+spock
    Scissors = Selection(2, (1,3), "Scissors") # beats paper+lizard
    Lizard = Selection(3, (1,4), "Lizard")     # beats paper+spock
    Spock = Selection(4, (0,2), "Spock")       # beats rock+scissors
    
    class Player(object):
        def __init__(self,name=None):
            self.choice = None
            if name is None: self.name = "Computer"
            else: self.name = name
        def choose(self):
            self.choice = random.choice([Rock,Paper,Scissors,Lizard,Spock])
        def compare(self,other):
            """1 = win, 0 = tie, -1 = lose"""
            return self.choice.compare(other.choice)
    
    class Human(Player):
        def choose(self):
            self.choice = None
            while self.choice is None:
                print("""1. Rock
    2. Paper
    3. Scissors
    4. Lizard
    5. Spock""")
                in_ = input(">> ")
                try:
                    self.choice = {"1":Rock,"2":Paper,"3":Scissors,"4":Lizard,"5":Spock}[in_]
                except KeyError:
                    pass
    
    def play(player1,player2):
        for player in (player1,player2):
            player.choose()
        print("{} vs {}".format(player1.choice.name,player2.choice.name))
        result = player1.compare(player2)
        if result:
            print("{0.name} wins!".format(
                player1 if result > 0 else player2)) 
        else:
            print("Tie game!")
        print("\n\n")
    
    
    Player1 = Human("Joe Schmoe")
    Player2 = Player() # bot
    
    for _ in range(5):
        play(Player1,Player2)
    
  • 2

    当你调用你的游戏方法时,你将Rock分配给实例名称,然后返回它,但基本上相当于:

    class Human(Player):
        if decisionint == 1:
           def play(self):
               return Rock
    

    如果您希望它变化以便您可以正确建模,则需要每次都返回随机选择的元素 .

    例如靠近代码顶部:

    import random
    
    CHOICES = (Rock, Paper, Scissors, Lizard, Spock)
    

    在你的 play 方法中:

    return random.choice(CHOICES)
    

相关问题