在我的程序中,我以字符串形式给出了员工工资,并将其乘以int。
出现错误:
TypeError: can't multiply sequence of type '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'
Python不会自动将字符串转换为数字。如果您希望它是浮点数或整数,则需要这样说。不过,Python在字符串相乘时并不总是有问题。将字符串相乘只是重复它:
>>> my_string = 'blah'
>>> my_string * 2
'blahblah'
代码中的问题是self.raise_amt
是浮点数。以十进制数重复一个字符串是没有意义的,所以你会得到一个错误。
你需要的是转换pay
为浮点数,当你得到它。这就是:float(pay)
在你的__init__
:
self.pay = float(pay)
如果pay
参数不是一个有效的字符串,这将会出错,但这应该是预料之中的。
问题是,您的薪酬变量仍然是一个字符串时,创建您的类from_string。考虑修改构造函数:
def __init__(self,first,last,pay):
self.first=first
self.last = last # instance variables
self.pay = int(pay)