我正在尝试创建一个程序,根据基值检查正整数,如果数字的所有数字严格小于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
有更简单的方法吗?我觉得这样做有一个更明显的方法,但我无法弄明白。
答案 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
。如果您没有返回False
,return 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)
不是一个完整的答案,而是一个提示,可以让你自己找到更好的答案。
您不需要额外的整数列表,您可以直接遍历python中的字符串。
如果您遇到不符合条件的数字,则立即返回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
这适用于负整数和正整数,其中严格比较各个数字的答案不会。