我今天刚开始学习编程,遇到了一个问题。(这是一种鼓励自己的方式。)
但既然这是很基本的,也许有人能很快解释一下这里发生了什么
我有一个简单的if声明,给我一个课程
divisible_by_11 = 11
is_583_divisible_by_11 = None
is_911_divisible_by_11 = None
number_583 = 583
if [number_583 % divisible_by_11 == 0]: #that line is added by me
is_583_divisible_by_11 = True
else:
is_583_divisible_by_11 = False
is_911_divisible_by_11 = None
number_911 = 911
if [number_911 % divisible_by_11 == 0]: #that line is added by me
is_911_divisible_by_11 = True
else:
is_911_divisible_by_11 = False
print(is_583_divisible_by_11)
print(is_911_divisible_by_11)这还真了两次,这当然是不对的。我做了两次检查
print(number_911 / divisible_by_11)的正确结果
82.81818181818181在这种情况下,为什么会发生“if number_911 % divisible_by_11 == 0”返回true,即使在同一个程序中,我们可以检查这一点,这是不正确的。
它与int/float有关吗?如果是这样的话,我如何才能强制将该数字作为浮点数处理?
发布于 2017-09-22 11:21:13
您不应该使用[...]括号;这将创建一个列表对象
>>> number_583 = 583
>>> divisible_by_11 = 11
>>> [number_583 % divisible_by_11 == 0]
[True]
>>> type([number_583 % divisible_by_11 == 0])
<class 'list'>因为您有至少一个元素的列表,所以在布尔上下文中,总是为真;参见 documentation。
当==操作产生False结果时,这一点很重要,就像在911测试中一样:
>>> number_911 = 911
>>> [number_911 % divisible_by_11 == 0]
[False]
>>> bool([number_911 % divisible_by_11 == 0])
Truebool()返回与if测试相同的结果。
去掉这些方括号:
if number_583 % divisible_by_11 == 0:
is_583_divisible_by_11 = True
else:
is_583_divisible_by_11 = False和
if number_911 % divisible_by_11 == 0:
is_911_divisible_by_11 = True
else:
is_911_divisible_by_11 = False您可以直接分配结果,因为==已经给出了一个布尔值:
is_583_divisible_by_11 = number_583 % divisible_by_11 == 0
is_911_divisible_by_11 = number_911 % divisible_by_11 == 0如果确实需要对表达式进行分组,则需要使用(...)圆括号:
is_583_divisible_by_11 = (number_583 % divisible_by_11 == 0)
is_911_divisible_by_11 = (number_911 % divisible_by_11 == 0)但在这里他们是多余的。
发布于 2017-09-22 11:21:03
不要将表达式放在列表中。一个非空的列表总是真实的,即使它的内容都是虚假的。去掉方括号:
if number_583 % divisible_by_11 == 0:
...>>> bool([False])
True发布于 2017-09-22 11:22:01
这是因为if语句无意中构造了一个1元素列表:
>>> [number_911 % divisible_by_11 == 0]
[False]一个非空的列表被认为是True的布尔用途。
if [False]:
print('True')
else:
print('False')会印上“真”。
您可以简单地删除[和]以避免创建列表,从而更正代码。
顺便说一句,初始化结果变量是不必要的,也不可取。也可以完全不使用if语句。这相当于:
>>> is_583_divisible_by_11 = 583 % 11 == 0
>>> is_583_divisible_by_11
True
>>> is_911_divisible_by_11 = 911 % 11 == 0
>>> is_911_divisible_by_11
False最后,将文字值绑定到变量并使用简单地重申该值的名称(如number_911 )几乎没有什么用处。直接用这个号码。
在诸如G = 9.8' (重力加速度)、PI = 3.14159、ROWS = 8、COLS = 8 (棋盘尺寸)等事物中使用常量是有意义的。
https://stackoverflow.com/questions/46363496
复制相似问题