关于作业执行到猜数字环节,有个用户输入的问题
来源:3-2 项目作业
Kaito_
2019-08-02 21:22:37
import sys
import random
import datetime
def guide_page(guide_word):
"""
设置参数guide_word,记录要输出的标题文字信息
:param guide_word: 接收实参
:return: str
"""
print("{0}{1}{0}".format("*" * 25, guide_word)) # 运用字符串的格式化函数(format),拼接“*”号和标题文字信息
def all_num(n):
"""
设置参数n接收用于进行判定的变量的值
:param n:int/str/float
:return:bool
"""
return n.isdigit() # 运用isdigit( )方法进行判定并返回其判定结果
def num_legal(ls):
"""
设置列表类型的参数用于接收指定的序列
:param ls:接收变量i,j数值生成序列
:return:
"""
if int(ls[0]) == int(ls[1]): # 取出序列中的值并进行比较,若两者相等,则退出程序,并提示玩家重新启动程序;
print("您输入的区间数字相同,请重新启动程序!")
sys.exit()
elif int(ls[0]) > int(ls[1]): # 取出序列中的值并进行比较,若表示数字区间起始位置的值大于数字区间终止位置的值,则退出程序,并提示玩家重新启动程序;
print("您输入的数字区间大小有误,请重新启动程序!")
sys.exit()
else:
return 1
def set_final_num(num1, num2):
"""
根据参数值,产生一个位于参数值区间以内的随机数
:param num1:
:param num2:
:return:
"""
num_ls = [num1, num2] # 设置两个参数用于接收用户所输入区间的起始值和终止值,并将其保存至列表中
final_ls = list(filter(all_num, num_ls)) # 利用内置函数filter()及思路分析2中的all_num(n)过滤以确保输入值全部为数字
if len(final_ls) == 2: # 依据结果过滤后的返回值进行判断
result = num_legal(final_ls)
if result == 1:
print("所产生的随机数字区间为:{} - {}".format(num1, num2))
return random.randint(int(num1), int(num2))
else:
print("您所输入的为非数字字符,请重新启动程序!")
sys.exit()
def check_num_legal(num):
"""
判定所输入的数值是否在指定的区间
:param num:
:return:
"""
# guess_num = all_num(num)
if int(num) < int(i) or int(num) > int(j):
print("对不起!您输入的数字未在指定区间")
sys.exit()
def write_record(times, value):
"""
将玩家每一次猜测数字和本次猜测次数两项信息写入日志文件
:param times: 猜测的次数
:param value: 猜测的数字
:return:
"""
file_name = "record.txt"
record = "{}:第{}次您猜测的数字为:{}\n".format(datetime.datetime.now(), times, value)
with open(file_name, "a", encoding="utf-8") as r:
r.write(record)
def main(rand1):
"""
依据所产生的随机数字(rand1),提示玩家输入猜测数字并进行比对直到猜测到正确数字
:param rand1:
:return:
"""
temp = 0
while True:
guess_num = int(input("请继续输入您猜测的数字:")) # 提示用户输入所猜测数字,并转换为int类型
if check_num_legal(guess_num) != 0: # if判断核查数值函数
if rand1 == guess_num:
temp += 1 # 次数+1
write_record(temp, guess_num) # 调用日志写入函数
print("*" * 20 + "\n" + "恭喜您!只用了{}次就赢得了游戏".format(temp))
return
elif rand1 > guess_num:
temp += 1
write_record(temp, guess_num)
print("*" * 20 + "\n" + "Lower than the answer\n" + "*" * 20)
elif rand1 < guess_num:
temp += 1
write_record(temp, guess_num)
print("*" * 20 + "\n" + "Higher than the answer\n" + "*" * 20)
else:
exit()
if __name__ == "__main__":
guide_page(guide_word="欢迎进入数字猜猜猜小游戏")
i = input("数字区间起始值:")
j = input("数字区间终止值:")
fin_num = set_final_num(i, j)
main(fin_num)按照思路基本实现了要求,现在有个问题,当执行到猜数字环节,程序运行到
guess_num = int(input("请继续输入您猜测的数字:"))
的时候,如果这里输入一个非数字,就会报错,尝试用前面定义的all_num判断后再转换数据类型依旧会报错。
想问下怎么改一下可以在这里进行一次数据类型判断,然后不报错执行程序。
谢谢老师!
1回答
while True:
guess_num = int(input("请继续输入您猜测的数字:")) # 提示用户输入所猜测数字,并转换为int类型
这一步有问题,你直接转换成int了,如果不能转会报错,guess_num = input("请继续输入您猜测的数字:"),可以把外层int去掉,然后对guess_num进行是否能转换成数字的判断,即all_num(guess_num)
相似问题
回答 1
回答 1