首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python:牛与牛的游戏

Python:牛与牛的游戏
EN

Stack Overflow用户
提问于 2020-05-03 22:11:25
回答 4查看 739关注 0票数 0

*Q.Randomly生成一个4位数的数字.让用户猜一个四位数的数字.对于用户在正确位置正确猜出的每一个数字,他们都有一个“牛”。对于每一个数字,用户猜测错误的地方的数字是“牛市”。

每次用户猜测,告诉他们有多少“牛”和“公牛”。一旦用户猜对了号码,游戏就结束了。跟踪用户在整个游戏中的猜测次数,并在游戏结束时告诉用户。

**现在的问题是,我已经制作了程序,但它可以生成任意4位数的数字,这时问题就出现了。例如:

生成的号码是3568。

用户类型: 3266

然后用户得到2头母牛和2头公牛。

但是用户无法知道在他输入的数字中哪些是正确的数字。

我想要一个能告诉用户他猜对了的数字的函数。在这个例子中,程序应该告诉用户3和6在以下地方是正确的。**

代码语言:javascript
运行
复制
import random


def compare_number(number, user_guess):
    cowbull = [0, 0]
    for i in range(len(number)):
        if number[i] == user_guess[I]:
           cowbull[1] += 1
        else:
           cowbull[0] += 1
    return cowbull


if __name__ == "__main__":
    playing = True
    number = str(random.randint(1000, 10000))
    guesses = 0

    print("Let's Play A Game Of Cows And Bulls!")
    print("I Will Generate A 4 Digit Number, And You Have To Guess The Numbers One Digit At A Time.")
    print("For Every Number I The Wrong Place, You Get A Bull. For Every Number In The Right Place, 
    You Get A Cow.")
    print("The Game Will End When You Get 4 Bulls.")
    print("Type Exit At Any Prompt To Exit!")

while playing:
    user_guess = input("Give Me The Best You Got!: ")
    if user_guess.lower() == "exit":
        break
    cowbull_count = compare_number(number, user_guess)
    guesses += 1
    print(f"You Have {cowbull_count[1]} Cows, And {cowbull_count[0]} Bulls.")

    if cowbull_count[1] == 4:
        playing = False
        print(f"You Win The Game After {guesses} Guess(es)!. The Number Was {number}.")
        break
    else:
        print(f"Your Guess Isn't Quite Right, Tyr Again!.")
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-05-04 04:33:47

你可以这样做:

代码语言:javascript
运行
复制
    import random

def compare_number(number, user_guess):
    cowbull = [0, 0, 0, 0]
    for i in range(len(number)):
        if number[i] == user_guess[i]:
           cowbull[i] += 1
    return cowbull


if __name__ == "__main__":
    playing = True
    number = str(random.randint(1000, 10000))
    guesses = 0

    print("Let's Play A Game Of Cows And Bulls!")
    print("I Will Generate A 4 Digit Number, And You Have To Guess The Numbers One Digit At A Time.")
    print("For Every Number I The Wrong Place, You Get A Bull. For Every Number In The Right Place, You Get A Cow.")
    print("The Game Will End When You Get 4 Bulls.")
    print("Type Exit At Any Prompt To Exit!")

while playing:
    user_guess = input("Give Me The Best You Got!: ")
    if user_guess.lower() == "exit":
        break
    cowbull_count = compare_number(number, user_guess)
    guesses += 1
    correct = sum(cowbull_count)
    wrong = len(number) - correct
    print(f"You Have {correct} Cows, And {wrong} Bulls.")

    if correct == 4:
        playing = False
        print(f"You Win The Game After {guesses} Guess(es)!. The Number Was {number}.")
        break
    else:
        print(f"Your Guess Isn't Quite Right, Try Again!.")
        if correct >= 1:
            print(str([user_guess[i] for i, x in enumerate(cowbull_count) if x == 1]) + " was correct!")

对原始代码所做的更改:

  1. 没有返回numOfCorrect,numOfWrong,我返回的是1正确吗?,2正确吗?,3正确吗?4是正确的吗? //你需要这样做才能知道哪个是对的,哪个是错的,compare_number
  2. the,

  1. ,奶牛的数量等于cowbull_count /中的1's之和,因为cowbull_count //改变了,因为cowbull_count的返回不同,公牛的数量是等于错误的数目,等于数字的数目-错误数=len(数字)-由于compare_number
  2. if的不同返回而正确//改变了,显示它们得到了正确的/这是你想要的

样本运行

票数 0
EN

Stack Overflow用户

发布于 2020-05-03 22:18:25

可以替换比较编号函数以打印正确数字的索引和值。

代码语言:javascript
运行
复制
def compare_number(number, user_guess):
    cowbull = [0, 0]
    for i in range(len(number)):
        if number[i] == user_guess[I]:
           cowbull[1] += 1
           print("The number " + number[i] + " at index " + i " is correct") 
        else:
           cowbull[0] += 1
           print("The number " + number[i] + " at index " + i " is incorrect") 
    return cowbull
票数 0
EN

Stack Overflow用户

发布于 2020-05-03 22:29:04

添加另一个返回位置列表的方法:4个元素列表,如果用户没有猜到数字,则为0;如果没有,则添加1个。您可以在您的功能中使用它。

代码语言:javascript
运行
复制
def digit_position(number, user_guess):
    right_guesses = [0, 0, 0, 0]
    for i in range(len(number)):
        if number[i] == user_guess[i]:           
           right_guesses[i] = 1
    return right_guesses
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61582316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档