【问题标题】:Why do i get "can't multiply sequence by non-int of type 'float'" Error in this code?为什么我在这段代码中得到“不能将序列乘以'float'类型的非整数”错误?
【发布时间】:2021-09-07 03:26:53
【问题描述】:

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

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)

【问题讨论】:

  • 可以直接写成eur = 0.84,为什么还要eur=float(0.84)
  • 您没有显示完整的代码。 sequence 表示一个列表或类似元组的类型,它可以乘以一个整数,然后有效地复制所有元素 N 次并将其增长该因子。您正在尝试将列表或类似列表乘以浮点数,这是没有意义的。
  • 我假设你实际上并没有在做float(input('Wich one do you want to convert:eur/ars/mxn/pen/cop/brl')),因为这没有任何意义,在这种情况下你试图将一个字符串乘以一个浮点数,这又没有感觉。
  • 如果你试图将字符串转换为浮点数,这没有意义din=float(input('Wich one do you want to convert:eur/ars/mxn/pen/cop/brl'))
  • 那行也让我感到困惑。根据一个答案,我理解输入应该是像“eur”这样的字符串,但是float 有很大的误导性。

标签: python multiplication


【解决方案1】:

我之所以给出这个答案,是因为提供的另一个答案很危险,做事的方法不对,甚至不是解决问题的理想方法,而且会教给以后很难改掉的糟糕习惯。关于为什么eval really is dangerous 有一篇很棒的文章,这里也有其他缺点。

这样做的正确方法是首先创建一个字典,一个查找表,将我们的货币名称与我们的值对应起来:

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'

这很清楚问题是什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-24
    • 1970-01-01
    • 2013-06-04
    • 2010-12-30
    • 2012-10-09
    • 2012-09-16
    相关资源
    最近更新 更多