Python Cows and Bulls 游戏 - 无限循环

Python Cows and Bulls game - Infinite while loop

这是我第一次 post 在 Whosebug 上,所以如果我做错了什么,请告诉我。这款名为 Cows and Bulls 的游戏类似于一款名为 Mastermind https://en.wikipedia.org/wiki/Bulls_and_Cows 的游戏。本质上,您必须在不给出任何重复数字的情况下猜测四位数代码。我遇到的错误是,当我到达名为 "Check code for repeated numbers" 的部分时,如果随机代码中有重复项,它将在 while 语句处进入无限循环。有人能帮我解决这个问题吗?

import random
def main():
    bulls=0 #Correct Number in Correct Position
    cows=0 #Correct Number in Wrong Position
    CODE=random.randint(1000,9999)
    CODE=str(CODE)
    codeFirst=int(CODE[0])
    codeSecond=int(CODE[1])
    codeThird=int(CODE[2])
    codeFourth=int(CODE[3])
    GUESS=int(input("Guess:"))
    repeatedCode=True

    #Check for exactly four digits
    if GUESS <= 1000 or GUESS >= 9999:
        print("Invalid input - Guess must be four digits!")
        return
    elif GUESS >= 1000 and GUESS <= 9999:
    #If all previous conditions cleared set guess values
    GUESS=str(GUESS)
    guessFirst=int(GUESS[0])
    guessSecond=int(GUESS[1])
    guessThird=int(GUESS[2])
    guessFourth=int(GUESS[3])

    #Check code for repeated numbers
    while repeatedCode == True:
        if codeFirst == codeSecond or codeFirst == codeThird or codeFirst == 
 codeFourth:
             CODE=random.randint(1000,9999)
             print("Test1")
             repeatedCode == True
        elif codeSecond == codeThird or codeSecond == codeFourth:
            CODE=random.randint(1000,9999)
            print("Test2")
            repeatedCode == True
        elif codeThird == codeFourth:
            CODE=random.randint(1000,9999)
            print("Test3")
            repeatedCode == True
        else:
            repeatedCode==False
            break

    print('Test passes repeated code')

    #Check for repeated numbers
    if guessFirst == guessSecond or guessFirst == guessThird or guessFirst 
== guessFourth:
        print("Invalid Input - guess cannot contain duplicates")
        return
    elif guessSecond == guessThird or guessSecond == guessFourth:
        print("Invalid Input - guess cannot contain duplicates")
        return
    elif guessThird == guessFourth:
        print("Invalid Input - guess cannot contain duplicates")
        return

    #Bulls and Cows
    if guessFirst == codeFirst:
        bulls=bulls + 1
    elif guessFirst == codeSecond or guessFirst == codeThird or guessFirst 
== codeFourth:
        cows=cows + 1

    if guessSecond == codeSecond:
        bulls + 1
    elif guessSecond == codeFirst or guessSecond == codeThird or guessSecond 
== codeFourth:
        cows=cows + 1

    if guessThird == codeThird:
        bulls=bulls + 1
    elif guessThird == codeFirst or guessThird == codeSecond or guessThird 
== codeFourth:
        cows=cows + 1

    if guessFourth == codeFourth:
        bulls=bulls + 1
    elif guessFourth == codeFirst or guessFourth == codeSecond or guessFourth == codeThird:
        cows=cows + 1

    #Final Text Output   



print("Guess:",guessFirst, guessSecond,guessThird,guessFourth,"Code:",codeFirst,codeSecond,\
      codeThird,codeFourth,"Results:", bulls,"-",cows)
    return
main()

它将进入无限循环,因为当出现重复数字时,您只是在更新 Code 的值,而不是在条件中使用的 CodeFirst、CodeSecond、CodeThird 和 CodeFourth 的值。应该是这样的

    while repeatedCode == True:
        if codeFirst == codeSecond or codeFirst == codeThird or codeFirst == codeFourth:
             CODE=random.randint(1000,9999)
             CODE=str(CODE)
             codeFirst=int(CODE[0])
             codeSecond=int(CODE[1])
             codeThird=int(CODE[2])
             codeFourth=int(CODE[3])
             print("Test1")
        elif codeSecond == codeThird or codeSecond == codeFourth:
             CODE=random.randint(1000,9999)
             CODE=str(CODE)
             codeFirst=int(CODE[0])
             codeSecond=int(CODE[1])
             codeThird=int(CODE[2])
             codeFourth=int(CODE[3])
             print("Test2")
        elif codeThird == codeFourth:
             CODE=random.randint(1000,9999)
             CODE=str(CODE)
             codeFirst=int(CODE[0])
             codeSecond=int(CODE[1])
             codeThird=int(CODE[2])
             codeFourth=int(CODE[3])
             print("Test3")
        else:
            repeatedCode=False

您也可以使用集合来测试代码是否有重复数字,而不是创建四个变量。我会让您了解如何使用集合。