猜数字 3000

题目描述

提供一个由 0-9 数字组成的不重复的随机位置的 4 位数。用户进行输入猜测。每次猜测后提供提示信息 A 和 B 的数量,其中,A 表示数字存在在 4 位数之间并且摆放位置正确的数字的个数。B 表示数字存在在 4 位数之间但位置摆放不正确的数字个数。

例如:假设答案是 7365
输入 0123 则提示信息应该为 0 A 1 B
输入 3756 则提示信息应该为 0 A 4 B
输入 7356 则提示信息应该为 2 A 2 B
输入 7365 则提示信息应该为 4 A 0 B

代码:

# 导入所需模块
import random
import string
import time


flag = 1  # 初始化flag为1
while flag:  # 进入循环
    guess_time = 1  # 初始化猜的次数为1
    print("\n根据提示在有限次数内猜测出一串0-9组成有特定位置的4位数字\n提示方式:")
    print("  A         数字存在并且位置正确的数字个数")
    print("  B         数字存在的个数但位置摆放不正确的数字个数")
    print("------------------------游戏加载------------------------")
    scale = 50  # 进度条大概的宽度
    # print("游戏加载".center(scale, "-"))  # .center() 控制输出的样式,宽度为 25,汉字居中,两侧填充 -
    start = time.perf_counter()  # 调用一次 perf_counter(),从计算机系统里随机选一个时间点A,计算其距离当前时间点B1有多少秒。当第二次调用该函数时,默认从第一次调用的时间点A
    # 算起,距离当前时间点B2有多少秒。两个函数取差,即实现从时间点B1B2的计时功能。
    for i in range(scale + 1):
        a = '*' * i  # i 个长度的 * 符号
        b = '.' * (scale - i)  # scale-i个长度的 . 符号 符号 *. 总长度为50
        c = (i / scale) * 100  # 显示当前进度,百分之多少
        dur = time.perf_counter() - start  # 计时,计算进度条走到某一百分比的用时
        print("\r{:^3.0f}%[{}->{}] 加载花费:{:.2f}s".format(c, a, b, dur),
              end='')  # \r用来在每次输出完成后,将光标移至行首,这样保证进度条始终在同一行输出,即在一行不断刷新的效果;{:^3.0f},输出格式为居中,占3位,小数点后0位,浮点型数,对应输出的数为c;{
        # },对应输出的数为a;{},对应输出的数为b;{:.2f},输出有两位小数的浮点数,对应输出的数为dur;end='',用来保证不换行,不加这句默认换行。
        time.sleep(0.2)  # 在输出下一个百分之几的进度前,停止0.2秒
    # print("\n" + "开始游戏".center(scale, '-'))  # .center() 控制输出的样式,宽度为 25,汉字居中,两侧填充 -
    print("\n------------------------开始游戏------------------------")
    print("这是由0-9组成的有特定位置4位数字,你有10次机会去猜对它")
    seeds = string.digits  # string.digits是一个定义好的数字字符串,范围为"0123456789"。
    random_str = random.sample(seeds, k=4)  # sample方法生成的4个随机数是不会重复的。
    random_number = "".join(random_str)  # 无分隔符连接随机生成的4个数字字符
    print(random_number)  # 查看答案
    for t in range(10):  # 循环10次
        a = 0  # 初始化A的个数为0
        b = 0  # 初始化B的个数为0
        print("\n第%d次尝试:" % guess_time)  # 打印第几次输入
        guess_number = input()  # 用户输入猜测的数字
        for i, j in zip(guess_number, random_number):  # 将guess_number和random_number中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
            if i == j:  # 数字存在并且位置正确时
                a += 1  # A的个数加1
            if i in random_number and i != j:  # 数字存在但位置摆放不正确的数字个数
                b += 1  # B的个数加1
        guess_time += 1  # 猜测次数加1
        print("{'A':%d, 'B':%d}" % (a, b))  # 打印AB的值作为提示
        if guess_number == random_number:  # 当猜的数字为随机数字时,执行下面程序
            print("恭喜你!猜对啦!")  # 打印“恭喜你!猜对啦!”
            print("是否再玩一次呢?(是/否)")  # 打印“是否再玩一次呢?(是/否)”
            input_result = input()  # 接收用户输入
            if input_result == "是" or input_result == "是的":  # 当用户输入“是”或者“是的”时,执行下面程序
                break  # 结束循环
            elif input_result == "否":
                flag = 0  # 把0赋给flag
                break  # 结束循环
        if guess_time == 11:  # 若猜数次数为11,打印“非常遗憾!你的机会用光啦!”
            print("非常遗憾!你的机会用光啦!")  # 打印“非常遗憾!你的机会用光啦!”

运行结果截图

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值