充值金币后开始游戏,猜中奖励10金币退出,不中扣除1金币继续。
(笔记模板由python脚本于2023年12月03日 21:52:23创建,本篇笔记适合熟悉程序函数式编程,熟练掌握基本数据类型的coder翻阅)
Python 官网:https://www.python.org/
Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么简单……
地址:https://lqpybook.readthedocs.io/
自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。
—— 华罗庚
本文质量分:
CSDN质量分查询入口:http://www.csdn.net/qc
【题目来源于 CSDN 问答社区提问“猜数字赢金币”】
循环登录,直到用户名、密码正确,才可以正常进入游戏菜单;否则超过最大三次错误登录,将强制退出程序。
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()
菜单项字符串循环打印,一行语句打印菜单列表。
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) # 调用数字输入函数,完成数字输入。
打印题目描述及游戏说明。我这个“项目”,缘起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() # 暂停。
金币数量是全局变量,我将其放入一个列表,实现了各个模块都可以读写其值。
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() # 暂停。
猜数字赢金币,猜中奖励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()
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()
我把用得最多当前金币数显示localGold、提示信息暂停pause和数字输入inputNum的操作,封装成了函数,方便代码复用。Linux系统ASCII控制字符清屏打印游戏名称行,设置成字符串变量。
代码运行效果截屏图片
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")
(源码较长,点此跳过源码)
#!/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() # 调用游戏主程序。
我的HOT博:
\n\n
本次共计收集 246 篇博文笔记信息,总阅读量 40.46w,平均阅读量 1644。已生成 16 篇阅读量不小于 4000 的博文笔记索引链接。数据采集于 2023-10-12 05:41:03 完成,用时 4 分 41.10 秒。
精品文章:
来源:老齐教室
◆ Python 入门指南【Python 3.6.3】
好文力荐:
CSDN实用技巧博文: