如果/ Elif / Else声明问题。如果if和elif没有相遇,就不会进入其他地方

时间:2014-06-24 03:44:21

标签: python if-statement

抱歉可能是非常明显的问题,但是我在使用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

4 个答案:

答案 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)