Таким образом, эта функция принимает входные данные от пользователя и преобразует их вход в значение. Например, если они помещаются в 1k, выход будет 1000. Я хочу иметь возможность вернуться назад. Скажите, если бы у меня было значение 325000, я хочу изменить это на 325k. Любые идеи о том, как я могу это достичь?Изменение номеров на буквы в Python
class Parsing:
def __init__(self, instring):
self.instring = instring
def valueParsing(self):
self.instring = self.instring.strip()
self.parsedString = ''
self.scalerDict = {'K': 1000, 'MEG': 1000000, 'G': 1000000000, 'M': 0.001, 'U': 0.000001, 'N': 0.000000001, 'P': 0.000000000001}
self.scaler = 1.0
self.stringCounter = 0
self.errorflag = False
self.Parsedvalue = 0.0
self.inStringLength = len(self.instring)
for self.stringCounter in range (self.inStringLength):
if ((self.instring[self.stringCounter].upper()) == 'K'):
self.scaler = self.scalerDict['K']
elif ((self.instring[self.stringCounter].upper()) == 'G'):
self.scaler = self.scalerDict['G']
elif ((self.instring[self.stringCounter].upper()) == 'U'):
self.scaler = self.scalerDict['U']
elif ((self.instring[self.stringCounter].upper()) == 'N'):
self.scaler = self.scalerDict['N']
elif ((self.instring[self.stringCounter].upper()) == 'P'):
self.scaler = self.scalerDict['P']
elif ((self.instring[self.stringCounter].upper()) == 'M'):
if (((self.instring.upper()).count('MEG'))):
self.scaler = self.scalerDict['MEG']
else:
self.scaler = self.scalerDict['M']
elif ((self.instring[ self.stringCounter ].upper()) == 'F'):
break
elif ((self.instring[ self.stringCounter ].upper()) == 'W'):
break
elif ((self.instring[ self.stringCounter ].upper()) == 'S'):
break
elif ((self.instring[ self.stringCounter ].upper()) == '%'):
break
elif ((self.instring[ self.stringCounter ].upper()) == 'V'):
break
elif ((self.instring[ self.stringCounter ].upper()) == 'A'):
break
elif ((self.instring[ self.stringCounter ].upper()) == 'H'):
break
elif ((self.instring[ self.stringCounter ].upper()) == 'Z'):
break
elif ((self.instring[ self.stringCounter ]) == '.'):
self.parsedString = self.parsedString + self.instring[ self.stringCounter ]
elif (self.instring[self.stringCounter].isdigit()):
if(int(self.instring[self.stringCounter]) >= 0):
if(int(self.instring[self.stringCounter]) <= 9):
self.parsedString = self.parsedString + self.instring[self.stringCounter]
else:
self.errorflag = True
break
else:
self.errorflag = True
print('Invalid input, Try again.')
if (self.errorflag):
self.parsedvalue = -1
else:
self.parsedvalue = long(self.parsedString)*self.scaler
return self.parsedvalue
print '1. Resistors in series\n',\
'2. Resistors in Parallel\n',\
'3. Voltage Divider\n'
iput = int(input("Enter your choice: "))
if iput == 1:
r1 = raw_input("Enter first resistor:")
r2 = raw_input("Enter second resistor:")
R1 = Parsing(r1)
R2 = Parsing(r2)
req = R1.valueParsing() + R2.valueParsing()
print "The value of the series resistors is %s." % req
почему бы не хранить self.instring [self.stringCounter] .upper() в переменной? ;-) Сделайте свой код легким для чтения и не позволяйте python выполнять одну и ту же вещь в течение более ... Это поможет вам и другим пользователям прочитать ваш код. –
Ваш класс должен действительно быть функцией. Он имеет только два метода, один из которых - '__init__'. См. «[Прекратить писать классы] (https://www.youtube.com/watch?v=o9pEzgHorH0)». Это также спасло бы от типизации 'self'. :-) –
Работа с picoOhms? Мы не играем с меньшим, чем единица Ом, очень часто, но picoOhms, я думаю, что он будет намного менее устойчив, чем большинство кабелей и электронных следов, которые мы можем найти, нет? – BriceP