抱歉可能是非常明显的问题,但是我在使用if / elif / else语句时遇到了麻烦。声明永远不会进入"否则"区域。即使差异等于0。
if difference > 0:
difference_string = "The combination will have a %s cm gap from being fully enclosed." % (difference)
elif difference < 0:
difference_string = "The combination will exceed the dimensions of the shelf unit by %s cm." % (difference)
else:
difference_string = "The combination completely enclose a %s cm shelf unit." % (uh)
我不明白什么不对。我想我可以做elif == 0,但我想在修复它之前理解我的错误。
以下是整个代码:
def x38door_fit(uh):
"""uh = unit height
door_fit(uh) --> x*38 door heights will fit on uh.
"""
uh = int(uh)
doors = uh / int(38)
if uh % int(38) is not 0:
tuh = 0
counter = 0
d38 = int(38)
while tuh < uh:
d38 += 38
tuh = d38
counter += 1
tdh = counter * 38 #total door height = tdh
difference = uh - tdh
if difference > 0:
difference_string = "The combination will have a %s cm gap from being fully enclosed." % (difference)
elif difference < 0:
difference_string = "The combination will exceed the dimensions of the shelf unit by %s cm." % (difference)
else:
difference_string = "The combination completely enclose a %s cm shelf unit." % (uh)
print difference_string
print doors
return doors
答案 0 :(得分:1)
你的问题是这行代码:
if uh % int(38) is not 0:
如果您传入分配给0
的{{1}},则此条件评估为0.您遇到的uh
块永远不会执行,因为它永远不会被执行。
答案 1 :(得分:0)
我的猜测是difference
是一个浮点数。典型问题如下所示
>>> 0.1 + 0.1 + 0.1 - 0.3 == 0
False
这是因为大多数小数部分不能完全表示为浮点数。
一种可能的解决方法是将float
替换为Decimal
>>> from decimal import Decimal
>>> Decimal('0.1') + Decimal('0.1') + Decimal('0.1') - Decimal('0.3') == 0
True
另一个是允许一个小错误。即。将非常小的数字视为零
>>> abs(0.1 + 0.1 + 0.1 - 0.3) < 1e-10
True
答案 2 :(得分:0)
您尚未提供可运行的示例,因此我将尽可能明确地提供答案:
一种可能性是difference
是一个字符串。您可以在print repr(difference)
语句前输入if
来查看此内容,以获取difference
。
>>> difference = '9'
>>> print repr(difference)
'9'
>>> difference = 9
>>> print repr(difference):
9
答案 3 :(得分:0)
实际上有两件事让你感到悲痛,但这两件事都没有得到恰当的解释。
首先,在这一行,
if uh % int(38) is not 0:
如果uh
任何传入38的倍数,则将跳过整个逻辑。所以38,76,114等等都将通过,不会打印任何内容。
其次,除了使用大量未使用的变量进行非常糟糕的设计之外,使用以下代码:
tuh = 0
counter = 0
d38 = int(38)
while tuh < uh:
d38 += 38
tuh = d38
counter += 1
tdh = counter * 38
永远不会允许出现超过0的差异。您似乎正在尝试在此处找到38到uh
的壁橱倍数。让我们简化一下吧。我们可以删除d38
,只需将更改它的命令重新分配给tuh
,然后完全删除counter
。
tuh = 0
while tuh < uh:
tuh += 38
tdh = tuh
现在,只要tuh
小于uh
,我们就会添加另外38个,因此tuh
(和tdh
)将始终在每种情况下都大于uh
。这意味着唯一一个将要执行的案例是difference = uh - tdh
:
elif difference < 0:
difference_string = "The combination will exceed the dimensions of the shelf unit by %s cm." % (difference)