双基回文数
编写一个程序来检查一个数字是否是双基回文数。
回文是指从前往后读和从后往前读都一样的字母、数字的序列。
双基回文数是指在十进制和二进制表示中都是回文的数字。
例如:
585 = 1001001001
是一个双基回文,其二进制是回文形式,十进制也是回文形式。
- 定义函数
check_double_base_palindrome()
,参数为整数。 - 在函数内,检查数字的十进制和二进制形式是否都是回文。
- 如果是双基回文,返回
True
,否则返回False
。
示例输入
313
示例输出
True
我用了几种方法去做,但是只有一种是正确的,大家帮忙看一下
(1)第一种是正确的
def check_double_base_palindrome(number): num=bin(number) lst1=list(int (i) for i in str(number)) lst2=list(int(j) for j in str(num)[2:]) new_lst1=lst1[::-1] new_lst2=lst2[::-1] if lst1==new_lst1 and lst2==new_lst2: return True else: return False number = int(input()) print(check_double_base_palindrome(number))
(2)然后大家看一下第二种我感觉想法应该没错,但是一直输出都是False
def check_double_base_palindrome(number): num=bin(number) str1=str(number) str2=str(num)[2:] if number!=int(str(number)[::-1]): return False elif str(num)!=str(num)[::-1]: return False else: return True number = int(input()) print(check_double_base_palindrome(number))
(3)还有第三种,也是一直输出为False。
def check_double_base_palindrome(number): num=bin(number) str1=str(number) str2=str(num)[2:] n1=0 n2=0 for i in range(len(str1)): if str1[i]==str1[len(str1)-i-1]: n1=1 else:n1=0 for j in range(len(str2)): if str2[j]==str2[len(str2)-j-1]: n2=1 else: n2=0 if n1+n2==2: return True else: return False number = int(input()) print(check_double_base_palindrome(number))
大家帮我看一下这个第二种和第三种哪里错了。