请问需要怎么改呢。谢谢
来源:3-2 项目作业
I_am_a_pasta
2020-03-31 19:18:49
import sys
import random
from datetime import datetime
file_name = 'record.txt'
ls = []
def guide_page(guide_word):
if guide_word ==0:
print('您输入的数字区间相同,请重新启动游戏')
elif guide_word ==1:
print('*'*20)
elif guide_word == 2:
print('{}{}{}'.format('*'*10,'欢迎使用猜猜猜小游戏','*'*20))
def all_num(n):
"""
判断指定的值是否为数字
:param n: unknown
:return: bool
"""
return n.isdigit()
def num_equal(ls):
"""
判定指定序列中元素数值是否相等
:param ls: 序列
:return: 相等 退出模块 不相等 1
"""
if ls[0] == ls[1]:
print('您输入的区间数字相同!!请重新启动程序。')
sys.exit()
else:
return 1
def set_final_num(num1, num2):
if num_equal(num1, num2) == 1:
l = construct_range_value(num1, num2)
lst = filter(lambda m: m == int(m),l)
return list(lst)
if num_equal(num1, num2) == 0:
return '您输入的区间有误,请重新启动程序'
#调用自定义函数判断用户输入值是否正确
def num_equal(s1,s2):
if s1 != s2:
return 1
else:
return 0
def all_num(n):
"""
判断指定的值是否为数字
:param n: unknown
:return: bool
"""
return n.isdigit()
def num_equal(ls):
"""
判定指定序列中元素数值是否相等
:param ls: 序列
:return: 相等 退出模块 不相等 1
"""
if ls[0] == ls[1]:
print('您输入的区间数字相同!!请重新启动程序。')
sys.exit()
else:
return 1
def set_final_num(num1, num2):
"""
根据用户输入的区间,产生一个在区间的随机数
:param num1: int
:param num2: int
:return: random_number
"""
num_list = list()
num_list.append(num1)
num_list.append(num2)
filter_list = filter(all_num, num_list)
if num_equal(list(filter_list)) == 1:
print('所产生的随机数字区间为:[{0}, {1}]'.format(num1, num2))
randl = random.randint(int(i), int(j) + 1)
return randl
print(randl)
def construct_range_value():
"""
将用户输入的区间起始值和终止值由str类型转换为int类型
:return: list
"""
num1 = int(i)
num2 = int(j)
num_list = list()
num_list.append(num1)
num_list.append(num2)
return num_list
def check_num_legal(num):
"""
判定用户输入的数值是否在其指定的区间
:param num: int
:return: bool
"""
num_list = construct_range_value()
if num > num_list[1] or num < num_list[0]:
return 1
def write_record(times, value):
"""
将玩家每一次猜测数字和本次猜测次数两项信息写入日志文件
:param times: int
:param value: int
:return: void
"""
with open('record.txt', 'a', encoding='utf-8') as f:
f.write('时间:{0}: 第{1}次您猜测的数字为:{2}\n'.format(datetime.now(), times, value))
def main(rand1):
"""
依据所产生的随机数字(rand1),提示玩家输入猜测数字并进行比对直到猜测到正确数字
:param rand1: int
:return: void
"""
temp = rand1
guess_times = 0
while True:
guess_num = int(input('请输入您猜测的数字:'))
if check_num_legal(guess_num) == 1:
print('对不起您输入的数字未在指定区间!!!')
continue
guess_times += 1
write_record(guess_times, guess_num)
if temp == guess_num:
print('恭喜您!只用了{0}次就赢得了游戏'.format(guess_times))
break
elif temp > guess_num:
print('Lower than the answer')
else:
print('Higher than the answer')
print('*****************')
if __name__ == '__main__':
while True:
guide_page('欢迎进入数字猜猜猜小游戏')
i = input('数字起始值:')
j = input('数字终止值:')
randl = set_final_num(i,j)
main(randl)
1回答
同学你好:
guide_page()函数功能描述: 提示玩家进入游戏,并输出如效果图标题的所示信息, 要求:
(1)设置参数guide_word,记录要输出的标题文字信息
(2)运用字符串的格式化函数(format),拼接“*”号和标题文字信息
(3)符合程序运行效果图中标题的样式进行输出(注:“*”号的数量不作统一限制)
因此我们只需要写成如下即可:
2.函数作用域问题
这几个函数是写在guide_page()内部了,作用域只在函数内部,而根据题意我们应该写在函数外面,才能在这个函数外调用这些函数。而我看到你在函数外也写了这些函数,所以直接删掉这些函数即可。
3.num_equal(ls)应该是题目中的num_legal(ls)函数吧,该函数要求:
红框部分的要求是不是没有完成呢?我们应该再加一个elif判断一下,如下图:
4.set_final_num()中的要求:
红框中的判断没有完成,且如果filter()后的长度不为2即为有元素不是数字被过滤掉了,因此要判断一下长度是否等于2,改成如下:
如果解决了你的疑惑,请采纳,祝学习愉快~
相似问题