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,一切都很好地显示出来。但是我做错了吗?
答案 0 :(得分: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 > 150
和if 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
,只有if
s):
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-statments条件时,运行时会丢失,尤其是在条件复杂的情况下
选项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语句,并保证在任何给定时间只输入一个块。
希望这有帮助
答案 1 :(得分:1)
这是因为if-elif-else
条件短路,如果第一个elif
条件为True
,则不会检查第二个条件。
来自if-suite
上的docs:
if_stmt ::= "if" expression ":" suite
( "elif" expression ":" suite )*
["else" ":" suite]
它通过评估表达式1来精确选择其中一个套件 一个直到一个被发现是真的;然后该套件被执行(和 没有执行或评估if语句的其他部分)。我摔倒 表达式为false, else 子句的套件(如果存在)是 执行。
如果您想要执行所有条件,请使用所有if
:
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
...
答案 2 :(得分:0)
您知道可以汇总列表吗?
clothes_total = sum([tot1, tot2, tot3, tot4, tot5])
但我有相信你有一个你的总变量列表,在这种情况下你可以这样做:
clothes_total = sum(totals_list)
答案 3 :(得分: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
另请注意,在您的原始代码中,除非您将<
更改为<=
,否则将错过150的值。