关于.format的Keyerror

时间:2015-08-23 21:40:39

标签: python floating-point string-formatting

我遇到了某种语法错误,我需要帮助理解。

这是我写的代码 -

offer=float(input("What's your offer"))
demand=float(500)
agree=offer+demand/2

print("You offer {f:0} " .format(offer) + "but the merchant wants {f:1} " .format(demand))
print("You finally agree on" + agree)

这是我收到的错误 -

File "c:\users\mariy\documents\visual studio 2013\Projects\PythonApplication4\PythonApplication4\module1.py", line 5, in <module>
print("You offer {f:0} " .format(offer) + "but the merchant wants {f:1} " .format(demand))
KeyError: 'f'

2 个答案:

答案 0 :(得分:2)

KeyError正在展示自己,因为格式规范{f:0}告诉.format()查找带有密钥f的字典,但不存在。

可能你想用这个:

print "You offer ${offer:6.2f} but the merchant wants ${demand:6.2f}".format(offer=200.0,demand=300.0)

您提供200.00美元,但商家想要$ 300.00

您可以将200.0300.0替换为您要使用的变量名称,将$替换为其他货币符号,或者不替换为符号。

请注意语法:

  1. $不是格式语法的一部分。字面打印。
  2. 使用{keyname:spec}
  3. 以大括号格式化格式
  4. keyname部分来自传递给kwargs的{​​{1}},即如果我们有.format(),那么我们必须{demand}.format(demand=something)其中.format(somedict)somedict为关键字
  5. demand是您放置数字位数,点,小数点后的数字和变量类型的位置,如spec中的浮点数。所以f表示总共6位数,小数点后2位,浮点数。

答案 1 :(得分:0)

您正在尝试使用.format(),但引用{}的{​​{1}}中的参数前面应该是float,而不是{。}}。

:0在代码执行过程中也会造成一些麻烦,不需要它们。但是,如果您只想使用一种格式操作,则数字将是1

中元组的索引

ex:.format()会生成以下输出"This is number {1} and this is {0}".format("zero", "one")

最终的打印也会造成麻烦,因为你无法连接字符串和整数。

经过一些更正后,您的代码应如下所示:

This is number one and this is zero

如果要限制小数个案的数量,可以在print("You offer {:f} but the merchant wants {:f} ".format(offer, demand)) print("You finally agree on {:f}".format(agree))个参数中定义它们。

ex:{}将打印带有2个十进制大小写的浮点数