鱼C论坛

 找回密码
 立即注册
查看: 4306|回复: 13

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

[复制链接]
发表于 2017-10-22 19:42:57 | 显示全部楼层 |阅读模式

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

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

x
首先我们的玩法做了一下改变:
1. 楼主不再提供答案。
2. 请大家先独立思考”,再参考其他鱼油的解答,这样才有助于自己编程水平的提高。
3. 鼓励大家积极答题,奖励的期限为出题后24小时内。
4. 根据答案的质量给予1~3鱼币的奖励。

题目:
我们知道用add方法可以给集合增加元素,如:
  1. >>> set1 = {'qwe', 'asd', 'z'}
  2. >>> set1.add('123')
  3. >>> set1
  4. {'123', 'qwe', 'asd', 'z'}
复制代码


当add已有元素时,则不会有任何变化,这也是集合唯一性的表现,现在有一个全是字符串的集合,你设计程序,当加入一个字符串是集合中已有元素时,会自动在字符串后面加上“_1”再加入元素中,如
  1. set1 = {'qwe', 'asd', 'z'}
  2. #加入'qwe',实际加入qwe_1,集合变成
  3. {'qwe_1', 'qwe', 'asd', 'z'}
复制代码

进一步,如果已有'qwe'和'qwe_1',再加入'qwe'时,实际加入'qwe_2',以此类推。

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2017-10-22 21:33:36 | 显示全部楼层
  1. set1 = {'qwe_1','qwe', 'asd', 'z'}


  2. adds = input("请输入想要加入的元素:")

  3. count = 0
  4. for each in set1:
  5.     if adds in each:
  6.         count += 1
  7. if count:
  8.     adds += '_%d' % count

  9. print("原set为:",set1)

  10. set1.add(adds)

  11. print("原set变为:",set1)
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2017-10-22 21:35:14 | 显示全部楼层
本帖最后由 ooxx7788 于 2017-10-23 09:04 编辑
  1. def foo(se,strng):
  2.     import re
  3.     if strng not in se:
  4.         se.add(strng)
  5.     else:
  6.         if re.search(r'(.*?)_\d*', strng):
  7.             s,i = re.findall(r'(.*?)_(\d*)',strng)[0]
  8.             strng = '{0}_{1}'.format(s,int(i)+1)
  9.             return foo(se, strng)
  10.         else:
  11.             strng = strng + '_1'
  12.             return foo(se, strng)
复制代码


不过如果出现本身就是_\d*的文本好像有点问题,应该要增加一个是不是从1开始的判断,有点小复杂呢,不改了。

评分

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

查看全部评分

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

使用道具 举报

发表于 2017-10-23 00:09:57 | 显示全部楼层
本帖最后由 SixPy 于 2017-10-23 00:14 编辑
  1. class SET(set):
  2.     def add(self,x):
  3.         n,x1 = 0,x
  4.         while x in self:
  5.                 n += 1
  6.                 x = '%s_%d'%(x1,n)
  7.         super().add(x)
  8.                         
  9. s=SET('abc')
  10. print(s)
  11. s.add('c')
  12. print(s)
  13. s.add('c')
  14. print(s)
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2017-10-23 10:09:45 | 显示全部楼层
  1. def my_add(the_set, st):
  2.     if st not in the_set:
  3.         the_set.add(st)

  4.     else:
  5.         i = 1
  6.         st += "_%d" % i
  7.         while st in the_set:
  8.             i += 1
  9.             st = st.split('_')[0] + '_%d' % i

  10.         the_set.add(st)

  11.     return the_set
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2017-10-27 20:39:29 | 显示全部楼层
很少碰到用到类的题目,不熟,重写方法不用super就感觉要无限循环
  1. class New_set(set):
  2.     def add(self, value):
  3.         if value not in self:
  4.             super().add(value)
  5.         else:
  6.             length = len(self)
  7.             i = 1
  8.             while len(self) == length:
  9.                 super().add("".join([value, "_", str(i)]))
  10.                 i += 1
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-2 03:08:33 | 显示全部楼层
  1. def addSet(aSet, something):
  2.     if isinstance(something, str):
  3.         if something not in aSet:
  4.             aSet.add(something)
  5.         else:
  6.             n = 1
  7.             while something+'_'+str(n) in aSet:
  8.                 n += 1
  9.             aSet.add(something+'_'+str(n))
  10.     return aSet

  11. set1 = {'qwe', 'asd', 'z'}
  12. for i in range(10):
  13.     print(addSet(set1, 'qwe'))

  14. >>>
  15. {'z', 'qwe', 'qwe_1', 'asd'}
  16. {'qwe_2', 'z', 'qwe', 'qwe_1', 'asd'}
  17. {'z', 'qwe_2', 'qwe', 'qwe_1', 'qwe_3', 'asd'}
  18. {'z', 'qwe_2', 'qwe', 'qwe_1', 'qwe_4', 'qwe_3', 'asd'}
  19. {'z', 'qwe_5', 'qwe_2', 'qwe', 'qwe_1', 'qwe_4', 'qwe_3', 'asd'}
  20. {'z', 'qwe_6', 'qwe_5', 'qwe_2', 'qwe', 'qwe_1', 'qwe_4', 'qwe_3', 'asd'}
  21. {'z', 'qwe_6', 'qwe_5', 'qwe_7', 'qwe_2', 'qwe', 'qwe_1', 'qwe_4', 'qwe_3', 'asd'}
  22. {'z', 'qwe_6', 'qwe_5', 'qwe_7', 'qwe_2', 'qwe', 'qwe_1', 'qwe_4', 'qwe_3', 'asd', 'qwe_8'}
  23. {'qwe_9', 'z', 'qwe_6', 'qwe_5', 'qwe_7', 'qwe_2', 'qwe', 'qwe_1', 'qwe_4', 'qwe_3', 'asd', 'qwe_8'}
  24. {'qwe_9', 'z', 'qwe_10', 'qwe_6', 'qwe_5', 'qwe_7', 'qwe_2', 'qwe', 'qwe_1', 'qwe_4', 'qwe_3', 'asd', 'qwe_8'}
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-1 15:47:01 | 显示全部楼层
  1. def Add(set1,element):
  2.     i=0
  3.     length_0=len(set1)
  4.     set1.add(element)
  5.     length_1=len(set1)
  6.     while length_0==length_1:
  7.         i+=1
  8.         set1.add(element+'_'+str(i))
  9.         length_1=len(set1)
  10.         
  11.     return set1

  12. set1={'qwe','asd','z'}
  13. y_n=None

  14. while y_n!='no':
  15.     element=input('Please enter the element whilch you want to join:')
  16.     print(Add(set1,element))
  17.     y_n=input('Do you want to enter again [yes/no]:')
  18.     y_n.lower()

复制代码

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

使用道具 举报

发表于 2018-2-3 11:18:07 | 显示全部楼层
  1. text = {'qwe_1', 'qwe', 'asd', 'z','qwe_2'}
  2. def setAdd(string):
  3.     before = len(text)
  4.     text.add(string)
  5.     last = len(text)
  6.     temp = []
  7.     if last == before:
  8.         for x in text:
  9.             if string in x:
  10.                 n = x[len(string)+1 :]
  11.                 temp.append(int(n if n else 0))
  12.         text.add('%s_%d' % (string,max(temp)+1))

  13. setAdd('qwe')
  14. setAdd('asd')
  15. setAdd('3721')

  16. #result
  17. {'z', 'asd_1', '3721', 'asd', 'qwe_1', 'qwe_3', 'qwe_2', 'qwe'}
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-2-25 19:03:35 | 显示全部楼层
  1. set1 = {'majia','weiwei'}
  2. x = 1

  3. while True:

  4.     element = str(input('> '))
  5.     '''判断元素是否属于这个集合成员,如果属于就添加后缀'''
  6.     if element in set1:
  7.         element = element + '_' + str(x)
  8.         set1.add(element)
  9.         x += 1
  10.             
  11.     else:
  12.         set1.add(element)
  13.         break   
  14.         
  15.     print(set1)
  16.    
  17. print(set1)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-1 11:00:40 | 显示全部楼层
  1. def add_element(sett,elem):
  2.     counter = 0
  3.     for i in sett:
  4.         if i.count(elem) == 1:
  5.             counter += 1
  6.     if counter:
  7.         suffix = '%d' % (counter)
  8.         elem = elem + '_' + suffix
  9.         sett.add(elem)
  10.     else:
  11.         sett.add(elem)
  12.     return sett
  13. set1 = {'qwe', 'asd', 'z', 'qwe_1', 'qwe_2'}
  14. lis = ['123', 'qwe', 'qwe_1', 'qwe_2']
  15. for j in lis:
  16.     result = add_element(set1,j)
  17.     print(result)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-29 15:45:58 | 显示全部楼层
def iter():
    a = 0
    while True:
        a += 1
        yield a


def insert_set(str_set, str):
    if str in str_set:
        temp = str
        a = iter()
        while temp in str_set:
            temp = str + '_%d' % next(a)
        str_set.add(temp)
    else:
        str_set.add(str)


set1 = {'qwe', 'asd', 'zxc'}
insert_set(set1, 'qwe')
insert_set(set1, 'qwe')
insert_set(set1, 'qwe')
insert_set(set1, 'qwe')
insert_set(set1, 'asd')
insert_set(set1, 'tyu')
insert_set(set1, 'qwe')
print(set1)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-6 21:59:35 | 显示全部楼层
set1={"qwe","asd","z"}
dict1={"qwe":0,"asd":0,"z":0}
while True:
    n=str(input("输入集合元素:"))
    if n not in set1:
        set1.add(n)
        dict1[n]=0
    else:
        for each in set1:
            if each==n:
                dict1[each]+=1
        set1.add(n+"_"+str(dict1[n]))   
    print (set1)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-7 13:14:33 | 显示全部楼层
  1. from collections import Counter

  2. set1 = {'qwe', 'asd', 'z'}


  3. s = input("请输入想要加入的元素:")

  4. set2 = Counter(set1)

  5. if s in set1:
  6.     set1.add(s + '_' + str(set2[s]))
  7. else:
  8.     set1.add(s)
  9.    
  10. set2[s] += 1

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 14:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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