鱼C论坛

 找回密码
 立即注册
查看: 1505|回复: 20

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

[复制链接]
发表于 2018-7-18 08:31:53 | 显示全部楼层 |阅读模式

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

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

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

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

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

题目:
这次是个消数字的程序。给你一串数字字符串,把相邻的相同数字删掉。
例如:"12234445"变成"135'
注意:
1. 删除后又有重复数字则继续删,如'1233321'一次删除后成为'1221',再删除后为'11',再删除为''(空字符串)
2. 对于这样的字符串'1233224'是先删除'33'和'22',结果为'124',而不是先删除'33'成为'12224',再删成'222'为'14'。
3. 编写成一个函数fun185(numStr), 返回结果字符串。

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2018-7-18 09:10:54 | 显示全部楼层
  1. import re
  2. def hasRepeatNumber(string):
  3.     n = len(string)
  4.     for i in range(n-1):
  5.         if string[i] == string[i+1]:
  6.             return True
  7.     return False

  8. def fun185(string):
  9.     while string != '' and hasRepeatNumber(string):
  10.         for i in range(9):
  11.             pattern = re.compile('[%d]{2,}'%i)
  12.             string = re.sub(pattern, '', string)
  13.     return string

  14. if __name__ == '__main__':
  15.     res = fun185('1233224')
  16.     print(res)
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-7-18 10:07:04 | 显示全部楼层
本帖最后由 凌九霄 于 2018-7-18 11:23 编辑
  1. import re


  2. def fun185(numStr):
  3.     while re.findall(r'(\d)\1{1,}', numStr):
  4.         numStr = re.sub(r'(\d)\1{1,}', '', numStr)
  5.     return numStr
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-7-18 14:05:56 | 显示全部楼层
本帖最后由 chongchuigu 于 2018-7-18 14:12 编辑

和184题有点类似!
  1. def fun185(numStr):
  2.         numStr1=numStr
  3.         numStr2=numStr
  4.         s=numStr2[0]
  5.         while True:
  6.                 for i in range(1,len(numStr2)):
  7.                         if numStr2[i]==numStr2[i-1]:
  8.                                 s+=numStr2[i]
  9.                         else:
  10.                                 if len(s) >1:
  11.                                         numStr1=numStr1.replace(s,'',1)
  12.                                 s=numStr2[i]
  13.                 if len(s) >1:
  14.                         numStr1=numStr1.replace(s,'',1)                               
  15.                 if numStr2==numStr1 or len(numStr1)==0:
  16.                         print(numStr1)
  17.                         break       
  18.                 else:
  19.                         numStr2=numStr1
  20.                         s=numStr2[0]       
  21.        
复制代码

评分

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

查看全部评分

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

使用道具 举报

头像被屏蔽
发表于 2018-7-18 17:08:47 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-18 17:09:49 | 显示全部楼层
  1. def fun185(numstr):
  2.     num = 0
  3.     string = ''
  4.     for each in numstr:
  5.         if each == str(num):
  6.             if string[-1] == str(num):
  7.                 string = string[:-1]
  8.         else:
  9.             string += each
  10.             num = int(each)
  11.     if numstr == string:
  12.         print(string)
  13.     else:
  14.         fun185(string)
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-7-18 17:32:12 | 显示全部楼层
本帖最后由 graceasyi 于 2018-7-18 17:34 编辑

感冒了,大脑一片混沌,写得太复杂了……
反正都是字符串,相同字符也能消……

  1. def fun185(numStr):
  2.     if len(numStr) == 2:
  3.         if numStr[0] == numStr[1]:
  4.             return ''
  5.         else:
  6.             return numStr
  7.     else:
  8.         tmp = list(numStr[:])
  9.         n = 0
  10.         for i, c in enumerate(numStr[1:-1]):
  11.             if numStr[i] == c or numStr[i+2] == c:
  12.                 del tmp[i+1-n]
  13.                 n += 1
  14.         if numStr[1] == numStr[0]:
  15.             del tmp[0]
  16.         if numStr[-1] == numStr[-2]:
  17.             del tmp[-1]

  18.         result = ''.join(tmp)
  19.         if same(result):
  20.             return fun185(result)
  21.         else:
  22.             return result


  23. def same(numStr):
  24.     t = numStr[0]
  25.     for c in numStr[1:]:
  26.         if c == t:
  27.             return True
  28.         else:
  29.             t = c
  30.     return False


  31. print(fun185("1233224"))
  32. print(fun185("12234445"))
  33. print(fun185("1233321"))
  34. print(fun185("89555882136999444771112555"))
  35. print(fun185("aaaabccdieee445322247773"))
  36. print(fun185("   happy new  year! 2008!"))
复制代码


结果:
124
135

8921362
bdi5343
hay newyear! 28!

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-7-18 19:29:01 | 显示全部楼层
  1. def fun185(numStr):
  2.     while 1:
  3.         L=[]
  4.         for each in numStr:
  5.             if L==[]:
  6.                 L.append(each)
  7.             elif each in L[-1]:
  8.                 L[-1]+=each      
  9.             else:
  10.                 L.append(each)
  11.         z=''.join([t for t in L if len(t)==1])
  12.         if len(z)==len(L):
  13.             return z
  14.         else:
  15.             numStr=z
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-7-18 20:24:01 | 显示全部楼层
  1. >>> def fun185(numStr):
  2.         import re
  3.         p = re.compile(r'(\d)\1+')
  4.         s = ''
  5.         while True:
  6.                 s = re.sub(p, lambda m:'', numStr)
  7.                 if s == numStr:
  8.                         return s
  9.                 numStr = s

  10.                
  11. >>> fun185('1233224')
  12. '124'
  13. >>> fun185('12234445')
  14. '135'
  15. >>>
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-7-19 01:33:46 | 显示全部楼层
  1. import re
  2. def fun185(numStr):
  3.     mystr = numStr
  4.     count = 1
  5.     while True:

  6.         mynewstr = ''
  7.         list1 = []
  8.         dellist = []
  9.         
  10.         for i in range(10):
  11.             a = str(i) + '+'
  12.             list2 = re.findall(a,mystr)
  13.             list1 += list2


  14.         if len(list1) == len(mystr):
  15.             break
  16.         else:
  17.             for n in list1:
  18.                 if len(n)>1:
  19.                     mystr = mystr.replace(n,'')
  20.             print('第%d次消除' %count)
  21.             print(mystr)
  22.             count += 1



  23. fun185('1233321')
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-7-19 01:34:35 | 显示全部楼层
  1. import re
  2. def fun185(numStr):
  3.     mystr = numStr
  4.     count = 1
  5.     while True:

  6.         mynewstr = ''
  7.         list1 = []
  8.         dellist = []
  9.         
  10.         for i in range(10):
  11.             a = str(i) + '+'
  12.             list2 = re.findall(a,mystr)
  13.             list1 += list2


  14.         if len(list1) == len(mystr):
  15.             break
  16.         else:
  17.             for n in list1:
  18.                 if len(n)>1:
  19.                     mystr = mystr.replace(n,'')
  20.             print('第%d次消除' %count)
  21.             print(mystr)
  22.             count += 1



  23. fun185('1233321')
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-19 15:45:09 | 显示全部楼层
  1. def fun185(string):
  2.     temp = ''
  3.     replace_list = []
  4.     for index in range(len(string)):
  5.         if (index+1 < len(string)) and int(string[index]) == int(string[index+1]):
  6.             temp += string[index]
  7.         elif (index-1 >= 0) and (int(string[index-1]) == int(string[index])):
  8.             temp += string[index]
  9.         elif temp:
  10.             replace_list.append(temp)
  11.             temp = ''
  12.     if temp:
  13.         replace_list.append(temp)

  14.     if replace_list:
  15.         for each in replace_list:
  16.             string = string.replace(each, '')
  17.         if not string:
  18.             return string
  19.         return fun185(string)
  20.     else:
  21.         return string

  22. print(fun185('1233321'))
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-7-19 16:36:36 | 显示全部楼层
不懂....
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-7-19 21:14:02 | 显示全部楼层
本帖最后由 liuzihe1979 于 2018-7-19 21:18 编辑

def func185(numStr):
        num = list(numStr)
        flag = 0
        while num != '':
                flag = 0
                temp = []
                for i in range(len(num)):
                        if i == 0 or i==len(num):
                                continue
                        if num == num[i-1]:
                                if i-1 not in temp:
                                        temp.append(i-1)
                                temp.append(i)
                                flag = 1
                               
                for j in range(len(temp)):
                        num[temp[j]] = ''
                for k in range(len(temp)):
                        num.remove('')
               
                if flag == 0:
                        break

        return num


刚学Python,给出的函数感觉用的方法比较笨
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-19 21:45:08 | 显示全部楼层
找个bool列表指导工作,递归
  1. def fun(numStr):
  2.     result = numStr
  3.     n = len(result)
  4.     temp = [0] * n
  5.    
  6.     for i in range(n-1):
  7.         if result[i] == result[i+1]:
  8.             temp[i] = temp[i+1] = 1
  9.     result = "".join(n for m, n in enumerate(result) if not temp[m])
  10.    
  11.     return result if result == numStr else fun(result)
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-7-23 09:54:00 | 显示全部楼层
def fun185(x):
        res=list(x)
        for i in range(len(x)-1):
                if x[i]==x[i+1]:
                        res[i]=res[i+1]=''
        res=''.join(res)
        return res if len(res)==len(x) or len(res)==0 else fun185(res)

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

使用道具 举报

发表于 2018-7-23 15:47:51 | 显示全部楼层
input_number=input("请输入需要剔除的重复数字")
def del_repeat(input_number):
    temp = [[""], []]
    for i in input_number:
        if i != temp[0]:
            temp[1].append(i)
        elif temp[1] != [] and temp[1][-1] ==i :temp[1].pop()
        temp[0]=i
    return temp[1]

number_length= len (input_number)

while True:
    input_number=del_repeat(input_number)
    if number_length == len (input_number):
        break
    number_length = len(input_number)

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

使用道具 举报

头像被屏蔽
发表于 2018-8-9 21:19:23 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-3 09:54:10 | 显示全部楼层
本帖最后由 子沙 于 2018-9-3 09:58 编辑
  1. def fun185(numStr):
  2.     list1=list(numStr)
  3.     length=len(list1)
  4.     flag=0
  5.     while flag!=length:
  6.         i=0
  7.         flag=len(list1)
  8.         while i<len(list1)-1:
  9.             if list1[i+1]==list1[i]:
  10.                 if i+2<=len(list1)-1:
  11.                     for j in range(i+2,len(list1)):
  12.                         if list1[j]!=list1[i]:
  13.                             break
  14.                     for k in range(j-1,i-1,-1):
  15.                         list1.pop(k)
  16.                 else:
  17.                     list1.pop(i)
  18.                     list1.pop(i)
  19.             else:
  20.                 i+=1
  21.         length=len(list1)
  22.     print("'%s'"%(''.join(list1)))
  23. fun185('12234445')
  24. fun185('1233224')
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-7 14:54:04 | 显示全部楼层
  1. def test185(numstr):
  2.     resultstr = ''.join([numstr[i] for i in range(len(numstr)) if
  3.                          (numstr[i - 1] if i > 0 else '-') != numstr[i] != (numstr[i + 1] if i < len(numstr) - 1 else '-')])
  4.     return resultstr if resultstr == numstr else test185(resultstr)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 17:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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