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 > 150elif 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 > 2004 つのオプションがあります。

オプション 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

これにより、最後の 2 つの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 文を省略でき、同時に 1 つのブロックしか入力されないことが保証されます。

お役に立てれば

于 2013-07-28T05:39:35.937 に答える
1

これは、条件がif-elif-else短絡するためです。最初のelif条件がTrue2 番目の条件である場合、チェックされません。

ドキュメントからif-suite:_

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

いずれかが true になるまで式を 1 つずつ評価することにより、スイートの 1 つだけを選択します。次に、そのスイートが実行されます ( if ステートメントの他の部分は実行または評価されません)。すべての式が false の場合、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 に答える