双基回文数
编写一个程序来检查一个数字是否是双基回文数。
回文是指从前往后读和从后往前读都一样的字母、数字的序列。
双基回文数是指在十进制和二进制表示中都是回文的数字。
例如:
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))
大家帮我看一下这个第二种和第三种哪里错了。