当前位置: 首页 > 知识库问答 >
问题:

Python如果语句不工作?

汲睿
2023-03-14

我刚刚开始学习python,通过《像计算机科学家一样思考》这本书,我陷入了一些语言语法。

def amt():
    amount = input("Enter your amount: ")
    amount = int(amount)
    if amount >= 20:
        twe = amount / 20
        amount = amount - twe * 20
            print("You need to pay %d twenty dollar bills" %(twe))
    if amount >= 10:
        ten = amount / 10
        amount = amount - ten * 10
        print("You need to pay %d ten dollar bills" %(ten))
    if amount >= 5:
        five = amount / 5
        amount = amount - five * 5
        print("You need to pay %d five dollar bills" %(five))
    if amount >= 1:
        one = amount / 1
        amount = amount - one * 1
        print("You need to pay %d one dollar bills" %(one))

amt()

当我使用一些输入(比如7)运行此程序时,会收到如下错误消息:

Traceback (most recent call last):
  File "dollars.py", line 21, in <module>
    amt()
  File "dollars.py", line 7, in amt
    print("You need to pay %d twenty dollar bills" %(twe))
UnboundLocalError: local variable 'twe' referenced before assignment

为什么if语句不能正常工作?即使输入值小于20,它仍会进入第一个if语句

共有2个答案

湛功
2023-03-14

复制和粘贴您的代码,它运行时不会出错,但它不会做您想要的事情。我想你把%(模数)和/(整数除法)混在一起,以确定你需要的账单数量。

此外,当您在代码中看到大量重复的行时,您可能需要重新组织代码。基本上,您的amt归结为:

def amt():
    amount = int(input('Enter your amount: ') )
    for name, nomination in [ ('twenty', 20), ('ten', 10), ('five', 5), ('one', 1) ]:
        bills = amount // nomination
        amount -= bills * nomination
        if not bills: continue
        print('You need to pay {} {} dollar bill{}.'.format (bills, name, '' if bills == 1 else 's') )

关于整数除法的一些单词:

对于所有的a≥b ∈ ℤ \ {0},恰好存在一个d≥和一个r≥,使得a=db r0≤r

东门阳飇
2023-03-14

它在视觉上不明显,但你在混合标签和空格。看起来print语句在if中,但实际上不是。

这是您的源代码在Stack Overflow的文本编辑器中的外观:

 类似资料:
  • 我正在创建一个基于文本的游戏,并询问性别。但我的else语句似乎不起作用。 打印性别

  • 问题内容: 嗨,我想运行一个if语句,但是在我所有的AS别名附近都会不断出现语法错误,我在做什么错? 问题答案: 有两个问题。缺少BEGIN以及SELECT都需要在每个IF语句内。您不能在SELECT中包含内联IF,如果需要执行此操作,则可以使用CASE语句。

  • 我对Java很陌生,我正在努力学习。我写了少量的代码,但结果并不是我所期望的。看起来,无论我将体重设置为什么,它都不会显示“你的脂肪”上方的打印。我错过了什么? 我希望这段代码能够顺序检查每个else语句给出的int值,并打印出与int值相等的行。

  • 我有以下QueryDSL查询: 它使用计数,因为这是Spring数据用来对结果进行分页的第一个查询。

  • 假设我有一个类似下面的函数checkTime,我必须同时检查多个条件。 (上述示例是假设的) 我使用的函数完全有效,但是: 有没有更好的方法、程序或公式来取代这一点?(不必如此冗长或丑陋) Thanx!

  • 我让用户在一个< code>int[]中输入5个int的列表。然后,我用一个简单的< code>for语句遍历int[]中的这些int。我声明了一个名为“evens”的< code>int变量如果int[]中的数字at ,< code > evens ; 现在我有了 语句: 问题是,无论偶数的值是多少,都会调用它。它可以是5或3,但仍会被调用。我最近一直在使用C#,但这是简单的Java。 整机代码