Python 该函数接受两个参数:Prompt:str和返回类型:int、float、str

Python 该函数接受两个参数:Prompt:str和返回类型:int、float、str,python,prompt,Python,Prompt,大家好,我需要一些关于这个问题的帮助 编写一个名为safe_input(prompt,type)的函数 它的工作原理与Python输入函数类似, 但它只接受指定类型的输入 该函数有两个参数: 提示:str 类型:int、float、str 该函数将一直提示输入,直到指定类型的输入正确为止 进入。该函数返回输入。如果输入被指定为数字(float或int),则返回的值将是正确的类型;也就是说,该函数将执行转换 提示的默认值是空字符串。 该类型的默认值为字符串 以下是我所拥有的: 有人知道我做错了什么

大家好,我需要一些关于这个问题的帮助

编写一个名为safe_input(prompt,type)的函数 它的工作原理与Python输入函数类似, 但它只接受指定类型的输入

该函数有两个参数:

提示:str

类型:int、float、str

该函数将一直提示输入,直到指定类型的输入正确为止 进入。该函数返回输入。如果输入被指定为数字(float或int),则返回的值将是正确的类型;也就是说,该函数将执行转换

提示的默认值是空字符串。 该类型的默认值为字符串

以下是我所拥有的: 有人知道我做错了什么吗?我和我的朋友为此工作了几个小时

更新:我收到如下错误:
文件“C:\Users\Thomas\Desktop\ei8069\u Lab9\u Q4.py”,第28行,在
测试=安全输入(“这是一个字符串”)
TypeError:“int”对象不可调用
回溯(最近一次呼叫最后一次):
文件“C:\Users\Thomas\Desktop\ei8069_Lab9_Q4.py”,第28行,在
测试=安全输入(“这是一个字符串”)
TypeError:“float”对象不可调用

为什么有这一行:

safe_input = input(str("Enter a String Type you want to check: "))
在节目开始时。你应该有函数的定义,但是你在最后有它

解决方案:删除该伪行,并将函数定义移到程序顶部

解释:当您运行该行时,它会向用户请求一些内容,并且(比如
42
将被分配到
safe\u input
。然后您尝试将其用作函数,但嘿,
42
是一个整数,无法调用。

就我的两美分

首先,仔细阅读你的作业,你的方法并不是他们想要的

您使用了很多不必要的条件。您的函数可以更简单,如下所示:

def safe_input(prompt, type_=str):
    if(type_ not in (str, int, float)): 
        raise ValueError("Expected str, int or float.")  

    while True:
        test = input(prompt)    
        try:
            ret = type_(test)
        except ValueError:
            print("Invalid type, enter again.")                
        else:
            break    

    return ret

尽量不要在变量名中使用诸如type之类的内置函数。它们会覆盖内置函数,并且会在以后引起很多麻烦。

您的代码当前有什么问题?(它显示了什么不正确的行为?)在您的第一行中,您将safe_input的值分配给用户输入的值,然后像调用函数一样调用它!首先定义safe_input函数,而input()调用应该在函数内部。我明白了,所以在大多数情况下,只需确定用户输入的位置,然后首先定义safe_input函数,谢谢大家!!
safe_input = input(str("Enter a String Type you want to check: "))
def safe_input(prompt, type_=str):
    if(type_ not in (str, int, float)): 
        raise ValueError("Expected str, int or float.")  

    while True:
        test = input(prompt)    
        try:
            ret = type_(test)
        except ValueError:
            print("Invalid type, enter again.")                
        else:
            break    

    return ret