鱼C论坛

 找回密码
 立即注册
查看: 1772|回复: 3

[已解决]Python 求助:关于函数返回值为None

[复制链接]
发表于 2020-9-11 19:42:21 | 显示全部楼层 |阅读模式
5鱼币
题目是小甲鱼第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'


最佳答案
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

最佳答案

查看完整内容

你的函数 int_input()写的有问题,当输入的不是整数的时候,会从try跳到except中,然后函数就没有返回值了。那么返回中就是None了。 帮你修改了一下这个函数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

谢谢大佬,这样确实可以。
但是我还是不太明白,为什么第一次调用函数,先输入浮点数 再输入整数就可以,而第二次这样就会报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-18 15:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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