鱼C论坛

 找回密码
 立即注册
查看: 2394|回复: 30

[技术交流] Python:每日一题 184

[复制链接]
发表于 2018-7-14 20:44:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 冬雪雪冬 于 2018-7-18 20:22 编辑

我们的玩法做了一下改变:

1. 楼主不再提供答案。
2. 请大家先独立思考,再参考其他鱼油的解答,这样才有助于自己编程水平的提高。开始阶段是看不到其他人的回帖的,等答题完成,开始评分时再取消限制。
3. 鼓励大家积极答题,奖励的期限为出题后24小时内。
4. 根据答案的质量给予1~3鱼币的奖励。

题目:
编写一个函数,参数是一个数字组成的字符串,返回从左到右数字都是增加的最长的子字符串。
例如参数为:
'89628412246737623568992'
则最长的子字符串为'235689'
注:'122467'因为2和2不是增加的所以不算,而'62356899'最后的9也不能算。如果有多个长度相同的子字符串则返回第一个,如果找不到这样的字符串则返回None。
  1. def fun184(string):
  2.     #你的程序

  3. print(fun184('89628412246737623568992'))
  4. 235689 #输出
复制代码

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-7-14 21:41:04 | 显示全部楼层
  1. def fun184(string):
  2.     num = []
  3.     for i in range(len(string)):
  4.         s = string[i]
  5.         for j in range(i + 1, len(string)):
  6.             if string[j] > s[-1]:
  7.                 s += string[j]
  8.             else:
  9.                 break
  10.         if len(s) > 1:
  11.             num.append(s)

  12.     num = sorted(num, key = lambda x: len(x), reverse = True)
  13.     if num:
  14.         return num[0]

  15. print(fun184('89628412246737623568992'))
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-14 21:55:00 | 显示全部楼层
本帖最后由 chongchuigu 于 2018-7-14 23:23 编辑
  1. def fun184(strings):
  2.         result=''
  3.         s=strings[0]
  4.         for i in range(1,len(strings)):
  5.                 if int(strings[i])>int(strings[i-1]):
  6.                         s+=strings[i]
  7.                 else:
  8.                         if len(s)>len(result):
  9.                                 result=s
  10.                         s=strings[i]       
  11.         if len(s)>len(result):
  12.                         result=s
  13.         if len(result)<2:
  14.                 return None
  15.         else:
  16.                 return result
  17.        
  18. print(fun184('89628412246737623568992'))
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-14 22:02:02 | 显示全部楼层
  1. >>> def fun184(string):
  2.         st = 0
  3.         r = string[0:1]
  4.         for i in range(1,len(string)):
  5.                 if ord(string[i-1]) >= ord(string[i]):
  6.                         tr = string[st:i]
  7.                         if len(tr) > len(r):
  8.                                 r = tr
  9.                         st = i
  10.         return r

  11. >>> print(fun184('89628412246737623568992'))
  12. 235689
  13. >>>
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-14 22:43:36 | 显示全部楼层
本帖最后由 天圆突破 于 2018-7-14 23:06 编辑
  1. def maxNum(string):
  2.     if not isinstance(string, str) or not string.isdigit():
  3.         print('必须输入一个全部是数字的字符串')
  4.         return None
  5.     n, increment = len(string), list()
  6.     for i in range(n-1):
  7.         temp = [string[i]]
  8.         for j in range(i+1, n):
  9.             if ord(string[j]) > ord(temp[-1]):
  10.                 temp.append(string[j])
  11.             else:
  12.                 break
  13.         increment.append(''.join(temp))
  14.     lenres = list(map(lambda x: len(x), increment))
  15.     res = increment[lenres.index(max(lenres))]
  16.     return res if len(res) > 1 else None

  17. if __name__ == '__main__':
  18.     ss = maxNum('1151111113')
  19.     print(ss)
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-15 01:00:24 | 显示全部楼层
  1. def fun184(x):
  2.     l=[int(t) for t in x]
  3.     t=len(l)
  4.     maxi,temp,length=0,0,0
  5.     for i in range(t-1):
  6.         length=0
  7.         for j in range(i+1,t):
  8.             if l[j]>l[j-1]:
  9.                 length+=1
  10.             else:
  11.                 break
  12.         if length>temp:
  13.             temp=length
  14.             maxi=i
  15.     if temp==0:
  16.         return None
  17.     else:
  18.         return x[maxi:maxi+temp+1]
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-15 08:43:13 | 显示全部楼层
本帖最后由 zhou995287902 于 2018-7-15 09:34 编辑
  1. def fun184(string):   
  2.     n=len(string)
  3.     index=0
  4.     ss=''
  5.     tt=''
  6.     while index < n-1:        
  7.         if string[index]<string[index+1]:
  8.             ss+=string[index]   
  9.             ss+=string[index+1]
  10.             ss = ''.join(x for i, x in enumerate(ss) if ss.index(x) == i)
  11.             if len(ss)>len(tt):
  12.                 tt=ss
  13.         else:
  14.             ss=''            
  15.         index +=1   
  16.     if tt=='':
  17.         return None
  18.     else:
  19.         return tt

  20.    
  21. print(fun184('89628412246737623568992'))
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-15 09:01:33 | 显示全部楼层
本帖最后由 凌九霄 于 2018-7-18 21:40 编辑
  1. import re

  2. def fun184(string):
  3.     longnum = sorted(re.findall(r'0?1?2?3?4?5?6?7?8?9?',string),key=lambda x: len(x),reverse=True)[0]
  4.     if len(longnum) > 1:
  5.         return longnum
  6.     else:
  7.         return None
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-15 15:43:51 | 显示全部楼层
  1. def fun184(mystr):
  2.     star = 0#初始化升数计算起始点
  3.     end = 0#初始化升数计算终点
  4.     maxlist = ''#初始化最长升数字符串
  5.     for i in range(len(mystr)-1):
  6.         #若当前位置的数字小于下一位数字且当前位置数字不大于上一位数字时,当前位置可作为起始点
  7.         if int(mystr[i]) < int(mystr[i+1]):
  8.             if i == 0:
  9.                 star = i
  10.             elif int(mystr[i]) <= int(mystr[i-1]):
  11.                 star = i
  12.         else:
  13.             end = i + 1
  14.             if len(maxlist) < len(mystr[star:end]):
  15.                 maxlist = mystr[star:end]
  16.             star = end + 1#每取一次字符串就把起始点归为当前的终点+1位置,避免当下一位数字仍然为降数时造成BUG
  17.     if len(maxlist) <= 1:
  18.         maxlist = 'None'
  19.     return maxlist
  20.             
  21. print(fun184('89628412246737623568992'))        
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-15 17:01:47 | 显示全部楼层
  1. def func(s):
  2.     s += '0'
  3.    
  4.     def fun(s):
  5.         if  s == '0': return []
  6.         sp = s[0]
  7.         for i in range(1, len(s)):
  8.             if s[i] > s[i - 1]: sp += s[i]
  9.             else: return [sp] + fun(s[i: ])
  10.             
  11.     return max((len(x), x ) for x in fun(s))[1]
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-15 17:34:10 | 显示全部楼层
认真学习python~跟着老师学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-15 18:22:23 | 显示全部楼层
本帖最后由 archlzy 于 2018-7-16 14:13 编辑
  1. def fun184(string):
  2.    
  3.    
  4.     result = []

  5.     #找出单增列表
  6.     for i in range(len(string)-1):
  7.         result_temp = []
  8.         result_temp.append(string[i])
  9.         while string[i+1] > string[i]:                       
  10.             result_temp.append(string[i+1])
  11.             i += 1
  12.             if i == len(string)-1: #最后一位小于倒数第二位跳出
  13.                 break
  14.          
  15.         result_temp = "".join(result_temp)
  16.         result.append(result_temp)

  17.     #找到最大值
  18.     result_temp = []
  19.     for i in range(len(result)):   
  20.         result_temp.append(len(result[i]))
  21.    
  22.     if len(result[result_temp.index(max(result_temp))]) == 1: #如果只有单个字符的说明没有需求的字符串输出None
  23.         return None
  24.     else:
  25.         return result[result_temp.index(max(result_temp))]
  26.       




  27. print(fun184('89628412246737623568992'))
  28.    

复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-15 19:21:38 | 显示全部楼层
  1. def fun184 (string):
  2.     count = 0
  3.     str1 = ''
  4.     list1 = []
  5.     lenght = 1
  6.     for i in str(string):
  7.         if int(i) > count:
  8.             str1 += i
  9.             count = int(i)
  10.         else:
  11.             list1.append (str1)
  12.             count = int(i)
  13.             str1 = i
  14.     for each in list1:
  15.         if len(each) > lenght:
  16.             lenght = len(each)
  17.             count = each
  18.     if lenght == 1:
  19.         return 'None'
  20.     else:
  21.         return count
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-16 15:10:00 | 显示全部楼层
  1. def fun184(x):
  2.         res=['a']*len(x)       
  3.         for p in range(len(x)-1):
  4.                 for i in range(p,len(x)-1):
  5.                         if int(x[i+1])<=int(x[i]):
  6.                                 break
  7.                 if res[i+1-p]=='a':
  8.                         res[i+1-p]=x[p:i+1]
  9.         for k in res[::-1]:
  10.                 if k!='a':
  11.                         return k

  12. x='89628412246737623568992'
  13. print(fun184(x))
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-16 15:34:53 | 显示全部楼层
def fun184(x):
        d={}
        for p in range(len(x)-1):
                for i in range(p,len(x)-1):
                        if int(x[i+1])<=int(x[i]):
                                break
                if i+1-p not in d:
                        d[i+1-p]=x[p:i+1]       
        res=sorted(list(d.items()),reverse=True)
        return res[0][1]

x='89628412246737623568992'
print(fun184(x))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-17 10:53:30 | 显示全部楼层
  1. def fun184(string):
  2.     temp = ''
  3.     max = ''
  4.     for index in range(len(string)-1):
  5.         if int(string[index]) < int(string[index+1]):
  6.             temp += string[index]
  7.         else:
  8.             if int(string[index-1]) < int(string[index]):
  9.                 temp += string[index]

  10.             if len(temp) > len(max):
  11.                 max = temp
  12.             temp = ''

  13.     return max

  14. print(fun184('89628412246737623568992'))
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-17 13:05:20 | 显示全部楼层
  1. def fun184(stri):
  2.     tmp = stri[0]
  3.     result = []
  4.     for c in stri:
  5.         if int(c) > int(tmp[-1]):
  6.             tmp += c
  7.         else:
  8.             if len(tmp) > 1:
  9.                 result.append(tmp)
  10.             tmp = c

  11.     t = 1
  12.     for d, i in enumerate(result):
  13.         if len(i) > t:
  14.             t = len(i)
  15.             dr = d
  16.    
  17.     return result[dr]


  18. print(fun184('89628412246737623568992'))
  19. print(fun184('2146987452013567899426982625'))
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-17 13:27:33 | 显示全部楼层
  1. def fun184(strs):
  2.     s = ''  # 单次结果字符串
  3.     count = 0  # 用于控制循环次数
  4.     slength = 0  # 最大长度
  5.     sstr = ''  # 符合条件的文本

  6.     for i in strs:
  7.         count += 1
  8.         var = int(i)  # 取每次的值
  9.         if s == '':
  10.             s = s + str(var)
  11.         elif int(s[len(s) - 1:]) < var:  # 符合递增条件进行累加
  12.             s = s + str(var)
  13.             if count == len(strs):
  14.                 if slength == 0:
  15.                     slength = len(s)
  16.                     sstr = s
  17.                 elif slength >= len(s):
  18.                     break
  19.                 else:
  20.                     slength = len(s)
  21.                     sstr = s
  22.         else:  # 不符合条件,进行重置
  23.             if slength == 0:
  24.                 slength = len(s)
  25.                 sstr = s
  26.             elif slength >= len(s):
  27.                 pass
  28.             else:
  29.                 slength = len(s)
  30.                 sstr = s

  31.             s = ''
  32.             s = s + str(var)
  33.     if slength > 1:
  34.         print sstr
  35.         print slength
  36.     else:
  37.         print 'None'




  38. if __name__ == '__main__':
  39.     fun184('123345')
  40.     fun184('89628412246737623568992')
  41.     fun184('987654')
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-17 16:25:35 | 显示全部楼层
def fun184(string):
    result = ''
    target = string[0]
    for num in range(1, len(string)):
        if string[num] > string[num-1]:
            target = target + string[num]
        elif string[num] == string[num-1]:
            result = target
        elif string[num] < string[num-1]:
            result = target
            target = string[num]
    return result


print(fun184('89628412246737623568992'))

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-18 10:48:44 | 显示全部楼层
本帖最后由 colinshi 于 2018-7-18 10:53 编辑
  1. def fun184(string):
  2.     if not isinstance(string,str):
  3.         return
  4.     lens = len(string)
  5.     tmp = [0, 0, 0]
  6.     res = [0, 0, 0]
  7.     for i in range(lens-1):
  8.         if string[i] < string[i+1]:
  9.             tmp[0] += 1
  10.             tmp[2] = i+1
  11.         elif tmp[0] > res[0]:
  12.             tmp, res = res, tmp
  13.         else:
  14.             tmp[1] = i+1
  15.     return string[res[1]:res[2]+1]

  16. print(fun184('89628412246737623568992'))
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-28 17:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表