猜数字赢金币

充值金币后开始游戏,猜中奖励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代码


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代码


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代码


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代码


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代码


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代码


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代码


# 全局变量 #
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、完整源码

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

#!/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博:

  本次共计收集 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实用技巧博文:


  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦幻精灵_cq

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值