2016-10-20 1 views
0

Hier in meinem Programm habe ich Mitarbeiter zahlen in Zeichenfolge und ich multipliziere diesen Betrag mit int.Fehler erhalten "kann die Sequenz nicht mit Nicht-Int des Typs 'float' multiplizieren"?

erhalte eine Fehlermeldung:

TypeError: can't multiply sequence by non-int of type 'float'

Bitte hep mir dies bei der Fehlersuche aus.

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) 

Ausgang:

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' 

Antwort

0

Python konvertiert Strings nicht automatisch in Zahlen. Wenn Sie möchten, dass es ein Float oder eine ganze Zahl ist, müssen Sie dies sagen. Python hat jedoch nicht immer ein Problem mit der Multiplikation von Strings. Multipliziert man wiederholt einen String nur sie:

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

Das Problem in Ihrem Code ist, dass self.raise_amt ein Schwimmer ist. Es macht keinen Sinn, eine Zeichenkette eine Dezimalzahl zu wiederholen, damit Sie einen Fehler erhalten.

Was Sie brauchen, ist pay zu einem Float zu konvertieren, wenn Sie es bekommen. Das ist einfach: float(pay) in Ihrem __init__:

self.pay = float(pay) 

Dies wird Fehler, wenn das pay Argument keine gültige Zeichenfolge ist, aber das soll erwartet werden.

0

Das Problem ist, dass Ihr Pay-Variable ist immer noch eine Zeichenfolge, wenn Sie Ihre Klasse mit from_string zu schaffen. Erwägen Sie, Ihren Konstruktor zu ändern:

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