Kai丶0727 2021-06-07 18:37 采纳率: 50%
浏览 289
已采纳

关于Python输出一段字符串最大数字串的问题

题目如下:输入一段字符串,返回此段字符串中最大的数字串,并输出最大字符的个数。

 

我的代码如下:

ls_s1=[]
n=0
list1=[]
list2=[]
s2=input("Please enter a string:")
for i in range(0,len(s2)):
    if s2[i].isdigit()==True:
        n+=1
        ls_s1.append(s2[i])
    
    else:
        list1.append(n)
        result=''.join(ls_s1)
        list2.append(result)
        n=0
        ls_s1=[]

n=max(list1)
s_max=max(list2,key=len,default='')

print(n)
print(s_max)

但是我这个代码有BUG,即最后一个字符不为字母时无法正确输出。

我在网上找到了如下答案:

# coding=utf-8
import sys

def solve():
    for line in sys.stdin:
        # 字符串转列表进行遍历
        str = list(line)
        count = 0
        length = 0
        temp = []
        dig = []
        for i in range(str.__len__()):
            if (str[i] >= '0' and str[i] <= '9'):
                # 数字加一
                count += 1
                temp.append(str[i])
               
            else:
                if count >= length:
                    # 数字串大于之前的,由于题目要求长度相等输出最后一串,所以这里要用大于等于
                    length = count
                    count = 0
                    dig = temp.copy()
                    temp = []
                else:
                    # 数字串较短则清空
                    temp = []
                    count = 0
        # 结果输出
        result = ''.join(dig)
        print("%s,%d" % (result, length))

if __name__ == "__main__":
    solve()
我感觉这个代码和我遇到的问题一样,但是它却能进行正确输出。

例如,输入字符串123abc12345

在我的代码中,当进行到字符串中最后一个字符中,即5时,无法进入下一个else,即无法刷新列表

但在第二个代码中,却能进行正确输出,我在第二个if语句加入print(dig)时,发现其中存储了12345,最后一个位数字,不能if和else都满足吧?这让我有些矛盾。

求教各位,1.我的代码在现有的形式下如何修改;2.第二个代码中最后字符5怎么进入else循环的。

 

  • 写回答

2条回答 默认 最新

  • 关注

    这个用正则表达式比较方便处理

    你的代码中要在循环结束后判断下if n>0:就是最后一个数字串没有添加到列表中,则需要再执行一下else块的代码,把最后一个数字串添加到列表中

    ls_s1=[]
    n=0
    list1=[]
    list2=[]
    s2=input("Please enter a string:")
    for i in range(0,len(s2)):
        if s2[i].isdigit()==True:
            n+=1
            ls_s1.append(s2[i])
    
        else:
            list1.append(n)
            result=''.join(ls_s1)
            list2.append(result)
            n=0
            ls_s1=[]
    if n>0:
            list1.append(n)
            result=''.join(ls_s1)
            list2.append(result)
            n=0
            ls_s1=[]
    
    n=max(list1)
    s_max=max(list2,key=len,default='')
    
    print(n)
    print(s_max)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 abaqus里的python算法
  • ¥15 单细胞测序筛选簇中基因
  • ¥100 如何在思科模拟器中进入CEF模式
  • ¥15 Simulink 仿真如何使用MATLAB function模块获取到仿真过程中某一仿真时刻输入到模块的函数的值?
  • ¥50 关于#微信小程序#的问题:微信小程序支持h5实现webrtc h264 h265低延迟传输渲染,能付费帮我们解决一下吗
  • ¥20 请问ansys License manager 这个问题如何解决
  • ¥15 memory.limit()' is no longer supported
  • ¥15 基于stm32f4产生两路pwm信号并可由串口通信调节
  • ¥15 C++/QT设置函数调用条件(多个功能调用同一,且各自调用条件不同)
  • ¥15 UE5样条线生成的网格UV问题