栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > Python

python实例 - 猜数字游戏

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python实例 - 猜数字游戏

猜数字游戏
  • 在游戏中,程序每一轮会随机生成一个0~1024之间的数字,用户输入猜测的数字,程序告诉用户猜大了还是猜小了。在一定次数内猜对,则本轮用户获胜,否则本轮用户失败。每一轮开始时,程序会要求用户输入用户名。程序会一直运行,直到用户输入“3”,停止游戏。在每一轮游戏开始前,输入“1”可以查看用户的输入历史。
  • 如何判断每一轮猜测多少次以内算猜测成功,多少次以上算猜测失败?
  • 根据二分法的原理,假设答案的范围是M~N,那么最多猜测log2(M+N)次就能猜测出正确答案。在这个案例中,范围为0~1024,以2为底,1024的对数为10,所以最多猜测10次就能得到正确答案。
  • 程序代码:
    import random
    
    history = {}
    
    def creat_answer():
        return random.randint(0, 1024)
    
    def try_to_guess(name, answer):
        # 猜数的次数
        try_num = 0
        while try_num < 10:
            guess_answer = int(input("请输入一个数字:"))
            if guess_answer < answer:
                print("你猜小了~")
                history[name].append('失败')
    
            elif guess_answer == answer:
                print("bingo,你猜对了~")
                history[name].append('成功')
                break
            else:
                print("你猜大了~")
                history[name].append('失败')
            try_num += 1
        else:
            print("你猜的次数太多啦,失败~")
            history[name].append('失败')
    
    # 显示历史成绩
    def show_history():
        for name, score in history.items():
            print('用户名:',name + ',历史成绩', score)
    
    # 开始游戏
    def start():
        guess_name = input("请输入你的名字:")
        # 检查用户名是否存在,不存在则创建
        if guess_name not in history.keys():
            history[guess_name] = []
    
        try_to_guess(guess_name, creat_answer())
    
    if __name__ == '__main__':
        select_dict = {'1': show_history, '2': start, '3': exit}
        while True:
            guess_select = input('1. 历史记录n2. 开始游戏n3. 退出游戏n请输入数字选择:')
            select_dict.get(guess_select)()
    
  • 运行结果
  • 拓展,用户自定义数字区间
    import random
    import math
    
    history = {}
    
    def input_guess(start, end):
        ''' 判断用户输入的字符,不符合则提示用户重新输入,符合则返回这个字符 '''
        guess = int(input('请输入{}~{}之间,猜测的数字:'.format(start, end)))
        if guess >= start and guess <= end:
            return guess
        else:
            print('输入非法数字,重新输入,请确定数字在{}~{}之间'.format(start, end))
    
    def try_to_guess(name):
        # 定义猜测次数
        try_num = 0
        # 定义数字范围,并转成整型
        start, end = input("请输入猜测数字的范围(用,分隔):").split(',')
        start, end = int(start), int(end)
        # 随机答案
        answer = random.randrange(start, end+1)
        # 规定次数,并转为整数
        times = math.log2(start + end)
        times = math.floor(times)
        print('请在{}次内猜测正确数字'.format(times))
    
        # 判断语句,当猜测次数小于规定次数,则循环
        while try_num < times:
            guess_answer = input_guess(start, end)
            if guess_answer < answer:
                print("你猜小了~")
                history[name].append('失败')
            elif guess_answer == answer:
                print("bingo,你猜对了~")
                history[name].append('成功')
                break
            else:
                print("你猜大了~")
                history[name].append('失败')
            try_num += 1
        else:
            print("你猜的次数太多啦,失败~")
            history[name].append('失败')
    
    def show_history():
        for name, score in history.items():
            print('用户名:',name + ',历史成绩', score)
    
    def start():
        guess_name = input("请输入你的名字:")
        # 检查用户名是否存在,不存在则创建
        if guess_name not in history.keys():
            history[guess_name] = []
        try_to_guess(guess_name)
    
    if __name__ == '__main__':
        select_dict = {'1': show_history, '2': start, '3': exit}
        while True:
            guess_select = input('1. 历史记录n2. 开始游戏n3. 退出游戏n请输入数字选择:')
            select_dict.get(guess_select)()
    
  • 运行结果
转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/1037482.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号