猜数字赢金币

充值金币后开始游戏,猜中奖励10金币退出,不中扣除1金币继续。


(笔记模板由python脚本于2023年12月03日 21:52:23创建,本篇笔记适合熟悉程序函数式编程,熟练掌握基本数据类型的coder翻阅)


【学习的细节是欢悦的历程】



**  自学并不是什么神秘的东西** ,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。

------ 华罗庚




充值金币后开始游戏 猜数字赢金币 (猜中奖励退出不中扣金币继续)



本文质量分:
97
本文地址: https://blog.csdn.net/m0_57158496/article/details/134771393

CSDN质量分查询入口:http://www.csdn.net/qc



目 录

  • ◆ 猜数字赢金币
    • 1、题目描述
    • 2、算法解析
      • 2.1 用户登录
      • 2.2 菜单
      • 2.3 次级灰色标题
      • 2.4 金币充值
      • 2.5 游戏
      • 2.6 game模块
    • 3、 全局变量
    • 4、完整源码

◆ 猜数字赢金币

1、题目描述

  • 题目描述截屏图片

【题目来源于CSDN 问答社区提问"猜数字赢金币"】


回页目录


2、算法解析

  • 游戏规则: 游戏金币初始值为0,成功登录进入游戏菜 单,先去菜单2充值金币,每次充值为1~100金币,一次最多连续充值5次。金币为0,无法开启游戏,金币数量越小,可以猜数的次数相对越少,可以自行决定充值数额。

      一旦开始游戏,将不可返回充值,直到猜中或金币耗尽结束游戏退出程序;猜中奖励10金币,不中扣除1金币。

      金币数量为0,将无法游戏。请自行决定充 值金币数额。

  • 写在最后

      写本程序代码,缘于回答csdn问答社区的一个粉丝提问。觉得这也是一个练手小"项目",决定炼炼代码,打造一个囫囵的程序。对处"算法"进行优化,对代码进行凝炼,经过无数次修磨,终成此"最好"代码块(现阶段的水准能达高度)


2.1 用户登录

循环登录,直到用户名、密码正确,才可以正常进入游戏菜单;否则超过最大三次错误登录,将强制退出程序。

  • 代码运行效果截屏图片



python代码

python 复制代码
def login():
    ''' 用户登录 '''
    sys_usrname = '梦幻精灵_cq'
    sys_password = 'DreamElf_cq'
    
    for i in '123':
        print(clear) # Linux式清屏。
        username, password = [input(f"\n{'':>6}{i}:").strip() for i in ('用户名', '密  码')]

        if username == sys_usrname and sys_password == password:
            input(f"\n\n{' 登录成功!':~^35}\n\n{'(任意键开始游戏)':^33}")
            return
        else:
            if username != sys_usrname:
                 input(f"\n{' 用户名错误!':~^34}\n")
                 continue 
            else:
                input(f"\n{' 密码错误!':~^35}\n")
                continue 
    
    print(f"\n{' 三次机会已用完!':~^32}\n\n{'(您已退出程序)':^33}")
    exit() 

回页目录


2.2 菜单

菜单项字符串循环打印,一行语句打印菜单列表。

  • 代码运行效果截屏图片

python代码

python 复制代码
def menu():
    ''' 菜单显示 '''
    strMenu = ['说 明', '充 值', '开 始'] # 菜单项字符串列表,可"无限"拓展。
    print(f"\033[2J\n{' 猜数赢金币 ':=^35}\n\n") # Linux式清屏。
    
    for k,i in enumerate(strMenu):
        print(f"{f'{k+1}.  {i}':^38}\n")
    
    print(f"{'0.  退 出':^38}\n")
    return inputNum(f"\n{'':>6}菜单选择:_", 0, len(strMenu)), len(strMenu) # 调用数字输入函数,完成数字输入。

回页目录


2.3 次级灰色标题

打印题目描述及游戏说明。我这个"项目",缘起csdn问答社区的"期末作业"提问。

  • 代码运行效果截屏图片

python代码

python 复制代码
def readme():
    ''' 游戏规打印 '''
    relue = f"\n\n\n{' 游戏规则 ':.^36}\n\n{'':>4}游戏金币初始值为0,成功登录进入游戏菜单,先去菜单2充值金币,每次充值为1~100金币,一次最多连续充值5次。金币为0,无法开启游戏,金币数量越小,可以猜数的次数相对越少,可以自行决定充值数额。\n{'':>4}一旦开始游戏,将不可返回充值,直到猜中或金币耗尽结束游戏退出程序;猜中奖励10金币,不中扣除1金币。\n{'':>4}金币数量为0,将无法游戏。请自行决定充值金币数额。"
    mySay = f"\n\n\n{' 写在最后 ':.^36}\n\n\n{'':>4}写本程序代码,缘于回答csdn问答社区的一个粉丝提问。觉得这也是一个练手小"项目",决定炼炼代码,打造一个囫囵的程序。对处"算法"进行优化,对代码进行凝炼,经过无数次修磨,终成此"最好"代码块(现阶段的水准能达高度)。"
    tip = f"\n{' 题目描述 ':.^36}\n\n"
    print(f"{clear}\n{''.join([tip, text1, text2, text3, text4, text5, relue, mySay])}\n\n{'':=^40}")
    pause() # 暂停。

回页目录


2.4 金币充值

金币数量是全局变量,我将其放入一个列表,实现了各个模块都可以读写其值。

  • 代码运行效果截屏图片

    错误输入提示后继续

python代码

python 复制代码
def recharge():
    ''' 充值模块 '''
    for i in range(5):
        print(clear)
        localGold() # 列印当前金币数。
        gold = int(inputNum(f"\n{' 金币充值 ':~^36}\n\n{'':>12}输入:", 1, 100))
        
        if not 1 <= gold <= 100:
            print(f"\n{'(充入金额为1~100,请重新充值)':^29}\n")
            continue 
        
        gold_money[0] += gold
        
        if not input(f"\n{'':>4}继续充值?(y or Y) _").strip() in list('yY') :
                break 

    if i == 5:
        print(f"\n\n\n{' 充值超过5次 ':^35}\n")
    else:
        print(f"\n\nn{' 充值完成 ':~^36}\n")

    localGold() # 当前金币。
    pause() # 暂停。

回页目录


2.5 游戏

猜数字赢金币,猜中奖励10金币退出程序;不中扣除1金币继续游戏。

含循环猜数字和"中不中"评判两个部分,循环猜数字中调用函数decide函数对所猜数字进行评判。

  • 代码运行效果截屏图片


python代码

python 复制代码
def decide(maigc, guess):
    ''' 金币评判 '''

    if maigc == guess:
        gold_money[0] += 10
        print(f"\n{' 您真棒!':~^36}\n\n{'(增加10枚金币!)':^35}")
        localGold() # 当前金币。
        pause() # 暂停。
        exit() 
    else:
        tic = '您猜大了' if guess > maigc else '您猜小了'
        gold_money[0] -= 1
        print(f"\n\n\n{f' {tic}!':~^35}\n\n{'(扣除1枚金币!)':^35}")
        localGold() # 当前金币。
        pause() # 暂停。


def play():
    ''' 游戏 '''

    if not gold_money[0]:
        print(clear)
        localGold()
        print(f"\n{' 请先充值再来游戏 ':~^32}")
        pause()
        return 

    from random import randint # 加载随机整数选择方法。
    maigc = randint(0, 99) # 产生一个100以内的随机整数。
    
    while gold_money[0] > 0:
        print(clear)
        guess = int(inputNum(f"{'':>12}猜数:_", 0, 99))
        print(decide(maigc, guess))
        
    print(f"{clear}\n\n{' Game is Over! ':~^40}\n\n\n\n{'您的金币已耗尽!':^32}\n{'':=^40}\n")
    exit() 

回页目录


2.6 game模块

game模块,实现各个模块循环调用,实现菜单选择功能。

  • 代码运行效果截屏图片

    "退出游戏"菜单效果

python代码

python 复制代码
def game():
    ''' 游戏主程序 '''
    login() # 调用登录模块登录游戏。
    
    while True: # 菜单死循环,选择菜单主动退出。
        flag, n = menu()

        if flag == '1':
            readme() # 游戏说明。
        elif flag == '2':
            recharge() # 金币充值。
        elif flag == '3':
            play() # 开始游戏。
        elif flag == '0':
            print(f"\033[2J\n{' 猜数赢金币 ':=^35}\n\n\n{f' 您已退出游戏。':^33}\n\n{f' 欢迎下次来玩!':^33}\n\n\n{'':=^40}")
            exit()

回页目录


3、 全局变量

我把用得最多当前金币数显示localGold、提示信息暂停pause和数字输入inputNum的操作,封装成了函数,方便代码复用。Linux系统ASCII控制字符清屏打印游戏名称行,设置成字符串变量。

  • 代码运行效果截屏图片

    菜单选择调用数字输入函数inputNum


    金币充值调用inputNum函数


    "猜数字"输入调用inputNum函数


      这三处都调用inputNum,避免了为"健壮"代码,分别在三个地方对非法输入进行拦截处理。在inputNum函数内部拦截了所有非法输入,只有输入"合法"才会返回数字输入字符串,不然一起while下去,永不停歇。

python代码

python 复制代码
# 全局变量 #
gold_money = [0] # 金币初始值。
clear = f"\033[2J\n{' 猜数赢金币 ':=^35}\n\n" # Linux式清屏字符串。
localGold = lambda: print(f"\n\n{f' 当前金币数:{gold_money[0]} ':^34}\n{'':~^40}")
pause = lambda: input(f"\n\n{'(任意键继续)':^35}")


def inputNum(tip, a, b):
    ''' 数字输入 '''

    while True:
        num = input(f"\n{f'(选择区间{a}~{b})':^34}\n{'':.^40}\n{tip}").strip()
        if num in map(str, range(a, b+1)):
            return num

        print(f"\n{f' 输入错误!':~^35}\n")

回页目录


4、完整源码

(源码较长,点此跳过源码)

python 复制代码
#!/sur/bin/nve python
# coding: utf-8
from random import randint # 加载随机整数选择方法。

# 全局变量 #
gold_money = [0] # 金币初始值。
clear = f"\033[2J\n{' 猜数赢金币 ':=^35}\n\n" # Linux式清屏字符串。
localGold = lambda: print(f"\n\n{f' 当前金币数:{gold_money[0]} ':^34}\n{'':~^40}")
pause = lambda: input(f"\n\n{'(任意键继续)':^35}")


def inputNum(tip, a, b):
    ''' 数字输入 '''

    while True:
        num = input(f"\n{f'(选择区间{a}~{b})':^34}\n{'':.^40}\n{tip}").strip()
        if num in map(str, range(a, b+1)):
            return num

        print(f"\n{f' 输入错误!':~^35}\n")


# 壹 #
text1 = '1、登录功能:\n    用户名username和密码pasword与系统提供的用户名sys_username、 密码sys_password验证登录,登录错误时重新输入登录,重复登录的次数不能超于3次;'
def login():
    ''' 登录 '''
    sys_usrname = '梦幻精灵_cq'
    sys_password = 'DreamElf_cq'
    
    for i in '123':
        print(clear) # Linux式清屏。
        username, password = [input(f"\n{'':>6}{i}:").strip() for i in ('用户名', '密  码')]

        if username == sys_usrname and sys_password == password:
            input(f"\n\n{' 登录成功!':~^35}\n\n{'(任意键开始游戏)':^33}")
            return
        else:
            if username != sys_usrname:
                 input(f"\n{' 用户名错误!':~^34}\n")
                 continue 
            else:
                input(f"\n{' 密码错误!':~^35}\n")
                continue 
    
    print(f"\n{' 三次机会已用完!':~^32}\n\n{'(您已退出程序)':^33}")
    exit() 


# 贰 #
text2 = '\n\n2、充值功能:\n    登录成功后,顺利进入游戏并进行金币充值gold_ money,充值金额范围为1-100,若超过此范围,则提示"充入金额为1-100,请重新充值",重新充值;重复充值次数不超过5次;'
def recharge():
    ''' 充值模块 '''
    for i in range(5):
        print(clear)
        localGold() # 列印当前金币数。
        gold = int(inputNum(f"\n{' 金币充值 ':~^36}\n\n{'':>12}输入:", 1, 100))
        
        if not 1 <= gold <= 100:
            print(f"\n{'(充入金额为1~100,请重新充值)':^29}\n")
            continue 
        
        gold_money[0] += gold
        
        if not input(f"\n{'':>4}继续充值?(y or Y) _").strip() in list('yY') :
                break 

    if i == 5:
        print(f"\n\n\n{' 充值超过5次 ':^35}\n")
    else:
        print(f"\n\n\n{' 充值完成 ':~^36}\n")

    localGold() # 当前金币。
    pause() # 暂停。


# 叁 #
text3 = '\n\n3、游戏功能:\n    进入猜数字赢金币环节,系统将随机产生一个100内的数字maigc,并与玩家猜的数据guess进行比较,若猜错,则继续猜且扣除1个金币,直至猜对或剩余金币为0为止,猜对奖励10个金币。'
def decide(maigc, guess):
    ''' 金币评判 '''

    if maigc == guess:
        gold_money[0] += 10
        print(f"\n{' 您真棒!':~^36}\n\n{'(增加10枚金币!)':^35}")
        localGold() # 当前金币。
        pause() # 暂停。
        exit() 
    else:
        tic = '您猜大了' if guess > maigc else '您猜小了'
        gold_money[0] -= 1
        print(f"\n\n\n{f' {tic}!':~^35}\n\n{'(扣除1枚金币!)':^35}")
        localGold() # 当前金币。
        pause() # 暂停。


def play():
    ''' 游戏 '''

    if not gold_money[0]:
        print(clear)
        localGold()
        print(f"\n{' 请先充值再来游戏 ':~^32}")
        pause()
        return 

    from random import randint # 加载随机整数选择方法。
    maigc = randint(0, 99) # 产生一个100以内的随机整数。
    
    while gold_money[0] > 0:
        print(clear)
        guess = int(inputNum(f"{'':>12}猜数:_", 0, 99))
        print(decide(maigc, guess))
        
    print(f"{clear}\n\n{' Game is Over! ':~^40}\n\n\n\n{'您的金币已耗尽!':^32}\n{'':=^40}\n")
    exit() 


# 肆 #
text4 = '\n\n4、退出功能:提供界面,退出游戏。'
def menu():
    ''' 菜单显示 '''
    strMenu = ['说 明', '充 值', '开 始'] # 菜单项字符串列表,可"无限"拓展。
    print(f"\033[2J\n{' 猜数赢金币 ':=^35}\n\n") # Linux式清屏。
    
    for k,i in enumerate(strMenu):
        print(f"{f'{k+1}.  {i}':^38}\n")
    
    print(f"{'0.  退 出':^38}\n")
    return inputNum(f"\n{'':>6}菜单选择:_", 0, len(strMenu)), len(strMenu) # 调用数字输入函数,完成数字输入。


# 伍 #
text5 = '\n\n5、可以任意添加、拓展游戏,如有拓展可以加分。例如,[界面新颖] [闯关设计][人机交互提示友好]等。'
def game():
    ''' 游戏主程序 '''
    login() # 调用登录模块登录游戏。
    
    while True: # 菜单死循环,选择菜单主动退出。
        flag, n = menu()

        if flag == '1':
            readme() # 游戏说明。
        elif flag == '2':
            recharge() # 金币充值。
        elif flag == '3':
            play() # 开始游戏。
        elif flag == '0':
            print(f"\033[2J\n{' 猜数赢金币 ':=^35}\n\n\n{f' 您已退出游戏。':^33}\n\n{f' 欢迎下次来玩!':^33}\n\n\n{'':=^40}")
            exit()


def readme():
    ''' 游戏规打印 '''
    relue = f"\n\n\n{' 游戏规则 ':.^36}\n\n{'':>4}游戏金币初始值为0,成功登录进入游戏菜单,先去菜单2充值金币,每次充值为1~100金币,一次最多连续充值5次。金币为0,无法开启游戏,金币数量越小,可以猜数的次数相对越少,可以自行决定充值数额。\n{'':>4}一旦开始游戏,将不可返回充值,直到猜中或金币耗尽结束游戏退出程序;猜中奖励10金币,不中扣除1金币。\n{'':>4}金币数量为0,将无法游戏。请自行决定充值金币数额。"
    mySay = f"\n\n\n{' 写在最后 ':.^36}\n\n\n{'':>4}写本程序代码,缘于回答csdn问答社区的一个粉丝提问。觉得这也是一个练手小"项目",决定炼炼代码,打造一个囫囵的程序。对处"算法"进行优化,对代码进行凝炼,经过无数次修磨,终成此"最好"代码块(现阶段的水准能达高度)。"
    tip = f"\n{' 题目描述 ':.^36}\n\n"
    print(f"{clear}\n{''.join([tip, text1, text2, text3, text4, text5, relue, mySay])}\n\n{'':=^40}")
    pause() # 暂停。


if __name__ == '__main__':
    game() # 调用游戏主程序。

回页首


上一篇:  三个写法统计输入整数前导0(从键盘输入一个整数(可能有前导0),编程统计其前导0个数)
下一篇:


我的HOT博:

\n\n
\n\n我的 HOT博:

本次共计收集 246 篇博文笔记信息,总阅读量 40.46w,平均阅读量 1644。已生成 16 篇阅读量不小于 4000 的博文笔记索引链接。数据采集于 2023-10-12 05:41:03 完成,用时 4 分 41.10 秒。


  1. ChatGPT国内镜像站初体验:聊天、Python代码生成等
    ( 59262 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/129035387
    点赞:126   踩 :0  收藏:798  打赏:0  评论:71
    本篇博文笔记于 2023-02-14 23:46:33 首发,最晚于 2023-07-03 05:50:55 修改。
  2. 让QQ群昵称色变的神奇代码
    ( 58086 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/122566500
    点赞:24   踩 :0  收藏:83  打赏:0  评论:17
    本篇博文笔记于 2022-01-18 19:15:08 首发,最晚于 2022-01-20 07:56:47 修改。
  3. pandas 数据类型之 DataFrame
    ( 9173 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/124525814
    点赞:6   踩 :0  收藏:31  打赏:0  评论:0
    本篇博文笔记于 2022-05-01 13:20:17 首发,最晚于 2022-05-08 08:46:13 修改。
  4. 个人信息提取(字符串)
    ( 7215 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/124244618
    点赞:1   踩 :0  收藏:13  打赏:0  评论:0
    本篇博文笔记于 2022-04-18 11:07:12 首发,最晚于 2022-04-20 13:17:54 修改。
  5. Python列表(list)反序(降序)的7种实现方式
    ( 7161 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/128271700
    点赞:5   踩 :0  收藏:22  打赏:0  评论:8
    本篇博文笔记于 2022-12-11 23:54:15 首发,最晚于 2023-03-20 18:13:55 修改。
  6. 罗马数字转换器|罗马数字生成器
    ( 7035 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/122592047
    点赞:0   踩 :0  收藏:1  打赏:0  评论:0
    本篇博文笔记于 2022-01-19 23:26:42 首发,最晚于 2022-01-21 18:37:46 修改。
  7. Python字符串居中显示
    ( 6966 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/122163023
    点赞:1   踩 :0  收藏:7  打赏:0  评论:1
    本篇博文笔记
  8. 斐波那契数列的递归实现和for实现
    ( 5523 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/122355295
    点赞:4   踩 :0  收藏:2  打赏:0  评论:8
    本篇博文笔记
  9. python清屏
    ( 5108 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/120762101
    点赞:0   踩 :0  收藏:8  打赏:0  评论:0
    本篇博文笔记
  10. 练习:字符串统计(坑:f'string'报错)
    ( 5103 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/121723096
    点赞:0   踩 :0  收藏:1  打赏:0  评论:0
    本篇博文笔记
  11. 回车符、换行符和回车换行符
    ( 5093 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/123109488
    点赞:1   踩 :0  收藏:2  打赏:0  评论:0
    本篇博文笔记于 2022-02-24 13:10:02 首发,最晚于 2022-02-25 20:07:40 修改。
  12. 练习:尼姆游戏(聪明版/傻瓜式•人机对战)
    ( 4943 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/121645399
    点赞:14   踩 :0  收藏:42  打赏:0  评论:0
    本篇博文笔记
  13. 密码强度检测器
    ( 4323 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/121739694
    点赞:1   踩 :0  收藏:4  打赏:0  评论:0
    本篇博文笔记于 2021-12-06 09:08:25 首发,最晚于 2022-11-27 09:39:39 修改。
  14. 练习:生成100个随机正整数
    ( 4274 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/122558220
    点赞:1   踩 :0  收藏:6  打赏:0  评论:0
    本篇博文笔记于 2022-01-18 13:31:36 首发,最晚于 2022-01-20 07:58:12 修改。
  15. 我的 Python.color() (Python 色彩打印控制)
    ( 4159 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/123194259
    点赞:2   踩 :0  收藏:8  打赏:0  评论:0
    本篇博文笔记于 2022-02-28 22:46:21 首发,最晚于 2022-03-03 10:30:03 修改。
  16. 罗马数字转换器(用罗马数字构造元素的值取模实现)
    ( 4149 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/122608526
    点赞:0   踩 :0  收藏:0  打赏:0  评论:0
    本篇博文笔记于 2022-01-20 19:38:12 首发,最晚于 2022-01-21 18:32:02 修改。

推荐条件 阅读量突破{补全数据} (更多热博,请点击蓝色文字跳转翻阅) 推荐条件 阅读量突破四千 (更多热博,请点击蓝色文字跳转翻阅)


回页首


精品文章:

来源:老齐教室


Python 入门指南【Python 3.6.3】


好文力荐:


CSDN实用技巧博文:


相关推荐
大模型铲屎官1 小时前
【Python-Day 14】玩转Python字典(上篇):从零开始学习创建、访问与操作
开发语言·人工智能·pytorch·python·深度学习·大模型·字典
yunvwugua__1 小时前
Python训练营打卡 Day27
开发语言·python
Stara05112 小时前
基于多头自注意力机制(MHSA)增强的YOLOv11主干网络—面向高精度目标检测的结构创新与性能优化
人工智能·python·深度学习·神经网络·目标检测·计算机视觉·yolov11
那雨倾城3 小时前
使用 OpenCV 将图像中标记特定颜色区域
人工智能·python·opencv·计算机视觉·视觉检测
LuckyTHP5 小时前
java 使用zxing生成条形码(可自定义文字位置、边框样式)
java·开发语言·python
mahuifa7 小时前
(7)python开发经验
python·qt·pyside6·开发经验
学地理的小胖砸8 小时前
【Python 操作 MySQL 数据库】
数据库·python·mysql
安迪小宝8 小时前
6 任务路由与负载均衡
运维·python·celery
Blossom.1188 小时前
使用Python实现简单的人工智能聊天机器人
开发语言·人工智能·python·低代码·数据挖掘·机器人·云计算
lisw058 小时前
Python高级进阶:Vim与Vi使用指南
python·vim·excel