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