如果python中有错误,请让用户重新输入输入

时间:2013-03-04 18:54:48

标签: python input user-input base-conversion

我正在使用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()

id喜欢将它们带回基础变量的输入而不是退出程序。 我是python的新手,并不知道如何做这样的事情。请帮忙。

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

一般模板:

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

答案 2 :(得分:0)

一个简单的方法是简单地在选择的开头添加一个循环:它在有效选择的情况下转义并在它不正确时迭代(而不是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):