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
问题是我指定如果它不是浮点数或整数,它应该传递消息。 但我确实插入了一个整数,但它仍然打印出字符串。 有什么问题? 您可以将变量分配给数字类型吗?
您调用了
所以:
1 | if type(a) != (float() or int()): |
翻译为:
1 | if type(a) != (0.0 or 0): |
那么(由于布尔评估规则)变成:
1 | if type(a) != 0: |
这显然是错的。
如果要测试精确类型,请在类型
1 | if type(a) not in (float, int): |
通常你想接受子类,所以Pythonic的方法是:
1 | if not isinstance(a, (float, int)): |
当然,这些都不能解决您的检查问题。您通过将
所以你真正想要的是在
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): |
因为需要
更好:
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() |
它的打印正是您要求打印的内容
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!
只有一个