鱼C论坛

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

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

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

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

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

x
第一次发帖留念~

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

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

请大家多多请教,谢谢!

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

import random

def guessing():
  '''function for getting what user guess'''
  try:
    temp=input()
    guess=int(temp)
    print (guess)
    return guess
  except ValueError as reason:
    print ('You MUST enter number. This is an error of: %s' % str(reason))
    print ('Please enter again:')
    guessing()


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

while guess_num != secret:
  if guess_num > secret:
    print ('It should smaller.')
    print ('Please enter again:')
    guess_num=guessing()
  elif guess_num < secret:
    print ('It should bigger.')
    print ('Please enter again:')
    guess_num=guessing()
else:
  print ('You are right!!!')
  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里也使用了返回函数本身啊。因为我在调用函数时把函数 ...
def guessing():
  '''function for getting what user guess'''
  try:
    temp=input()
    guess=int(temp)
    print (guess)
    return guess  # 返回的是值
  except ValueError as reason:
    print ('You MUST enter number. This is an error of: %s' % str(reason))
    print ('Please enter again:')
    return guessing()  # 修改后
try 里面你返回的是值,except返回的是函数。不懂你说的是哪里!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-11 01:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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