关于string:为什么python中的!=运算符不能用于键入函数(或者只是我的代码)?

Why doesn't the != operator in python work for type the function (or is it just my code)?

我想在问一些上下文之前提供我的代码。

我的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
a = float(input('Insert the value for a: '))
b = float(input('Insert the value for b: '))
c = float(input('Insert the value for c: '))
if type(a) != (float() or int()):
print ('You didn\'t insert a number! Try again! This is your last chance or I will stop running!')
sleep(1)
print (a)
if type(b) != (float() or int()):
print ('You didn\'t insert a number! Try again! This is your last chance or I will stop running!')
sleep(1)
print (b)
if type(c) != (float() or int()):
print ('You didn\'t insert a number! Try again! This is your last chance or I will stop running!')
sleep(1)
print (c)

这输出(假设我输入值):

插入a的值:8

插入b:3的值

插入c:2的值

你没有插入数字! 再试一次! 这是你的最后一次机会,否则我将停止运行!

8

你没有插入数字! 再试一次! 这是你的最后一次机会,否则我将停止运行!

3.0

你没有插入数字! 再试一次! 这是你的最后一次机会,否则我将停止运行!

2.0

问题是我指定如果它不是浮点数或整数,它应该传递消息。 但我确实插入了一个整数,但它仍然打印出字符串。 有什么问题? 您可以将变量分配给数字类型吗?


您调用了floatint构造函数,它们在没有参数的情况下返回零值。

所以:

1
if type(a) != (float() or int()):

翻译为:

1
if type(a) != (0.0 or 0):

那么(由于布尔评估规则)变成:

1
if type(a) != 0:

这显然是错的。

如果要测试精确类型,请在类型tuple上使用in进行检查,例如:

1
if type(a) not in (float, int):

通常你想接受子类,所以Pythonic的方法是:

1
if not isinstance(a, (float, int)):

当然,这些都不能解决您的检查问题。您通过将str转换为float显式创建了a。它总是一个float,如果字符串不是合法的float值,它会提高ValueError。类型检查永远不会有帮助。

所以你真正想要的是在try块中执行转换并在失败时捕获异常:

1
2
3
4
5
6
try:
    a = float(input('Insert the value for a: '))
    b = float(input('Insert the value for b: '))
    c = float(input('Insert the value for c: '))
except ValueError:
    sys.exit('You didn\'t insert a number!')  # or some equivalent action to handle failure

如果你想循环,直到他们给你一个有效的数字,我们有几个问题可供选择(还有几十个,我只是不能打扰他们所有)。


你想做:

1
if type(...) not in (float, int):

因为需要in运算符,而且没有调用

更好:

1
if not isinstance(var,(float,int)):

或低效的方式:

1
if type(...) is not float and type(...) is not int:

你也可以这样做:

1
2
3
4
5
6
7
8
import sys
try:
    a = float(input('Insert the value for a: '))
    b = float(input('Insert the value for b: '))
    c = float(input('Insert the value for c: '))
except ValueError:
    print('Error: Not a integer or float')
    sys.exit()


!=工作正常;问题是a != (b or c)并不意味着a != b or a != c!=不会分布在or上。它与类型无关。


它的打印正是您要求打印的内容

1
2
3
4
a = 1

if a != 1 or a!=2:
    print('Of course, a != 2 is True!')
1
2
(xenial)vash@localhost:~/python/stack_overflow$ python3.7 insert.py
Of course, a != 2 is True!

只有一个or语句需要求值True才能执行if语句,并且因为float != int它变为True并运行print,因为你要求它执行