2016-10-20 2 views
0

내 프로그램에서 직원 급여를 문자열로주고 그 금액에 int를 곱하고 있습니다."float 유형"이 아닌 정수로 시퀀스를 곱할 수 없습니다.

TypeError: can't multiply sequence by non-int 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' 

답변

0

파이썬은 문자열을 숫자로 자동 변환하지 않습니다. 부동 소수점 또는 정수가되도록하려면 그렇게 말하십시오. 파이썬은 항상 문자열을 곱하는 문제가 없습니다. 문자열을 곱하면 그냥 반복 : 코드에서

>>> my_string = 'blah' 
>>> my_string * 2 
'blahblah' 

문제는 self.raise_amt는 플로트 것입니다. 십진수의 문자열을 반복하는 것은 의미가 없으므로 오류가 발생합니다.

당신이 그것을 얻을 때 pay을 float로 변환해야합니다. 즉 단순히 : float(pay) 당신의 __init__에 :

self.pay = float(pay) 

pay 인수가 유효한 문자열이 아닌,하지만 예상 할 필요가있는 경우이 오류가됩니다.

0

문제는 from_string하여 클래스를 생성 할 때 지불 변수가 여전히 문자열 것입니다. 생성자 변경을 고려하십시오.

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