检查给定基数中的数字表示是否有效

时间:2014-06-20 03:51:30

标签: python numbers base representation

我写了这段代码,检查一个数字是否在给定的基数中正确表示。对于所有无效的情况,它给出了错误,但对于真正的情况,它表示字符串索引超出范围。

def check(n,a,i=0):
    if int(n[i])>=a :
        return False
    else:
        return check(n,a,i+1)   
n = str(input('enter no:'))
a =int(input('enter base:'))
print(check(n,a,i=0))  

3 个答案:

答案 0 :(得分:0)

正如@ooga指出的那样,你需要检查i何时大于你的号码长度,你可以这样做:

def check(n,a,i=0):
    if len(n) <= i:
        return True
    if int(n[i])>=a :
        return False
    else:
        return check(n,a,i+1)   

n = str(input('enter no:'))
a = int(input('enter base:'))

print(check(n,a,i=0))  

答案 1 :(得分:0)

如果可以检查10以上的基数会更好。像这样:

import string

def check(num, base, i = 0):
    if i >= len(num):
        return True
    if not num[i].isdigit():
        val = string.ascii_lowercase.find(num[i].lower())
        if val == -1 or val + 10 >= base:
            return False
    elif int(num[i]) >= base:
        return False
    return check(num, base, i + 1)

while True:
    num = raw_input('Enter number: ')
    if len(num) == 0: break # null string breaks
    base = int(raw_input('Enter base: '))
    print(check(num, base))

答案 2 :(得分:0)

pythonic方式:

def is_base_x(num_string, base):
    for single_char in num_string:
        if int(single_char) >= int(base):
            return False
    return True