Cash

要解决的问题

在名为 sentimental-cash 的文件夹中名为 cash.py 的文件中,编写一个程序,询问用户欠多少找零,然后输出可以用最少多少个硬币来找零。你可以像在问题集 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