Python实现猜数游戏

分类: 源代码 > Python

需求分析

使用Python开发一个猜数小游戏。在游戏中,程序每一轮会随机生成一个0~1024之间的数字,用户输入猜测的数字,程序告诉用户猜大了还是猜小了。在一定次数内猜对,则本轮用户获胜,否则本轮用户失败。每一轮开始时,程序会要求用户输入用户名。程序会一直运行,直到用户输入“3”,停止游戏。在每一轮游戏开始前,输入“1”可以查看用户的输入历史。


知识点

(1)随机生成数字,涉及Python的随机数模块。

(2)用户输入数字,程序输出结果,涉及Python的输入及输出模块。

(3)程序会自动开始下一轮,涉及Python的循环模块。

(4)判断用户的输入,涉及Python的条件判断。

(5)查询用户的输入历史,涉及Python的字典和列表。


2.提示如何判断每一轮猜测多少次以内算猜测成功,多少次以上算猜测失败?根据二分法的原理,假设答案的范围是M~N,那么最多猜测log2(M+N)次就能猜测出正确答案。在这个案例中,范围为0~1024,以2为底,1024的对数为10,所以最多猜测10次就能得到正确答案。

例如,答案为821,用户猜测的时候,应该按照如下逻辑进行。

(1)(0+1024) / 2 = 512,猜512,程序告诉用户比答案小。

(2)(512+1024) / 2 = 768,猜768,程序告诉用户比答案小。

(3)(768+1024) / 2 = 896,猜896,程序告诉用户比答案大。

(4)(768+896) / 2 = 832,猜832,程序告诉用户比答案大。

(5)(768+832) / 2 = 800,猜800,程序告诉用户比答案小。

(6)(800+832) / 2 = 816,猜816,程序告诉用户比答案小。

(7)(816+832) / 2 = 824,猜824,程序告诉用户比答案大。

(8)(816+824) / 2 = 820,猜820,程序告诉用户比答案小。

(9)(820+824) / 2 = 822,猜822,程序告诉用户比答案大。

(10)(820+822) / 2 = 821,猜821,程序告诉用户正确。


源代码实现

import random

history = {}

def try_to_guess(name, answer):
    try_num = 0
    while try_num < 10:
        guess_answer = int(input('请输入一个数字:'))
        if guess_answer < answer:
            print("你输入的数字比正确答案小")
        elif guess_answer == answer:
            print("挑战回答正确")
            history[name].append("成功")
            break
        else:
            print("你输入的数字比正确答案大")
        try_num += 1
    else:
        print("猜错次数太多,挑战失败,正确答案是{}" . format(answer))
        history[name].append("失败")

def show_history():
    for name, data in history.items():
        print('用户:{},记录如下:{}' . format(name, data))

def start():
    name = input("请输入你的名字:")
    if name == 'exit':
        return
    if name not in history:
        history[name] = []
    answer = random.randint(0, 1024)
    try_to_guess(name, answer)

def default():
    pass

if __name__ == '__main__':
    select_dict = {'1': show_history, '2': start, '3': exit}
    while True:
        select = input('1.历史记录\n2.继续游戏\n3.退出游戏\n输入数字选择:')
        select_dict.get(select, default)()
来源:原创 发布时间:2022-03-10 20:21:24