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 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 sunrise085 发表于 2020-9-11 20:06
你的函数 int_input()写的有问题,当输入的不是整数的时候,会从try跳到except中,然后函数就没有返回值了 ...
谢谢大佬,这样确实可以。
但是我还是不太明白,为什么第一次调用函数,先输入浮点数 再输入整数就可以,而第二次这样就会报错 一梦寒冬 发表于 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]