为什么在这段代码中会出现“不能将序列乘以'float'类型的非整数”错误?

2024-06-24 11:52:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试做一个货币转换器,但我不知道如何解决这个问题。 回溯:

Traceback (most recent call last):
  File "C:/Users/jorge/AppData/Local/Programs/Python/Python39/conversor.py", line 11, in <module>
    mult=inp*din
TypeError: can't multiply sequence by non-int of type 'float'
>>> 

代码如下:

#currency converter
inp=float(input('Enter a value'))
din=float(input('Which one do you want to convert:eur/ars/mxn/pen/cop/brl'))

eur=float(0.84)
ars=float(97.94)
mxn=float(19.90)
pen=float(4.10)
cop=float(3.800)
brl=float(5.17)
mult=inp*din
print(mult, din)

Tags: mostinput货币floateurinpcoptraceback
1条回答
网友
1楼 · 发布于 2024-06-24 11:52:53

我之所以给出这个答案,是因为另一个答案,如果答案是危险的,是错误的做事方式,甚至不是解决问题的理想方式,并且会养成以后很难改掉的坏习惯。有一篇关于为什么eval really is dangerous的好文章,这里也有其他缺点

正确的方法是首先创建一个dict,一个查找表,将我们的货币名称与我们的值进行比较:

currencies = {
    'eur': 0.84,
    'ars': 97.94,
    'mxn': 19.90,
    'pen': 4.10,
    'cop': 3.800,
    'brl': 5.17,
}

这允许我们通过提供名称来查找货币的值,因为currencies['eur']将为我们提供值。注意,我们不必使用float(0.84),因为0.84已经是一个浮点

接下来,我们需要获得用户输入:

inp = float(input('Enter a value'))
din = input('Wich one do you want to convert:eur/ars/mxn/pen/cop/brl')

请注意,我们不会将din转换为浮点,因为它是一个单位,所以稍后我们将在currencies中查找它

最后,我们转换值并打印:

mult = inp * currencies[din]
print(mult, din)

现在你的代码应该可以工作了

现在,为什么不进行评估?好吧,即使提供的代码是安全的,您可能会得到:

>>> eval('usdollar')
NameError: name 'usdollar' is not defined

祝贺您,当dict解决方案运行良好时,您提供了一个可怕的错误:

>>> currencies['mydollar']
  > 1 currencies['mydollar']
KeyError: 'mydollar'

这很清楚问题是什么

相关问题 更多 >