请问需要怎么改呢。谢谢

来源: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)http://img.mukewang.com/climg/5e8326960916c83c07550451.jpg

写回答

1回答

好帮手慕觉浅

2020-04-01

同学你好:

  1. guide_page()函数功能描述: 提示玩家进入游戏,并输出如效果图标题的所示信息, 要求:

         (1)设置参数guide_word,记录要输出的标题文字信息

         (2)运用字符串的格式化函数(format),拼接“*”号和标题文字信息

         (3)符合程序运行效果图中标题的样式进行输出(注:“*”号的数量不作统一限制)

    因此我们只需要写成如下即可:

http://img.mukewang.com/climg/5e8405a80924e74308500227.jpg

2.函数作用域问题

http://img.mukewang.com/climg/5e840447098800cb07460510.jpghttp://img.mukewang.com/climg/5e84046f09d2c55507430526.jpg

这几个函数是写在guide_page()内部了,作用域只在函数内部,而根据题意我们应该写在函数外面,才能在这个函数外调用这些函数。而我看到你在函数外也写了这些函数,所以直接删掉这些函数即可。

3.num_equal(ls)应该是题目中的num_legal(ls)函数吧,该函数要求:

 http://img.mukewang.com/climg/5e84072c0978cf0207330271.jpg

红框部分的要求是不是没有完成呢?我们应该再加一个elif判断一下,如下图:

http://img.mukewang.com/climg/5e8407a109d2b00006410380.jpg

4.set_final_num()中的要求:

http://img.mukewang.com/climg/5e840877091d0de507200162.jpg

红框中的判断没有完成,且如果filter()后的长度不为2即为有元素不是数字被过滤掉了,因此要判断一下长度是否等于2,改成如下:

http://img.mukewang.com/climg/5e840e6a0952a9e407160538.jpg

如果解决了你的疑惑,请采纳,祝学习愉快~ 


1

0 学习 · 8160 问题

查看课程