找零 - CS50x 2026

待解决的问题

在名为 sentimental-cash 的文件夹中一个名为 cash.py 的文件中,编写一个程序,询问用户需要找零多少钱,然后输出找零所需的最少硬币数量。这与你在 Problem Set 1 中所做的完全相同,不同之处在于这次你的程序应该用 Python 编写,并且你应该假设用户输入的是以美元为单位的找零金额(例如,0.50 美元而不是 50 美分)。

演示

具体要求

  • 使用 CS50 库中的 get_float 获取用户输入,并使用 print 输出你的答案。假设可用的硬币只有 25 美分 (quarters)、10 美分 (dimes)、5 美分 (nickels) 和 1 美分 (pennies)。

    • 我们要求你使用 get_float 以便处理美元和美分,尽管不带美元符号。换句话说,如果需要找给某位顾客 $9.75(例如一份报纸花费 25¢,但顾客支付了 $10 钞票),请假设你的程序输入将是 9.75,而不是 $9.75975。但是,如果需要找给某位顾客正好 $9,请假设你的程序输入将是 `9.00` 或仅仅是 `9`,但同样不是 `$9900。当然,由于浮点值的特性,你的程序也可能处理像 9.09.000` 这样的输入;你无需担心检查用户的输入是否像货币那样“格式化”。
  • 如果用户未能提供一个非负值,你的程序应该反复提示用户输入一个有效金额,直到用户遵守为止。

  • 顺便说一下,为了我们可以自动测试你的代码,我们要求你程序的最后一行输出仅为可能的最少硬币数量:一个整数后跟一个换行符。

如何测试

虽然 check50 是针对此问题的,但建议你先自行针对以下每种情况测试代码。

  • 运行你的程序 python cash.py,并等待输入提示。输入 0.41 并按回车。你的程序应该输出 4
  • 运行你的程序 python cash.py,并等待输入提示。输入 0.01 并按回车。你的程序应该输出 1
  • 运行你的程序 python cash.py,并等待输入提示。输入 0.15 并按回车。你的程序应该输出 2
  • 运行你的程序 python cash.py,并等待输入提示。输入 1.60 并按回车。你的程序应该输出 7
  • 运行你的程序 python cash.py,并等待输入提示。输入 23 并按回车。你的程序应该输出 92
  • 运行你的程序 python cash.py,并等待输入提示。输入 4.2 并按回车。你的程序应该输出 18
  • 运行你的程序 python cash.py,并等待输入提示。输入 -1 并按回车。你的程序应该拒绝此输入为无效,并重新提示用户输入另一个数字。
  • 运行你的程序 python cash.py,并等待输入提示。输入 foo 并按回车。你的程序应该拒绝此输入为无效,并重新提示用户输入另一个数字。
  • 运行你的程序 python cash.py,并等待输入提示。不输入任何内容并按回车。你的程序应该拒绝此输入为无效,并重新提示用户输入另一个数字。

正确性

check50 cs50/problems/2026/x/sentimental/cash

代码风格

style50 cash.py

如何提交

在你的终端中,执行以下命令提交你的工作,并回答出现的提示。

submit50 cs50/problems/2026/x/sentimental/cash