python小白求救!全RE

P1015 [NOIP1999 普及组] 回文数

zilvwuqiljz @ 2022-03-27 21:01:49

def N_M_add(N, M):
    """
    回文数加减器:N是进制数,M是要求的数  2<=N<=10
    N为int型,M为str型
    """
    flag = 0
    lenM = len(M)  # M的长度
    M_re = M[::-1]  # M的逆序数
    s_list = []
    for i in range(1, lenM + 1):
            t = 0
            k = int(M_re[-i]) + int(M[-i]) + flag
            ys = k % N
            if k >= N:
                flag = 1
            else:
                flag = 0
            s_list.insert(-t, '{}'.format(ys))  # 插到列表后面
            if (i == lenM and flag == 1):
                s_list.insert(0, '1')  # 插到列表后面
            t = t + 1
    s = ''.join(s_list)
    return s

i = 1
N = input()  # N是进制数
M = input()  # M是要求的数
a = []
while (1):
    suc_flag = 1
    if N == '16':
        M1 = str(int("{}".format(M), 16))  # 先把这个数转成10进制
        conf = N_M_add(10, M1)
        conf_1 = hex(int(conf))  # 再把结果转回16进制
        conf_1 = conf_1[-2:]  # 去除前缀的0x
        if conf_1 == conf_1[::-1]:
            break
        else:
            i = i + 1
            M = conf_1

        if i > 30:
            suc_flag = 0
            i = 0
            break
    else:
        conf = N_M_add(int(N), M)
        if conf == conf[::-1]:
            break
        else:
            i = i + 1
            M = conf

        if i > 30:
            suc_flag = 0
            i = 0
            break

if (suc_flag):
    print('STEP={}'.format(i))
else:
    print('Impossible!')

怎么把最后一个回车读入去掉啊啊啊啊啊,我太菜了....


by Terrible @ 2022-03-27 21:08:17

@zilvwuqiljz

N=input().strip()
M=input().strip()

strip是字符串型的一个方法,将头尾的空白字符去掉。括号中也可放入特性的字符,它可以将首位特定字符去掉。

与它这一方法类似的有 lstrip,去除字符串头部开始的空白字符,rstrip,去除字符串尾部开始的空白字符。

解释器中示例:

>>> 'qwq'.strip('q')
'w'
>>> 'qwq'.lstrip('q')
'wq'
>>> 'qwq'.rstrip('q')
'qw'
>>>

即便是去掉末尾空白字符,你的程序好像也仍然有点小毛病。


by zilvwuqiljz @ 2022-03-27 21:32:38

@Terrible 蟹蟹大佬!确实,我改了之后只有75分第二个错了,大佬可以帮忙看看小毛病在哪吗


by zilvwuqiljz @ 2022-03-27 21:46:43

@Terrible 噢噢 应该是十六进制那边计算出问题了 我知道了,再次蟹蟹大佬


by Terrible @ 2022-03-27 21:50:09

@zilvwuqiljz

你这个写得有点啰嗦啊,没有发挥好Python简洁的优势。

conf_1 = conf_1[-2:] # 去除前缀的0x

去除前缀0x应该是 conf_1 = conf_1[2:]

其它的错我就不去找了(我太懒了),你看一下我写的,应该比你的简洁一些。

def basestr(base=int,num=int):#将int型转化成对应进制数的str型
    if base==16:
        return hex(num)[2:]
    s=""
    while num:
        s=str(num%base)+s #num%base可以说是base进制下的个位
        num//=base #num除以base(整除)
        #相当于把所有位置的数右移了,例如:
        #178//10=17,把个位舍去,之前的位右移
    return s

a=int(input())# 输入进制,int自动去掉空白字符
b=int(input(),a)# int(str1,base)可以将str1以base进制转化成int型
step=0
while True:# while True: 需要break否则程序无法停止
    if step==30 :# 超过步数
        print("Impossible!")
        break
    s=basestr(a,b) # s是a进制数的str型
    s1=s[::-1] # s1是反转了的s
    if s==s1 :# 是回文数
        print("STEP=%d"%step)
        break
    b+=int(s1,a)
    step+=1

by zilvwuqiljz @ 2022-03-27 21:56:33

@Terrible nb 我再去研究研究


|