重写“猜正整数”练习代码
☆程序调试环境☆
python 3.6.6 安卓版(手机)
“知识点”:
- def def_name(): 自定义函数
- 格式化字符串在print()和input中的使用
技巧: Do more
学过自定义函数,发现用多个函数代码块,完成主程序的任务,也是一个好玩儿的事情。所以,全部重用自定义函数def()写了前面的猜正整数练习代码。
练习多了,不但可以😄熟练方法的使用,还可以发现一些有意思的用法。比如字符串在input()和print()中的格式化用法。练得多了,就可以胜得随心所欲,可以这么写也可以那样码。😉😉
def input_my(s):
while True:
print("\n"*3)
number = input("%20s"%s)
if number.isdigit()==True:
return int(number)
else:
s_no = "您的输入“%s”,"
print("\n"*3+" "*14+s_no%number)
s_no = "不是正整数!"
print("\n%20s"%s_no)
s_no = "请您重新输入。"
print("\n\n%21s"%s_no)
s = "\n\n\n 请从({0}~{1})中猜一个正整数:"
if start==stop-1:
s = "\n\n\n 您要猜的数字是{0}或者{1}!"
elif start==stop:
s = "\n\n\n 您要猜的数字是{0}!"
guess_number = input_my(s.format(start,stop))
My完整python代码
#! /usr/bin/env python
# coding: utf-8
import random #加载随机数模块
def print_s(s,n):
"""
函数说明
提示文字打印
s为要打印字条串,
n为每行前面的空格数。
"""
print("\n"*2)
for i in s:
if i!="\n": print(i,end="") #用end=""控制打印不换行
else: print(i*2+" "*n,end="")
def wait():
"""
函数说明
打印暂停提示并暂停程序运行,
等待用户键入任意键继续。
"""
print("\n"*2)
s = "按任意键继续……"
input("%20s"%s) #用点位符格式打印字符串
def input_my(s):
"""
函数说明
接收用户输入。
s为输入提示字符串
"""
while True:
print("\n"*3)
number = input("%20s"%s)
if number.isdigit()==True:
return int(number)
else: #输入的字符串不是整数,打印提示并循环输入
s_no = "您的输入“%s”,"
print("\n"*3+" "*14+s_no%number)
s_no = "不是正整数!"
print("\n%20s"%s_no)
s_no = "请您重新输入。"
print("\n\n%21s"%s_no)
def print_tip():
"""
函数说明,打印不在输入区间的提示
"""
s = """
您的输入不在给定区间,
请输入给定区间的正整数。
"""
print_s(s,6)
#【main】
#游戏说明
s = """
猜数字:
你从0~1000的正整数中指定区间,
系统随机生出一个数,由您来猜。
起始分数150,每猜错一次扣10分。
你能得100分么?
"""
#调用函数打印游戏说明
print_s(s,4)
#调用暂停函数
wait()
#调用函数接收用户输入游戏区间,不在限定范围,重新循环输入
while True:
start = input_my("请输入区间下限(0~999):")
if start in range(0,1000): break
print_tip() #输入不在区间,调用函数打印提示
while True:
stop = input_my("请输入区间上限(1~1000):")
if stop in range(1,1001): break
print_tip() #调用函数打印输入不在区间提示
#判断上下限是否相等或者颠倒,打印提示并合理化处理
if start>stop:
start,stop = stop,start
s = """
您选择的区间下限,
大于区间上限,
已为您调换。
"""
print_s(s,10) #调用字符串打印函数
wait() #调用暂停函数
elif start==stop:
stop = 1000
s = """
您选择的区间上下限,
是同一个正整数。
已为您将上限设为1000。
"""
print_s(s,8) #打印字符串打印函数
wait() #调用暂停函数
#调用随机数函数生成给定区间随机正整数
random_number = random.randint(start,stop)
i = 1
score = 150
while True:
s = "\n\n\n 请从({0}~{1})中猜一个正整数:"
#判查用户选定区间,如是特定区间,给出特定输入提示
if start==stop-1:
s = "\n\n\n 您要猜的数字是{0}或者{1}!"
elif start==stop:
s = "\n\n\n 您要猜的数字是{0}!"
guess_number = input_my(s.format(start,stop))
if guess_number not in range(start,stop+1):
print_tip()
continue
if guess_number==random_number: break
elif guess_number>random_number:
#猜大了,猜数区间上限重新设置
stop = guess_number-1
i += 1
score -= 10
s = """
您猜大了!
"""
print_s(s,8)
elif guess_number<random_number:
#猜小了,猜数区间下限重新设置
start = guess_number+1
i += 1
score -= 10
s = """
您猜小了!
"""
print_s(s,8)
#打印游戏结束语
if i==1:
s = """
您的得分:%4d
您真厉害👍!
一次就猜中了。
"""
print_s(s%score,8)
elif i==2 or i==3:
s = """
您的得分:{0}
您真能干😎! {1}次就猜中了。
"""
print_s(s.format(score,i),4)
elif i>3 and i<7:
s = """
您的得分:{0}
您要加油哦💪。 {1} 次才猜中。
"""
print_s(s.format(score,i),4)
elif i>7:
s = """
您的得分:{0}
您真不行吔🙄。用了{1}次才猜中了。
"""
print_s(s.format(score,i),4)
#【The end of main】