Python 验证基数

Python 验证基数,python,Python,我正在尝试制作一个程序,用一个基值检查一个正整数,如果该数字的所有数字都严格小于基值,则返回True,否则返回false。我取得的一些成果包括: >>> base_and_number(12345, 2) False >>> base_and_number(12345, 8) True >>> base_and_number(9, 5) False >>> base_a

我正在尝试制作一个程序,用一个基值检查一个正整数,如果该数字的所有数字都严格小于基值,则返回True,否则返回false。我取得的一些成果包括:

    >>> base_and_number(12345, 2)
    False
    >>> base_and_number(12345, 8)
    True
    >>> base_and_number(9, 5)
    False
    >>> base_and_number(10110, 2)
    True
这些都是绝对正确的,我编写了这段代码来确保这一点。问题是,我不确定我是否用最好的方法来处理它,因为我想找到一种更有效的方法来评估以验证Base-n数字。这是:

    def base_and_num(number, base):
        int_list = []
        for digit in str(number):
            int_list.append(int(digit))

        result = []
        for i in range(len(int_list)):
            if int_list[i] < base:
                result.append(int_list[i])

        if len(result) == len(str(number)):
            return True
        else:
            return False
def base_和_num(数字、基数):
int_list=[]
对于str中的数字(数字):
int_list.append(int(数字))
结果=[]
对于范围内的i(len(int_列表)):
如果int_列表[i]

有没有更简单的方法?我觉得有一种更明显的方法可以做到这一点,但我想不出来

您可以使用理解列表简化代码:

 def base_and_num(number, base):
     return all([str(base)>digit for digit in str(number)]) 
使用ascii顺序与自然顺序兼容的事实。

很好

def base_and_num(number, base):
    return all(int(digit) < base for digit in str(number))
def base_和_num(数字、基数):
返回全部(int(digit)
尝试转换它,看看是否失败

try:
    int(str(number), base)
except ValueError:
    print('{} is invalid base for {}'.format(base, number))
演示:

>编号=456
>>>基数=7
>>>整数(str(数字),基数)
237
>>>基数=3
>>>整数(str(数字),基数)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ValueError:基为3的int()的文本无效:“456”

尽量保持对您的代码的真实性(我会使用
减少
,但是,哦,我认为我们不应该在这里解释这种方法)

是的,有;首先,您的
else:continue
是多余的。你可以省略它

我会说,
一旦遇到大于
基数的第一个数字,就返回False
。如果没有返回
False
则返回True
。差不多

def base_and_num(number, base):
    number = int(number) ## making sure we don't break on floats, strings etc.
    while number != 0:
        digit = number % 10 #modulo
        if digit > base:
            return False #function exits here!
        number = number / 10 #integer division
    return True
这里有一个方法:

def basecheck(number,base):
   return all([int(x) < base for x in str(number)])
def基本检查(数字、基本):
返回全部([int(x)
这不是一个完整的答案,而是一个可以让你自己找到更好答案的提示

  • 您不需要额外的整数列表,可以在python中直接迭代字符串

  • 遇到不符合条件的数字时,立即返回false。如果没有,则返回true

  • 一种选择是:

    def base_and_num(number, base):
        for i in str(number):
            if base <= int(i):
                return False
        return True
    
    def base_和_num(数字、基数):
    对于str中的i(编号):
    
    如果base,另一种方法是让Python为您完成工作。将数字转换为字符串,然后尝试使用指定的基数将其转换回整数。如果任何数字等于或超过基数,Python将抛出一个
    ValueError

    def base_and_number(number, base):
        try:
            int(str(number), base)
        except ValueError:
            return False
        else:
            return True
    
    这适用于负整数和正整数,而严格比较单个数字的答案则不适用

    def base_and_number(number, base):
        try:
            int(str(number), base)
        except ValueError:
            return False
        else:
            return True