将用户输入添加到基本转换器 class
Adding user input to base converter class
所以我正在开发一个转换程序,你有一个电流和一个基础,你应该能够将你的电流和基础转换为 "decimal, octal etc"。我基本上已经完成了程序,但我对如何实现最后一种方法感到困惑,该方法试图为新的当前或基础获取用户输入,并将其更新为新的当前和基础。
谢谢大家!
class numberConverter:
def __init__(self, current=0, base=10):
self.__current = current
self.__base = base
def print(self):
print("Current set to:",
self.__current, "Base set to:", self.__base)
def menu(self):
return("\n'S'et\n'C'urrent\n'B'inary\n'H'ex\n'O'ctal\n'D'ecimal\n'q'uit: ")
#Converts to Hexidecimal
def convHex(self):
print("Hex Conversion Commencing")
print("Converting:", self.__current, "Base", self.__base, "to Base 16")
self.__current = format(int(str(self.__current), self.__base), '02X')
self.__base = 16
self.print()
#Converts to Octal
def convOct(self):
print("Octal Conversion Commencing")
print("Converting:", self.__current, "Base", self.__base, "to Base 8")
self.__current = format(int(str(self.__current), self.__base), '02o')
self.__base = 8
self.print()
#Converts to Decimal
def convDec(self):
print("Decimal Conversion Commencing")
print("Converting:", self.__current, "Base", self.__base, "to Base 10")
self.__current = format(int(str(self.__current), self.__base))
self.__base = 10
self.print()
#Converts to Binary
def convBinary(self):
print("Binary Conversion Commencing")
print("Converting:", self.__current, "Base", self.__base, "to Base 2")
self.__current = format(int(str(self.__current), self.__base), '02b')
self.__base = 2
self.print()
#Change the current value or base
#This is the section I am trying to work on
def setCurrent(self):
userInput = str(input("Set 'C'urrent or 'B'ase: "))
if userInput.upper() == "C":
print(input("Enter new current value: "))
elif userInput.upper() == "B":
print(input("Enter new base value: "))
num1 = numberConverter(14,10)
select = ""
while select !='q':
select = input(num1.menu())
if select == "C":
num1.print()
if select == "H":
num1.convHex()
if select == "O":
num1.convOct()
if select == "D":
num1.convDec()
if select == "B":
num1.convBinary()
if select == "S":
num1.setCurrent()
这里的主要困难似乎是输入过滤。你应该阅读 this question;它提供了一般如何过滤输入的好例子。
在你的情况下,你可以实现类似的东西:
def setCurrent(self):
userInput = str(input("Set 'C'urrent or 'B'ase: "))
if userInput.upper() == "C":
while True:
try:
value = int(input("Enter new current value: "))
break
except ValueError:
print("Invalid number!")
self.__current = value
elif userInput.upper() == "B":
while True:
base = input(self.menu())
if base in "HODB":
break
else:
print('Base must be "H", "O", "D", or "B"!')
if base == "H":
self.convHex()
elif base == "O":
self.convOct()
elif base == "D":
self.convDec()
elif base == "B":
self.convBinary()
您还需要更新 self.menu()
;我会将字符串添加到此方法中,而不是将其作为单独的方法保留。
你应该阅读 PEP-8; it's the standard style guide for Python, and it can make your code easier for others to read and use. I would also consider posting your (finished) code on CodeReview.SE (make sure to read the guidelines for what's on-topic);您可以对当前代码进行许多其他改进,您会学到很多东西。
所以我正在开发一个转换程序,你有一个电流和一个基础,你应该能够将你的电流和基础转换为 "decimal, octal etc"。我基本上已经完成了程序,但我对如何实现最后一种方法感到困惑,该方法试图为新的当前或基础获取用户输入,并将其更新为新的当前和基础。
谢谢大家!
class numberConverter:
def __init__(self, current=0, base=10):
self.__current = current
self.__base = base
def print(self):
print("Current set to:",
self.__current, "Base set to:", self.__base)
def menu(self):
return("\n'S'et\n'C'urrent\n'B'inary\n'H'ex\n'O'ctal\n'D'ecimal\n'q'uit: ")
#Converts to Hexidecimal
def convHex(self):
print("Hex Conversion Commencing")
print("Converting:", self.__current, "Base", self.__base, "to Base 16")
self.__current = format(int(str(self.__current), self.__base), '02X')
self.__base = 16
self.print()
#Converts to Octal
def convOct(self):
print("Octal Conversion Commencing")
print("Converting:", self.__current, "Base", self.__base, "to Base 8")
self.__current = format(int(str(self.__current), self.__base), '02o')
self.__base = 8
self.print()
#Converts to Decimal
def convDec(self):
print("Decimal Conversion Commencing")
print("Converting:", self.__current, "Base", self.__base, "to Base 10")
self.__current = format(int(str(self.__current), self.__base))
self.__base = 10
self.print()
#Converts to Binary
def convBinary(self):
print("Binary Conversion Commencing")
print("Converting:", self.__current, "Base", self.__base, "to Base 2")
self.__current = format(int(str(self.__current), self.__base), '02b')
self.__base = 2
self.print()
#Change the current value or base
#This is the section I am trying to work on
def setCurrent(self):
userInput = str(input("Set 'C'urrent or 'B'ase: "))
if userInput.upper() == "C":
print(input("Enter new current value: "))
elif userInput.upper() == "B":
print(input("Enter new base value: "))
num1 = numberConverter(14,10)
select = ""
while select !='q':
select = input(num1.menu())
if select == "C":
num1.print()
if select == "H":
num1.convHex()
if select == "O":
num1.convOct()
if select == "D":
num1.convDec()
if select == "B":
num1.convBinary()
if select == "S":
num1.setCurrent()
这里的主要困难似乎是输入过滤。你应该阅读 this question;它提供了一般如何过滤输入的好例子。
在你的情况下,你可以实现类似的东西:
def setCurrent(self):
userInput = str(input("Set 'C'urrent or 'B'ase: "))
if userInput.upper() == "C":
while True:
try:
value = int(input("Enter new current value: "))
break
except ValueError:
print("Invalid number!")
self.__current = value
elif userInput.upper() == "B":
while True:
base = input(self.menu())
if base in "HODB":
break
else:
print('Base must be "H", "O", "D", or "B"!')
if base == "H":
self.convHex()
elif base == "O":
self.convOct()
elif base == "D":
self.convDec()
elif base == "B":
self.convBinary()
您还需要更新 self.menu()
;我会将字符串添加到此方法中,而不是将其作为单独的方法保留。
你应该阅读 PEP-8; it's the standard style guide for Python, and it can make your code easier for others to read and use. I would also consider posting your (finished) code on CodeReview.SE (make sure to read the guidelines for what's on-topic);您可以对当前代码进行许多其他改进,您会学到很多东西。