验证基数

时间:2016-04-09 18:10:16

标签: python

我正在尝试创建一个程序,根据基值检查正整数,如果数字的所有数字严格小于base,则返回True,否则返回false。我取得的一些成果是:

$('input[name=sexo][value="'+ data.Sexo +'"]').prop('checked', true);


$('#kelas').val( $( '#kelas option:contains("' + data.Destinasaun + '")' ).val() );

这些肯定是正确的,我已经制作了这个代码以确保它。问题在于,我不确定我是否以最佳方式接近它,因为我想找到一种更有效的方法来评估验证Base-n数字。这是:

    >>> base_and_number(12345, 2)
    False
    >>> base_and_number(12345, 8)
    True
    >>> base_and_number(9, 5)
    False
    >>> base_and_number(10110, 2)
    True

有更简单的方法吗?我觉得这样做有一个更明显的方法,但我无法弄明白。

8 个答案:

答案 0 :(得分:2)

尝试转换它并查看它是否失败。

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

演示:

>>> number = 456
>>> base = 7
>>> int(str(number), base)
237
>>> base = 3
>>> int(str(number), base)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 3: '456'

答案 1 :(得分:2)

这是一种方式:

def basecheck(number,base):
   return all([int(x) < base for x in str(number)])

答案 2 :(得分:2)

一个选项是:

def base_and_num(number, base):
    for i in str(number):
        if base <= int(i):
            return False
    return True

答案 3 :(得分:1)

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

 def base_and_num(number, base):
     return all([str(base)>digit for digit in str(number)]) 

使用ascii顺序与自然顺序兼容的事实。

答案 4 :(得分:1)

嗯..

def base_and_num(number, base):
    return all(int(digit) < base for digit in str(number))

答案 5 :(得分:1)

尝试对你的代码保持一定的真实性(我会用reduce做到这一点,但是,哦,我认为我们不应该在这里解释这种方法) 。

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

一旦你遇到大于return False的第一个数字,我会说base。如果您没有返回Falsereturn 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

答案 6 :(得分:1)

不是一个完整的答案,而是一个提示,可以让你自己找到更好的答案。

  1. 您不需要额外的整数列表,您可以直接遍历python中的字符串。

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

答案 7 :(得分:1)

另一种方法是让Python为您完成工作。将数字转换为字符串,然后尝试使用指定的基数将其转换回整数。如果任何数字等于或超过基数,Python将抛出ValueError

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

这适用于负整数和正整数,其中严格比较各个数字的答案不会。