0
clothes_total = tot1 + tot2 + tot3 + tot4+ tot5
tot_price = tax * (clothes_total + shipping + gift_number)
tot_price1 = tax * (clothes_total * 0.85 + shipping + gift_number)
tot_price2 = tax * (clothes_total * 0.85 + shipping + gift_number - 30)
print "<h4>Original Price: $ %s </h4>" % clothes_total
if clothes_total < 150:
    print "<h4> TOTAL : %s </h4>" % tot_price
elif clothes_total > 150:
    print "15% Discount: $"
    print clothes_total * 0.85
    print "<h4> FIFTEEN: $ %s </h4>" % tot_price1
elif clothes_total > 200:
    print "15% Discount + $30 off: $"
    print 0.85 * (clothes_total - 30)
    print "<h4> THIRTY: $ %s </h4>" % tot_price2

即使该clothes_total数字将大于 200,elif clothes_total >200也不会显示其中的值。大家能告诉我为什么不显示吗?elif clothes_total > 150即使数字大于 200,一切都很好地显示出来。我做错了什么?

4

4 回答 4

2

发生这种情况是因为您的程序执行elif clothes_total > 150在它甚至考虑elif clothes_total > 200. 下面是 if 语句的工作原理:

这:

if condition1:
    do thing1
elif condition2:
    do thing2
elif condition2:
    do thing3

与此相同:

if condition1:
    do thing1
else:
    if condition2:
        do thing2
    else:
        if condition2:
            do thing3

如果你想执行里面的和里面的东西if clothes_total > 150if clothes_total > 200有四个选项:

选项1(只需将所有内容从一个添加到另一个):

if clothes_total < 150:
    print "<h4> TOTAL : %s </h4>" % tot_price
elif 150 < clothes_total < 200: # define a maximum as well
    print "15% Discount: $"
    print clothes_total * 0.85
    print "<h4> FIFTEEN: $ %s </h4>" % tot_price1
    print "15% Discount + $30 off: $"
    print 0.85 * (clothes_total - 30)
    print "<h4> THIRTY: $ %s </h4>" % tot_price2
elif clothes_total > 200:
    print "15% Discount + $30 off: $"
    print 0.85 * (clothes_total - 30)
    print "<h4> THIRTY: $ %s </h4>" % tot_price2

选项 2(嵌套 if 语句):

if clothes_total < 150:
    print "<h4> TOTAL : %s </h4>" % tot_price
elif 150 < clothes_total:
    print "15% Discount: $"
    print clothes_total * 0.85
    print "<h4> FIFTEEN: $ %s </h4>" % tot_price1
    if clothes_total > 200:
        print "15% Discount + $30 off: $"
        print 0.85 * (clothes_total - 30)
        print "<h4> THIRTY: $ %s </h4>" % tot_price2
elif clothes_total > 200:
    print "15% Discount + $30 off: $"
    print 0.85 * (clothes_total - 30)
    print "<h4> THIRTY: $ %s </h4>" % tot_price2

选项 3(不else,只是ifs):

if clothes_total < 150:
    print "<h4> TOTAL : %s </h4>" % tot_price
if 150 < clothes_total
    print "15% Discount: $"
    print clothes_total * 0.85
    print "<h4> FIFTEEN: $ %s </h4>" % tot_price1
if clothes_total > 200:
    print "15% Discount + $30 off: $"
    print 0.85 * (clothes_total - 30)
    print "<h4> THIRTY: $ %s </h4>" % tot_price2

这将执行最后两个if块,这可能不是您想要的。但是请注意,在执行所有这些 if 语句的条件时,您会在运行时失败,尤其是在它们是复杂条件的情况下

选项 4(范围条件):

if clothes_total < 150:
    print "<h4> TOTAL : %s </h4>" % tot_price
elif 150 < clothes_total < 200: # define the bounds of the range of acceptable values
    print "15% Discount: $"
    print clothes_total * 0.85
    print "<h4> FIFTEEN: $ %s </h4>" % tot_price1
elif clothes_total > 200:
    print "15% Discount + $30 off: $"
    print 0.85 * (clothes_total - 30)
    print "<h4> THIRTY: $ %s </h4>" % tot_price2

这使您可以缩短所需的 if 语句,并保证在任何给定时间只输入一个块。

希望这可以帮助

于 2013-07-28T05:39:35.937 回答
1

那是因为if-elif-else条件短路,如果第一个elif条件是True第二个条件,则不会检查。

文档开始if-suite

if_stmt ::=  "if" expression ":" suite
             ( "elif" expression ":" suite )*
             ["else" ":" suite]

它通过逐一评估表达式直到发现其中一个为真,从而准确地选择其中一个套件;然后执行该套件(并且 不执行或评估 if 语句的其他部分)。如果所有表达式都为假,则执行else子句套件(如果存在)。

if如果您希望执行所有条件,请使用 all :

if clothes_total < 150:
    ...
if clothes_total > 150:
    ...
if clothes_total > 200:
  ...

另一种选择是:

if clothes_total < 150:
    ...
elif 150 <= clothes_total <= 200:  #this is True if clothes_total is between 150 and 200(both inclusive)
    ...
elif clothes_total > 200:          #True if clothes_total is greater than 200
  ...
于 2013-07-28T05:40:10.290 回答
0

你知道你可以总结列表:

clothes_total = sum([tot1, tot2, tot3, tot4, tot5])

但我必须相信你有一个总变量列表,在这种情况下你可以这样做:

clothes_total = sum(totals_list)

于 2013-07-28T05:43:52.143 回答
0

正如其他人指出的那样,一旦total>150条件为真,total>200甚至都不会被评估。

尝试像这样颠倒语句的顺序......

if clothes_total > 200:
    print "15% Discount + $30 off: $"
    print 0.85 * (clothes_total - 30)
    print "<h4> THIRTY: $ %s </h4>" % tot_price2
elif clothes_total > 150:
    print "15% Discount: $"
    print clothes_total * 0.85
    print "<h4> FIFTEEN: $ %s </h4>" % tot_price1
else:
    print "<h4> TOTAL : %s </h4>" % tot_price

还要记住,在您的原始代码中,除非您<<=.

于 2013-07-28T05:48:32.913 回答