如果python中有错误,要求用户重新输入



我正在编写一个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):

相关内容

  • 没有找到相关文章

最新更新