得到错误"不能将序列乘以非整数类型' float'"?

时间:2016-10-20 03:59:56

标签: python-3.x

在我的程序中,我给了员工薪水以及我将该金额乘以int。

收到错误:

  

TypeError:不能将序列乘以非int类型' float'

请帮我解决这个问题。

class Employee:

    raise_amt=1.2 # class variable

    def __init__(self,first,last,pay): 
        self.first=first
        self.last = last # instance variables
        self.pay = pay
        self.email = first+"."+last+"@company.com"

    def fullname(self):
        return '{}{}'.format(self.first,self.last)

    def apply_raise(self):
        self.pay= int(self.pay * self.raise_amt)


    @classmethod # alter the raise amt 
    def set_raise_amt(cls,amount):
        cls.raise_amt=amount

    @classmethod 
    def from_string(cls,emp_str):
        first,last,pay= emp_str.split('-')
        return cls(first,last,pay)

emp_str_1='Nanda-kishor-90000' #values are in string
new_emp_1=Employee.from_string(emp_str_1)

Employee.set_raise_amt(2.2)


print(new_emp_1.raise_amt)
print(new_emp_1.pay)
new_emp_1.apply_raise()
print('after raise:',new_emp_1.pay)

输出:

Traceback (most recent call last):
  File "C:/Users/nanda.v/PycharmProjects/Python basics/practice continue and break statements.py", line 39, in <module>
    new_emp_1.apply_raise()
2.2
  File "C:/Users/nanda.v/PycharmProjects/Python basics/practice continue and break statements.py", line 19, in apply_raise
    self.pay= int(self.pay * self.raise_amt)
90000
TypeError: can't multiply sequence by non-int of type 'float'

2 个答案:

答案 0 :(得分:0)

问题是在使用from_string创建类时,您的pay变量仍然是一个字符串。考虑更改构造函数:

def __init__(self,first,last,pay): 
    self.first=first
    self.last = last # instance variables
    self.pay = int(pay)

答案 1 :(得分:0)

Python不会自动将字符串转换为数字。如果你想要它是浮点数或整数,你需要这样说。但是,Python并不总是存在乘法字符串的问题。乘以一个字符串只是重复它:

self.raise_amt

代码中的问题是pay是一个浮点数。重复一个十进制数字的字符串是没有意义的,所以你得到一个错误。

您需要的是在获得它时将float(pay)转换为浮点数。这只是:__init__中的self.pay = float(pay)

pay

如果{{1}}参数不是有效的字符串,那么这将是错误的,但这应该是预期的。

相关问题