求问一个问题,求老师帮忙看一下这个代码出了什么问题!

来源:3-2 项目作业

kkkkke

2019-04-07 23:29:13

import random
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 construct_range_value(n1,n2):
   n1 = int(n1)
   n2 = int(n2)
   return [n1, n2]

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):
   if n.isdigit():
       return True
   else:
       return False

def check_num_legal(num,num1,num2,rl):
   i = 1
   while True:
       if num in range(num1,num2+1):
           if num == rl:
               print('恭喜您!只用了{}次就赢得了游戏'.format(i))
               break
           elif num < rl:
               i +=1
               print('Lower than the answer')
           elif num > rl:
               i +=1
               print('Higher than the answer')
           num = int(input('请继续输入您猜测的数字:'))
           guide_page(1)
       else:
           print('对不起!您输入的数字未在指定区间内!')
           num = int(input('请继续输入您猜测的数字:'))

def rand(p1,p2):
   ran = random.randint(p1,p2)
   return ran

guide_page(2)
m1 = int(input('请输入起始值:'))
m2 = int(input('请输入结束值:'))
if len(set_final_num(m1,m2)) == 2:
   print(set_final_num(m1,m2))
   num = input('请输入您猜测的数字:')
   if all_num(num) == False:
       num = int(num)
   cl = rand(m1,m2)
   check_num_legal(num,m1,m2,cl)

else:
   guide_page(0)


#老师,我还不是很懂封装,对于那个main函数更是没弄懂,当然,这些都先不提问,我想问下,我这些代码执行下来:

**********欢迎使用猜猜猜小游戏********************

请输入起始值:20

请输入结束值:80

[20, 80]

请输入您猜测的数字:21

对不起!您输入的数字未在指定区间内!

请继续输入您猜测的数字:21

Lower than the answer

请继续输入您猜测的数字:

#如上,第一次输入猜测数字总会显示不在区间内。



n1 = int(input('请输入起始值:'))
n2 = int(input('请输入结束值:'))
if n1<n2:
   i = 1
   ls = random.randint(n1, n2)
   print('所产生的随机数区间:{}'.format([str(n1),str(n2)]))
   num = int(input('请输入您猜测的数字:'))
   while True:
       if num in range(n1,n2+1):
           if num == ls:
               print('恭喜您!只用了{}次就赢得了游戏'.format(i))
               break
           elif num < ls:
               i +=1
               print('Lower than the answer')
           elif num > ls:
               i +=1
               print('Higher than the answer')
           num = int(input('请继续输入您猜测的数字:'))
       else:
           print('对不起!您输入的数字未在指定区间内!')
           num = int(input('请继续输入您猜测的数字:'))
elif n1 == n2:
   print('您输入的数据区间数相同,请重启程序!')
elif n1 > n2:
   print('您输入的数据区间数错误,请重启程序!')

#然后这个程序都是正确的,是哪里出错了吗?求老师指导,还有怎么封装,大致的思想是怎么样的,也求老师给个参考,课堂中讲的都很片面,云里雾里的,作业布置的描述也不是很能懂,感觉还不如这种直接写简单

写回答

1回答

慕猿梦

2019-04-08

同学,你好,

(1)当输入猜测的数字时结果为字符串4,进行if all_num(num) == False判断,进入all_num函数里,这里的n传入的是字符串4,n.isdigit():如果字符串只包含数字则返回 True ,该函数返回True,没有执行if all_num(num) == False中的语句,进入check_num_legal(num,m1,m2,cl),这里的num还是字符串4,不在num1和num2+1中,所以执行了else中语句,输出了——对不起!您输入的数字未在指定区间内!

http://img1.sycdn.imooc.com/climg/5caaf61400012b7905540505.jpg

解决方案:将if all_num(num) == False改为:

http://img1.sycdn.imooc.com/climg/5caaf62400011d1804270158.jpg

(2)封装——将重复代码封装成函数,进行使用,提高效率,减少重复代码,实现代码复用

1、原代码编写

http://img1.sycdn.imooc.com/climg/5caaf6340001c42304400382.jpg

2、封装后的代码:

http://img1.sycdn.imooc.com/climg/5caaf6430001bf2104700417.jpg

(3)项目作业的设计,巩固知识的同时,更是为了培养用户的编程思维,在拿到项目要求时,如何下手,怎样一步一步的完成,在复杂的程序开发中,项目要求比较繁琐,有的地方是需要互相调用的,建议同学跟着项目的思路分析一步一步的完成该项目,遇到不理解不懂的可以在问答区提问,会有专业的老师帮你解决问题。。。。。。。。。

如果我的回答解决了你的疑惑,欢迎采纳!!^_^ 祝学习愉快~~~~~


1

0 学习 · 8160 问题

查看课程