Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3-代码不会将大于1的用户输入识别为数字_Python_Python 3.x - Fatal编程技术网

Python 3-代码不会将大于1的用户输入识别为数字

Python 3-代码不会将大于1的用户输入识别为数字,python,python-3.x,Python,Python 3.x,我为python for informatics中的一个练习创建了以下python代码。代码将运行,但不会将大于1的用户输入表单识别为数字。任何协助都将不胜感激 def isfloat(string): try: float(string) if float(string) == True: return True except ValueError: return False user_input = i

我为python for informatics中的一个练习创建了以下python代码。代码将运行,但不会将大于1的用户输入表单识别为数字。任何协助都将不胜感激

def isfloat(string):
    try:
        float(string)
        if float(string) == True:
            return True
    except ValueError:
        return False

user_input = input('Please enter a real number. Type \"done\" to exit and tally your entries \n> ')
data = 0
count = 0

while isfloat(user_input) == True:
    data = data + float(user_input)
    count = count + 1
    user_input = input("Please enter another value \n> ")
    isfloat(user_input)

else:
    if (isfloat(user_input) == False) and (user_input == "done"):
        print("The sum of your entries is: " + str(data))
        print("The number of entries was: " + str(count))
        exit()
    else:
        print("The entry was not a numeric value \n")
        print("The sum of your valid entries is: " + str(data))
        print("The number of valid entries was: " + str(count))
        exit()

问题在于
float(string)
永远不会返回
True
;它将始终返回一个类型为
float
的数字,或者如果无法将输入转换为float,它将引发一个
ValueError

要解决此问题,您需要删除
if
语句,并在调用
isfloat
函数中的
float(string)
后简单地返回
True
。如果
float(string)
引发
ValueError
isfloat
会像您预期的那样返回
False
;否则,它将继续并返回
True

def isfloat(string):
    try:
        float(string)
        return True
    except ValueError:
        return False

问题在于您的
isfloat
。您不应该将
float
的结果与
True
进行比较。相反,你可以这样做:

def isfloat(string):
    try:
        float(string)
        return True
    except ValueError:
        return False
您实际上不需要对
float
的返回值执行任何操作。如果该调用没有触发错误——您有一个浮点数,那么只需返回
True

def isfloat(string):
    try:
        float(string)
        return True
    except ValueError:
        return False
使用这条线可能很有诱惑力

if float(string): return True
这几乎是可行的,但会将
“0”

错误分类这是荒谬的:

if float(string) == True:
这是检查
float
转换值是否等于
True
(数值为1)

只需检查异常,然后执行以下操作:

def isfloat(string):
    try:
        float(string)
    except ValueError:
        return False
    else:
        return True

如果
string
“1”
“1.0”
,则
float(string)=True
将通过,因为
True
是值为
1
int
子类。但这是一个糟糕的测试,我同意,尽管我不是有意修改代码的其余部分;我只是想解决OP提出的问题。我会修改我的帖子,让它更清楚。谢谢你,约翰。我只呆了一个星期左右,所以雾还没有散。这绝对纠正了问题。