我目前正在学习python,我正在尝试创建一个程序,允许用户输入他们的'更改';然后得到一个总数。就我个人而言,我一直从命令行运行它来测试它,但是我在让它以我需要的方式响应时遇到了麻烦。
在命令行中输入如下内容:filename.py 25 10 5 1
但我遇到的问题是,而不是接受同一行中的数字,我不得不做这样的事情:
filename.py
25
10
5
1
and then I'll get the total
我要的是:
filename.py 25 10 5 1
total
这是我正在尝试的代码:
def coin_value(quarters, dimes, nickels, pennies):
firsttotal = .25 * quarters + .10 * dimes + .05 * nickels + .01 * pennies
total = round(firsttotal,2)
currency_string = "${:,.2f}".format(firsttotal)
print(f"The total value of your change is", currency_string)
coin_value(int(input()), int(input()), int(input()), int(input()))
有没有人有任何建议或知道我做错了什么?与其他语言(如C或c++)不同,您可以使用scanf指定从终端读取的内容,python中的输入函数读取整行文本,而不仅仅是一个元素。所以你第一次执行int(input())你会读到"25 10 51 "作为字符串,然后它会尝试将其解析为int,这会给你一个错误
如果你想在一行中发送4个值,我建议如下:
quarters, dimes, nickels, pennies = map(int, input().split())
这将在一行中为您提供4个变量,信息为int。
编辑:我读了其他的评论,如果你想传递值作为命令行参数,你想使用sys.argv:import sys
quarters, dimes, nickels, pennies = map(int, sys.argv[1:])
先导入sys
您可能只需要从命令行解析参数;如果您只想使用输入函数,只需像下面这样修改:
def coin_value(quarters, dimes, nickels, pennies):
firsttotal = .25 * quarters + .10 * dimes + .05 * nickels + .01 * pennies
total = round(firsttotal,2)
currency_string = "${:,.2f}".format(firsttotal)
print(f"The total value of your change is", currency_string)
input_string = input()
quarters, dimes, nickels, pennies = input_string.split()
coin_value(int(quarters), int(dimes), int(nickels), int(pennies))
input
将在您启动程序并等待输入后被调用。根据您的要求,sys.argv
是要走的路。试试这个:
import sys
def coin_value(quarters, dimes, nickels, pennies):
firsttotal = .25 * quarters + .10 * dimes + .05 * nickels + .01 * pennies
total = round(firsttotal,2)
currency_string = "${:,.2f}".format(firsttotal)
print(f"The total value of your change is", currency_string)
quarters, dimes, nickels, pennies = sys.argv[1:]
coin_value(int(quarters), int(dimes), int(nickels), int(pennies))