鱼C论坛

 找回密码
 立即注册
查看: 1753|回复: 7

[已解决]33课课后作业动动手第0题的一个疑问

[复制链接]
发表于 2017-4-22 09:31:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
第一次发帖留念~

本人是新手刚开始零基础学python没多久,做到课后作业33课的课后作业动动手第0题时有个问题想请教下大家。

这问题就是使用异常处理方法修改常数字小游戏。尝试做这题时,我把让用户输入的代码做成一个函数,使用递归尝试让用户不断输入直到输入是数字为止。但是发现这样函数的返回值最终是None(比如我一开始输入字符'abc',第二次输入数字2)。请问为什么呢?是因为只要一次输入非数字返回就是None了吗?

请大家多多请教,谢谢!


  1. #!/usr/bin/python3.4
  2. #自己解答课后作业33讲动手作第0题时,把用户输入打包成一个函数,在里面添加输入非数字的错误检测,并利用递归反复要求直到用户输入数字为止。但是这样返回的函数值居然是None!!!炒鸡不解~

  3. import random

  4. def guessing():
  5.   '''function for getting what user guess'''
  6.   try:
  7.     temp=input()
  8.     guess=int(temp)
  9.     print (guess)
  10.     return guess
  11.   except ValueError as reason:
  12.     print ('You MUST enter number. This is an error of: %s' % str(reason))
  13.     print ('Please enter again:')
  14.     guessing()


  15. secret = random.randint(1,10)
  16. print('Please guess what number in my mind (from 1 to 10):')
  17. guess_num=guessing()
  18. print (guess_num)

  19. while guess_num != secret:
  20.   if guess_num > secret:
  21.     print ('It should smaller.')
  22.     print ('Please enter again:')
  23.     guess_num=guessing()
  24.   elif guess_num < secret:
  25.     print ('It should bigger.')
  26.     print ('Please enter again:')
  27.     guess_num=guessing()
  28. else:
  29.   print ('You are right!!!')
  30.   print ('leaving..')
复制代码
最佳答案
2017-4-23 11:15:46
本帖最后由 ooxx7788 于 2017-4-23 11:19 编辑
huiwenwu 发表于 2017-4-23 10:45
是啊,就是不断的让输入,不会运行下一步的比较。
因为就是返回函数,这函数就是让输入数字阿


但是在try条件下面,是可以返回值的,就不会无限循环啊。

对了,我说的是在except下面return guessing()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-4-22 09:52:02 | 显示全部楼层
你试试 return guessing()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-22 11:06:26 | 显示全部楼层
ooxx7788 发表于 2017-4-22 09:52
你试试 return guessing()

返回函数本身不就是无限循环么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-22 11:14:16 | 显示全部楼层
huiwenwu 发表于 2017-4-22 11:06
返回函数本身不就是无限循环么

你这个返回以后是要再输入,然后再重新进行判断的,进入try就结束了,为什么会无限循环?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-23 10:45:21 | 显示全部楼层
ooxx7788 发表于 2017-4-22 11:14
你这个返回以后是要再输入,然后再重新进行判断的,进入try就结束了,为什么会无限循环?

是啊,就是不断的让输入,不会运行下一步的比较。
因为就是返回函数,这函数就是让输入数字阿
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-23 11:15:46 | 显示全部楼层    本楼为最佳答案   
本帖最后由 ooxx7788 于 2017-4-23 11:19 编辑
huiwenwu 发表于 2017-4-23 10:45
是啊,就是不断的让输入,不会运行下一步的比较。
因为就是返回函数,这函数就是让输入数字阿


但是在try条件下面,是可以返回值的,就不会无限循环啊。

对了,我说的是在except下面return guessing()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-23 11:49:19 | 显示全部楼层
ooxx7788 发表于 2017-4-23 11:15
但是在try条件下面,是可以返回值的,就不会无限循环啊。

对了,我说的是在except下面return guessi ...

嗯,我在except里是使用了返回函数本身,但我在try里也使用了返回函数本身啊。因为我在调用函数时把函数赋值给一个变量,用来判断该变量与随机数是否相等了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-23 12:29:39 | 显示全部楼层
huiwenwu 发表于 2017-4-23 11:49
嗯,我在except里是使用了返回函数本身,但我在try里也使用了返回函数本身啊。因为我在调用函数时把函数 ...
  1. def guessing():
  2.   '''function for getting what user guess'''
  3.   try:
  4.     temp=input()
  5.     guess=int(temp)
  6.     print (guess)
  7.     return guess  # 返回的是值
  8.   except ValueError as reason:
  9.     print ('You MUST enter number. This is an error of: %s' % str(reason))
  10.     print ('Please enter again:')
  11.     return guessing()  # 修改后
复制代码

try 里面你返回的是值,except返回的是函数。不懂你说的是哪里!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-19 20:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表