猜数字赢金币
充值金币后开始游戏,猜中奖励10金币退出,不中扣除1金币继续。
(笔记模板由python脚本于2023年12月03日 21:52:23创建,本篇笔记适合熟悉程序函数式编程,熟练掌握基本数据类型的coder翻阅)
-
Python 官网:https://www.python.org/
-
Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么简单……
地址:https://lqpybook.readthedocs.io/
自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。
—— 华罗庚
- My CSDN主页、My HOT博、My Python 学习个人备忘录
- 好文力荐、 老齐教室
本文质量分:
本文地址: 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博:
\n\n
本次共计收集 246 篇博文笔记信息,总阅读量 40.46w,平均阅读量 1644。已生成 16 篇阅读量不小于 4000 的博文笔记索引链接。数据采集于 2023-10-12 05:41:03 完成,用时 4 分 41.10 秒。
- 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 修改。 - 让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 修改。 - 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 修改。 - 个人信息提取(字符串)
( 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 修改。 - 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 修改。 - 罗马数字转换器|罗马数字生成器
( 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 修改。 - Python字符串居中显示
( 6966 阅读)
博文地址:https://blog.csdn.net/m0_57158496/article/details/122163023
点赞:1 踩 :0 收藏:7 打赏:0 评论:1
本篇博文笔记 - 斐波那契数列的递归实现和for实现
( 5523 阅读)
博文地址:https://blog.csdn.net/m0_57158496/article/details/122355295
点赞:4 踩 :0 收藏:2 打赏:0 评论:8
本篇博文笔记 - python清屏
( 5108 阅读)
博文地址:https://blog.csdn.net/m0_57158496/article/details/120762101
点赞:0 踩 :0 收藏:8 打赏:0 评论:0
本篇博文笔记 - 练习:字符串统计(坑:f‘string‘报错)
( 5103 阅读)
博文地址:https://blog.csdn.net/m0_57158496/article/details/121723096
点赞:0 踩 :0 收藏:1 打赏:0 评论:0
本篇博文笔记 - 回车符、换行符和回车换行符
( 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 修改。 - 练习:尼姆游戏(聪明版/傻瓜式•人机对战)
( 4943 阅读)
博文地址:https://blog.csdn.net/m0_57158496/article/details/121645399
点赞:14 踩 :0 收藏:42 打赏:0 评论:0
本篇博文笔记 - 密码强度检测器
( 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 修改。 - 练习:生成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 修改。 - 我的 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 修改。 - 罗马数字转换器(用罗马数字构造元素的值取模实现)
( 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 完全自学教程》 Free连载(已完稿并集结成书,还有PDF版本百度网盘永久分享,点击跳转免费🆓下载。)
- OPP三大特性:封装中的property
- 通过内置对象理解python'
- 正则表达式
- python中“*”的作用
- Python 完全自学手册
- 海象运算符
- Python中的 `!=`与`is not`不同
- 学习编程的正确方法
来源:老齐教室
◆ Python 入门指南【Python 3.6.3】
好文力荐:
- 全栈领域优质创作者——[寒佬](还是国内某高校学生)博文“非技术文—关于英语和如何正确的提问”,“英语”和“会提问”是编程学习的两大利器。
- 【8大编程语言的适用领域】先别着急选语言学编程,先看它们能干嘛
- 靠谱程序员的好习惯
- 大佬帅地的优质好文“函数功能、结束条件、函数等价式”三大要素让您认清递归
CSDN实用技巧博文:
- 8个好用到爆的Python实用技巧
- python忽略警告
- Python代码编写规范
- Python的docstring规范(说明文档的规范写法)