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

关于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条)

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?