我正在编写一个python程序,用于从任何数字基数转换为任何数字基数。我的代码如下
num = raw_input("Please enter a number: ")
base = int(raw_input("Please enter the base that your number is in: "))
convers = int(raw_input("Please enter the base that you would like to convert to: "))
if (64 < convert < 2 or 64 < base < 2):
print "Error! Base must be between 2 and 32."
sys.exit()
symtodig = {
'0': 0,
'1': 1,
'2': 2,
'3': 3,
'4': 4,
'5': 5,
'6': 6,
'7': 7,
'8': 8,
'9': 9,
'A': 10,
'B': 11,
'C': 12,
'D': 13,
'E': 14,
'F': 15,
'G': 16,
'H': 17,
'I': 18,
'J': 19,
'K': 20,
'L': 21,
'M': 22,
'N': 23,
'O': 24,
'P': 25,
'Q': 26,
'R': 27,
'S': 28,
'T': 29,
'U': 30,
'V': 31,
'W': 32,
'X': 33,
'Y': 34,
'Z': 35,
'a': 36,
'b': 37,
'c': 38,
'd': 39,
'e': 40,
'f': 41,
'g': 42,
'h': 43,
'i': 44,
'j': 45,
'k': 46,
'l': 47,
'm': 48,
'n': 49,
'o': 50,
'p': 51,
'q': 52,
'r': 53,
's': 54,
't': 55,
'u': 56,
'v': 57,
'w': 58,
'x': 59,
'y': 60,
'z': 61,
'!': 62,
'"': 63,
'#': 64,
'$': 65,
'%': 66,
'&': 67,
"'": 68,
'(': 69,
')': 70,
'*': 71,
'+': 72,
',': 73,
'-': 74,
'.': 75,
'/': 76,
':': 77,
';': 78,
'<': 79,
'=': 80,
'>': 81,
'?': 82,
'@': 83,
'[': 84,
'\': 85,
']': 86,
'^': 87,
'_': 88,
'`': 89,
'{': 90,
'|': 91,
'}': 92,
'~': 93}
digits = 0
for character in num:
assert character in symtodig, 'Found unknown character!'
value = symtodig[character]
assert value < base, 'Found digit outside base!'
digits *= base
digits += value
digtosym = dict(map(reversed, symtodig.items()))
array = []
while digits:
digits, value = divmod(digits, convers)
array.append(digtosym[value])
answer = ''.join(reversed(array))
print "Your number in base", base, "is: ", answer
我的代码工作得很好,但是没有使用
if (64 < convert < 2 or 64 < base < 2):
print "Error! Base must be between 2 and 32."
sys.exit()
希望将它们带回到基变量的输入中,而不是退出程序。我是python的新手,不知道如何做这样的事情。请帮助。
while True:
try:
convert = int(raw_input('Convert: '))
base = int(raw_input('Base: '))
if (64 < convert < 2 or 64 < base < 2):
print "Error! Base must be between 2 and 32."
continue
break
except Exception, e:
print '>> Error: %s' % e
通用模板:
while True:
# get user input
# ...
if valid_input():
break
例如:def get_int(prompt, lo=None, hi=None):
while True:
try:
n = int(raw_input(prompt))
except ValueError:
print("expected integer")
else: # got integer, check range
if ((lo is None or n >= lo) and
(hi is None or n <= hi)):
break # valid
print("integer is not in range")
return n
一种简单的方法是在选择的开始添加一个循环:如果选择有效,它会转义,如果选择不正确则会迭代(而不是sys.exit(),我相信这是您想要避免的)。
第一部分可以是:
selected = False
while not selected:
num = raw_input("Please enter a number: ")
base = int(raw_input("Please enter the base that your number is in: "))
convert = int(raw_input("Please enter the base that you would like to convert to: "))
if (64 < convert or convert < 2 or 64 < base or base < 2):
print "Error! Base must be between 2 and 32."
else:
selected = True
另外,请注意我将条件改为:
if (64 < convert or convert < 2 or 64 < base or base < 2):