【问题标题】:Python code not working - confusion about if statementPython 代码不起作用 - 关于 if 语句的混淆
【发布时间】:2013-07-22 03:07:24
【问题描述】:

我正在编写一个简单的代码来计算应发生多少变化,并使用打印语句来检查我的值。

cost = float(raw_input('How much did your meal cost? > '))
payment = float(raw_input('How much did you pay? > '))

change = (payment - cost)

print change

if change < 0:
    print 'You need to pay $%.2f more!' %  (-change)

dollars, q, d, n, p = 0, 0, 0, 0, 0

change = float(change*100)

print change

if change> 100:
    dollars = int(change/100)
    change = change % 100
    print change

if change >= 25:
    q = int(change/25)
    change = change % 25
    print change

if change >= 10:
    d = int(change/10)
    change = change % 10
    print change

if change >= 5:
    n = int(change/5)
    change = change % 5
    print change    

if change >= 1:
    p = int(change/1)
else:
    print "why doesn't this work?"
    print p
    print change

print 'you get %d dollars, %d quarters, %d dimes, %d nickels, and %d pennies!' % (dollars, q, d, n, p)

这会返回:

您的餐费是多少? > 34.34

你付了多少钱? > 40

5.66

566.0

66.0

16.0

6.0

1.0

为什么这不起作用?

0

1.0

我可以看到在便士计算前后变化 = 1.0,但是

if change >= 1

仍然读为假,然后转到 else 语句。这里发生了什么,我该如何解决?

【问题讨论】:

  • 要查看发生了什么,请在末尾添加此打印语句:print '%8.20f' % change
  • 顺便说一句,美元案不应该像其他人一样使用&gt;=吗?

标签: python


【解决方案1】:

欢迎使用 IEEE 754 浮点。享受inaccuracies。如果您想避免它们,请使用定点或整数机制。

【讨论】:

    【解决方案2】:

    请阅读:浮点运算:问题和限制

    http://docs.python.org/2/tutorial/floatingpoint.html

    你可能对Decimal模块感兴趣

    【讨论】:

      【解决方案3】:

      正如 ignacio 所说。简单的解决方法就是输入一行以将更改四舍五入到小数点后第二位。使用函数稍微简化一下,你的代码就变成了:

      def get_change_and_coin(coin_amount, change):
          change = round(change, 2)
          return (change % coin_amount, int(change / coin_amount))
      
      
      cost = float(raw_input('How much did your meal cost? > '))
      payment = float(raw_input('How much did you pay? > '))
      
      change = (payment - cost)
      
      print change
      
      if change < 0:
          print 'You need to pay $%.2f more!' %  (-change)
      
      dollars, q, d, n, p = 0, 0, 0, 0, 0
      
      dollars = int(change)
      change = float(change*100)
      
      (change, q) = get_change_and_coin(25, change)
      (change, d) = get_change_and_coin(10, change)
      (change, n) = get_change_and_coin(5, change)
      (change, p) = get_change_and_coin(1, change)
      
      print 'you get %d dollars, %d quarters, %d dimes, %d nickels, and %d pennies!' % (dollars, q, d, n, p)
      

      希望这会有所帮助!

      【讨论】:

      • 非常感谢!奇怪的是浮点数有这些不准确之处,但无论如何这种编写程序的方式都很聪明。
      【解决方案4】:

      float(40)-float(34.34)=5.659999999999997

      我猜你说“change = 1.0”不是1.0,而是0.99999999999

      试试:round(40-34.34, 2)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-09
        相关资源
        最近更新 更多