【问题标题】:What's making the difference here? I just dont get behind it这里有什么不同?我只是不支持它
【发布时间】:2021-01-28 13:54:40
【问题描述】:

所以我编写了这段代码来检查整数是否可以在没有休息的情况下进行划分,以及它的工作原理。 但我需要做出改变,这样才能奏效。我真的只是想了解为什么这个小改动完全颠倒了我的代码的结果。这是工作代码

x = input("Erster Teiler")
y = input("Zweiter Teiler")

z = int(x)%int(y) 
z1 =int(y)%int(x)

if z == 0 or z1 == 0:
    print("teilbar")
else: 
    print("nicht teilbar")

我对这个练习的第一次尝试是做完全相反的。如果我输入 2 个你不能除的数字,它 说它们是可分的。 我只想知道这些代码有什么不同。 如您所见,我所做的只是改变了我的第一个 if 条件的前提。

x = input("Erster Teiler")
y = input("Zweiter Teiler")

z = int(x)%int(y) 
z1 =int(y)%int(x)

if z or z1 == 0:
    print("teilbar")
else:
    print("nicht teilbar")

【问题讨论】:

  • 你能澄清你的问题吗?是什么让您认为 zz == 0 是等价的?您是否检查过print(z, z==0) 的各种z 值?
  • 正如@mistermiyagi 所说,z or z1 == 0z == 0 or Z1 == 0 不同。作为替代方案,如果您只检查(Z * Z1) == 0
  • 编译器不会像人类那样读取“z or z1 == 0”,它会看到 (z) 或 (z1 == 0),其中 (z) 被解释为 (z ! = 0)。你会得到一个等价于 (z != 0) 或 (z1 == 0) 的逻辑表达式。
  • 谢谢你们的帮助,我真的很感激。你可能已经猜到我是这个领域的一个完整的初学者,我需要再次阅读基础知识。这就是为什么我要求澄清,即使我本可以把练习交给我的老师。我认为使用 (Z*Z1) == 0 可以很好地替代我使用的方法。

标签: python if-statement integer division


【解决方案1】:

查看python文档中关于真值测试的部分

https://docs.python.org/3/library/stdtypes.html

复制部分文档

真值测试

可以测试任何对象的真值,用于 if 或 while 条件或作为以下布尔运算的操作数。

默认情况下,除非对象的类定义了返回 False 的 __bool__() 方法或使用对象调用时返回零的 __len__() 方法,否则默认情况下,该对象被视为真。以下是大多数被认为是错误的内置对象:

  • 定义为假的常量:无和假。

  • 任何数字类型的零:0, 0.0, 0j, Decimal(0), Fraction(0, 1)

  • 空序列和集合:'', (), [], {}, set(), range(0)

除非另有说明,否则具有布尔结果的操作和内置函数始终返回 0 或 False 表示假,1 或 True 表示真。 (重要的例外:布尔运算 or 和 and 总是返回它们的操作数之一。)

if z or z1 == 0:

正在测试 z 是否为数字类型,0 以外的任何值都被评估为 true。

【讨论】:

    【解决方案2】:

    我认为您的第一个代码是正确的。在第二个代码中 z 没有任何条件,因此我无法返回 true 或 false 来执行 if 语句。语法错误

    【讨论】:

    • 在没有条件表达式的情况下检查变量是完全可以的。像if z: 这样的检查会起作用(尽管不是预期的结果)。
    猜你喜欢
    • 2017-12-28
    • 2020-02-27
    • 2013-01-04
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多