在我的程序中,我给了员工薪水以及我将该金额乘以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'
答案 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}}参数不是有效的字符串,那么这将是错误的,但这应该是预期的。