一梦寒冬 发表于 2020-9-11 19:42:21

Python 求助:关于函数返回值为None

题目是小甲鱼第33讲课后作业 动动手第二题: 尝试一个新的函数 int_input(),当用户输入整数的时候正常返回,否则提示出错并要求重新输入。我将它用在了“小游戏”里,但出现了一些问题。具体情况是这样的,第一次调用函数没有问题。但是第二次调用函数,输入一个浮点数后,重新输入一个整数就会报错。(调了很长时间也不知道是哪的问题,希望大佬们能帮一下)
代码如下:
import random

def int_input(value=):
    try:
      print("value的值:",value)
      print("type_value:",type(value))
      return int(value)
   
    except ValueError:
      print("出错,您输入的不是整数!")
      print("===============================")
      a = input("请重新输入一个整数:")
      int_input(a)

secret = random.randint(1, 10)
print("-----小游戏-----")
temp = input("请输入一个1-10的数:")   
guess = int_input(temp)
   
while guess != secret:
      
    temp = input("哎呀!猜错了,再来:")
    guess = int_input(temp)
    print("guess的值:",guess)
    print("type_guess:",type(guess))
      
    if guess == secret:
      print("欧呦,居然被你猜对了!")
    else:
      if guess < secret:
            print("嘿!小了,小了,再重猜一个。")
      else:
            print("不行不行!太大了,再重猜一个。")
               
print("好了好了,不玩了!")
print("game over!")


错误信息:
-----小游戏-----
请输入一个1-10的数:5.1
value的值: 5.1
type_value: <class 'str'>
出错,您输入的不是整数!
===============================
请重新输入一个整数:5
value的值: 5
type_value: <class 'str'>
哎呀!猜错了,再来:5.1
value的值: 5.1
type_value: <class 'str'>
出错,您输入的不是整数!
===============================
请重新输入一个整数:5
value的值: 5
type_value: <class 'str'>
guess的值: None
type_guess: <class 'NoneType'>
Traceback (most recent call last):
File "D:\python练习\002游戏改进版.py", line 31, in <module>
    if guess < secret:
TypeError: '<' not supported between instances of 'NoneType' and 'int'

sunrise085 发表于 2020-9-11 19:42:22

本帖最后由 sunrise085 于 2020-9-11 20:08 编辑

你的函数 int_input()写的有问题,当输入的不是整数的时候,会从try跳到except中,然后函数就没有返回值了。那么返回中就是None了。
帮你修改了一下这个函数
def int_input(value):
    while True: # 输入不对就一直在这里循环,而不是去递归调用
      try:
            print("value的值:",value)
            print("type_value:",type(value))
            return int(value)
      
      except ValueError:
            print("出错,您输入的不是整数!")
            print("===============================")
            value = input("请重新输入一个整数:") # 输入不对的话在这里重新输入,不是赋值给a,是赋值给value

一梦寒冬 发表于 2020-9-11 20:37:37

sunrise085 发表于 2020-9-11 20:06
你的函数 int_input()写的有问题,当输入的不是整数的时候,会从try跳到except中,然后函数就没有返回值了 ...

谢谢大佬,这样确实可以。
但是我还是不太明白,为什么第一次调用函数,先输入浮点数 再输入整数就可以,而第二次这样就会报错

sunrise085 发表于 2020-9-11 20:49:52

一梦寒冬 发表于 2020-9-11 20:37
谢谢大佬,这样确实可以。
但是我还是不太明白,为什么第一次调用函数,先输入浮点数 再输入整数就可以 ...

2楼已经说了啊
你的那种写法,进入except中之后,就没有返回值了。你的写法是递归盗用,但是递归也是需要返回值的啊。没有返回值,那返回值就是None
若真想递归的话需要这样写,这样写,在try和except中都有返回值不会出现输入错误返回None的情况
def int_input(value):
    try:
      print("value的值:",value)
      print("type_value:",type(value))
      return int(value)
   
    except ValueError:
      print("出错,您输入的不是整数!")
      print("===============================")
      a = input("请重新输入一个整数:")
      return int_input(a)
页: [1]
查看完整版本: Python 求助:关于函数返回值为None