Python如何实现数字逆序,但不改变正负号,0出现在前面就省略,比如输入-5670,输出-765
def reverse_num(num):
"""不改变正负号,逆序输出"""
result = ''
num = str(num)
if num[0] in ['+', '-']:
result += num[0]
num = num[1:]
if num[-1] == '0':
result += num[len(num) -2::-1]
else:
result += num[::-1]
return eval(result)
print(reverse_num(-5670))
print(reverse_num(5670))
print(reverse_num(+5670))
print(reverse_num(+123))
不知道你这个问题是否已经解决, 如果还没有解决的话:有帮助的话,请点采纳该答案~
import re
#匹配所有
p = re.compile('...')
#匹配三个字符
p = re.compile('.(3)')
print(p.match('bat'))
p = re.compile('....-..-..')
print(p.match('2018-05-10'))
print(r'\nx\n')
p = re.compile(r'(\d+)-(\d+)-(\d+)')
print(p.match('2018-05-10').group(1))
print(p.match('2018-05-10').group())
print(p.match('2018-05-10').groups())
year,month,day = p.match('2010-05-10').groups()
print(year)
print(month)
print(day)
结果:
None
<re.Match object; span=(0, 10), match='2018-05-10'>
\nx\n
2018
2018-05-10
('2018', '05', '10')
2010
05
10
进程已结束,退出代码为 0
解决方案:
首先需要编写一个判断素数的函数isPrime:
def isPrime(n):
if n<=1:
return False
for i in range(2,int(n**0.5+1)):
if n%i==0:
return False
return True
其中先判断n是否小于等于1,如果是就不是素数,然后从2到sqrt(n)+1进行循环,如果n能被除以i整除,说明n不是素数,否则就是素数。
接着编写一个逆序排列的函数reverseNumber:
def reverseNumber(n):
if n<0:
return -reverseNumber(-n)
str_n = str(n)
i = 0
j = len(str_n)-1
while i<j and str_n[i]=='0':
i+=1
str_n = str_n[i:][::-1]
return int(str_n)
首先判断n是否是负数,如果是就先对其取绝对值再进行逆序排列,最后再加上符号即可。
然后将n转换成字符串,用双指针分别从头和尾开始遍历,一旦头指针i指向的数字为0就继续往后移动,以此忽略前导零。然后再对去掉前导零的数字进行逆序排列并转换成整数返回即可。
最后将以上两个函数集成到主程序中:
N = int(input())
def isPrime(n):
if n<=1:
return False
for i in range(2,int(n**0.5+1)):
if n%i==0:
return False
return True
def reverseNumber(n):
if n<0:
return -reverseNumber(-n)
str_n = str(n)
i = 0
j = len(str_n)-1
while i<j and str_n[i]=='0':
i+=1
str_n = str_n[i:][::-1]
return int(str_n)
for n in range(1,N+1):
if isPrime(n) and reverseNumber(n) == n:
print(n)
输入一个正整数N后,输出1到N中所有既是素数又是回文数的数,每行一个。
思路总结:首先需要分别编写判断素数和逆序排列的函数,然后将两个函数集成到主程序中根据题目要求输出结果即可。