鱼C论坛

 找回密码
 立即注册
查看: 5635|回复: 39

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

[复制链接]
发表于 2018-8-6 19:53:36 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 冬雪雪冬 于 2018-8-9 19:47 编辑

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

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

题目:
这是一个奇怪的字典{"A": "B", "B": "C", "C": "D"},一个item的value是另一个item的key
编写一个函数,参数为一个字典和一个key,如果得到的value是另一个item的key则继续求value,直到value不是key为止,返回这个value。
例如:
dict1 = {"A": "B", "B": "C", "C": "D"}
fun(dict1, "A") 返回 "D"
fun(dict1, "C") 返回 "D"

注意,如果value都是其他的item的key,即形成循环则返回None
例如
dict1 = {"A": "B", "B": "C", "C": "D", "D": "A", "E": "F"}
fun(dict1, "A") 返回 None

--------------------------------------------------------------------
对大家答案的测试如下:
d1 = {"A": "B", "B": "C", "C": "D", "E": "F"}
d2 = {"A":"B", "B":"C","C":"D","D":"B"}
def f.....
print(f(d1, "A")) #链状
print(f(d1, "E")) #单独
print(f(d2, "A")) #循环

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-8-6 20:25:08 | 显示全部楼层
  1. def fun195(d,k):
  2.     t=dict()
  3.     while True:
  4.         t[k]=d[k]
  5.         d.pop(k)
  6.         if t[k] in d:
  7.             k=t[k]
  8.         elif t[k] in t:
  9.             return None
  10.         else:
  11.             return t[k]
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-6 20:51:43 | 显示全部楼层
def loop(dict1, key):
    new_key = key
    while True:
        if dict1[new_key] in dict1.keys():       #判断该key对应的值是否在key中
            new_key = dict1[new_key]
            if new_key == key:
                return None
        else:
            return dict1[new_key]

结果
dict1 = {"A": "B", "B": "C", "C": "D"}
print(loop(dict1, "A"))
D

dict1 = {"A": "B", "B": "C", "C": "D", "D": "A", "E": "F"}
print(loop(dict1, "A"))
None

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-6 21:16:19 | 显示全部楼层
def func(dict0, key1):
    if key1 not in dict0:
        return "字典中不包含该key!!!"
    key2 = dict0[key1]
    while True:
        if key2 == key1:
            return None
        if key2 not in dict0:
            return key2
        key2 = dict0[key2]

dict0 = {"A": "B", "B": "C", "C": "D"}
print(func(dict0, "A"))

dict1 = {"A": "B", "B": "C", "C": "D", "D": "A", "E": "F"}
print(func(dict1, "A"))

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-6 21:16:29 | 显示全部楼层
  1. def fun195(dict1,key):
  2.     list1 = []
  3.     value = dict1[key]
  4.     while value in dict1:
  5.         list1.append(value)
  6.         value = dict1[value]
  7.         if value in list1:
  8.             return None
  9.     return value
复制代码

  1. >>> dict1 = {"A": "B", "B": "C", "C": "D"}
  2. >>> fun195(dict1,'A')
  3. 'D'
  4. >>> fun195(dict1,'C')
  5. 'D'
  6. >>> dict2 = {"A": "B", "B": "C", "C": "D", "D": "A", "E": "F"}
  7. >>> fun195(dict2,'A')
  8. >>>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-6 21:23:28 | 显示全部楼层
  1. def func195(dct: dict, key: str):
  2.     if dct[key] in dct:
  3.         value = dct[key]
  4.         del dct[key]
  5.         return func195(dct, value)
  6.     else:
  7.         return None if dct=={} else dct[key]
  8.   
  9. if __name__ == '__main__':
  10.     dict1 = {"A": "B", "B": "C", "C": "D"}
  11.     res = func195(dict1,"A")
  12.     print(res)
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-6 21:57:18 | 显示全部楼层
本帖最后由 chongchuigu 于 2018-8-7 14:11 编辑
  1. def a195(x,y):
  2.         for i in range(len(x)):
  3.                 y=x[y]
  4.                 if y not in dict1:
  5.                         return y
  6.                 elif x[y]==y:
  7.                         return None
  8. dict1 = {"A": "B", "B": "C", "C": "D", "D": "A", "E": "F"}
  9. print(a195(dict1, "A"))
  10. dict1 = {"A": "B", "B": "C", "C": "D"}
  11. print(a195(dict1, "A"))
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-6 22:27:23 | 显示全部楼层
  1. def fun(dicts,key):
  2.     count=1
  3.     while dicts[key] in dicts.keys():
  4.         key=dicts[key]
  5.         count+=1
  6.         if count>len(dicts):
  7.             print(None)
  8.             break     
  9.     if count<=len(dicts):
  10.         print(dicts[key])
  11.    

  12. dict1 = {"A": "B", "B": "C", "C": "D", "D": "A", "E": "F"}   
  13. fun(dict1, "A")      
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-6 22:46:03 | 显示全部楼层
  1. >>> def fun( dicts, key, rund=None):
  2.         if rund == None:
  3.                 rund = []
  4.         if key in rund:
  5.                 return None
  6.         rund.append(key)
  7.         v = dicts.get(key)
  8.         if v in dicts:
  9.                 return fun(dicts, v, rund)
  10.         return v

  11. >>> d = {1:2,2:3,3:4}
  12. >>> fun(d, 1)
  13. 4
  14. >>> d = {1:2,2:3,3:4, 4:1}
  15. >>> fun(d,1)
  16. >>> d = {"A": "B", "B": "C", "C": "D"}
  17. >>> fun(d,'A')
  18. 'D'
  19. >>> fun(d,'C')
  20. 'D'
  21. >>> d = {"A": "B", "B": "C", "C": "D", "D": "A", "E": "F"}
  22. >>> fun(d, 'A')
  23. >>>
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-6 23:56:23 | 显示全部楼层
  1. def fun(dic1, str_a):
  2.     str_b = str_a
  3.     str_a = dic1[str_a]
  4.     while(1):
  5.         if str_a in dic1:
  6.             if str_a != str_b:
  7.                 str_a = dic1[str_a]
  8.             else:
  9.                 str_b = None
  10.                 return str_b
  11.                 break
  12.         else:
  13.             str_b = str_a
  14.             return str_b
  15.             break

  16. dic1 = {"A": "B", "B": "C", "C": "D", "D": "A", "E": "F"}
  17. print(fun(dic1,"A"))
  18. print(fun(dic1,"E"))
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-7 08:45:08 | 显示全部楼层
  1. def fun195(dicts,key):
  2.         try:
  3.                 fun195(dicts,dicts[key])
  4.         except KeyError:
  5.                 print(dicts[key])
  6.         except RuntimeError:
  7.                 return None
  8. fun195({'A':'B','B':'C'},'A')
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-7 10:39:42 | 显示全部楼层
  1. #coding:utf-8

  2. def result(dic,str):
  3.     try:
  4.         if dic[str] in dic.keys():
  5.             return result(dic, dic[str])
  6.         else:
  7.             return dic[str]
  8.     except:
  9.         return None
  10.    
  11.    
  12. dict1 = {"A": "B", "B": "C", "C": "D"}
  13. dict2 = {"A": "B", "B": "C", "C": "D", "D": "A"}
  14. print(result(dict1,'A'))
  15. print(result(dict1,'C'))
  16. print(result(dict1,'E'))
  17. print(result(dict2,'A'))
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-7 11:15:33 | 显示全部楼层
本帖最后由 popython 于 2018-8-7 11:16 编辑
  1. def fun(di,di_key):
  2.     A = di.keys()
  3.     ai = len(di)
  4.     di_key = di[di_key]
  5.     while ai:
  6.         
  7.         if di_key in A:
  8.             di_key = di[di_key]
  9.         else:
  10.             return di_key
  11.         ai -= 1
  12.     if ai == 0:
  13.         return None
复制代码


只想到这样的。。。

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-7 11:49:50 | 显示全部楼层
本帖最后由 故梦L 于 2018-8-7 11:58 编辑
  1. def function(dict, _key, keys=list(), values=list()):
  2.     """
  3.     :param count:搜索_key的位置
  4.     :param flag:从_key开始索引
  5.     :return:value or None
  6.     """
  7.     count = 0
  8.     for key,value in dict.items():
  9.         values.append(value)
  10.         keys.append(key)
  11.         if key == _key:
  12.             flag = count
  13.         else:
  14.             count += 1
  15.     for i in range(flag, len(dict)-1):
  16.         if keys[i+1] != values[i]:
  17.             return values[i]
  18.     else:
  19.         return None
  20.    
  21. dict1 = {"A": "H", "B": "C", "C": "D", "D": "E", "E": "F"}
  22. print(function(dict1,'A'))
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-7 13:12:30 | 显示全部楼层
  1. gtmp = []
  2. def func195(dic, str):
  3.     global gtmp
  4.     try:
  5.         if dic[str]:
  6.             if dic[str] in gtmp:
  7.                 gtmp = []
  8.                 return
  9.             else:
  10.                 gtmp.append(dic[str])
  11.                 return func195(dic, dic[str])
  12.     except:
  13.         gtmp = []
  14.         return dic[str]


  15. if __name__=='__main__':
  16.     dict1 = {"A": "B", "B": "C", "C": "D"}
  17.     print(func195(dict1, "A"))
  18.     print(func195(dict1, "C"))
  19.     dict1 = {"A": "B", "B": "C", "C": "D", "D": "A", "E": "F"}
  20.     print(func195(dict1, "A"))
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-7 14:24:56 | 显示全部楼层
def fun195(dic,x):       
        usedkeys=[x]
        while  True:
                x=dic.get(x)
                if x in usedkeys:
                        return None
                if x in dic:
                        usedkeys.append(x)                       
                else:
                        return x


dict1 = {"A": "B", "B": "C", "C": "D"}
print(fun195(dict1,"A"))
print(fun195(dict1,"C"))

dict1 = {"A": "B", "B": "C", "C": "D", "D": "A", "E": "F"}
print(fun195(dict1, "A"))

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-7 16:18:47 | 显示全部楼层
  1. def fun195(dic,key):
  2.         if dic[key] in dic:
  3.                 dic[key],key=None,dic[key]
  4.                 return fun195(dic,key)
  5.         else:
  6.                 return dic[key]
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-7 16:43:56 | 显示全部楼层
本帖最后由 凌九霄 于 2018-8-7 21:26 编辑
  1. dict1 = {"A": "B", "B": "C", "C": "D"}
  2. dict2 = {"A": "B", "B": "C", "C": "D", "D": "A", "E": "F"}
  3. dict3 = {"A": "B", "B": "C", "C": "D", "D": "Q", "E": "F"}


  4. def func(ldict, key):
  5.     value = None
  6.     cdict = ldict.copy()
  7.     for i in range(len(ldict)):
  8.         if ldict.__contains__(key):
  9.             value = ldict[key]
  10.             try:
  11.                 del cdict[ key ]
  12.             except KeyError:
  13.                 return None
  14.             else:
  15.                 key = value
  16.         else:
  17.             break
  18.     return value

  19. print(func(dict1, "A"))  #D
  20. print(func(dict1, "M"))  #None
  21. print(func(dict2, "B"))  #None
  22. print(func(dict3, "C"))  #Q
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-7 16:53:57 | 显示全部楼层
  1. def fun193(dict1,str1):
  2.     value = dict1[str1]
  3.     while value in dict1.keys():
  4.         value = dict1[value]
  5.         if value == str1:
  6.             return None
  7.     return value
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-7 17:18:38 | 显示全部楼层
  1. def fun195(dict1, key):
  2.     key1 = dict1.get(key)
  3.     if key1:
  4.         while dict1.get(key1) and key1 != key:
  5.             key1 = dict1.get(key1)
  6.         if not dict1.get(key1):
  7.             return key1
  8.         else:
  9.             return
  10.     else:
  11.         return


  12. dict1 = {"A": "B", "B": "C", "C": "D"}
  13. dict2 = {"A": "B", "B": "C", "C": "D", "D": "A", "E": "F"}
  14. print(fun195(dict1, 'A'))
  15. print(fun195(dict1, 'C'))
  16. print(fun195(dict1, 'D'))
  17. print(fun195(dict2, 'A'))
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-25 16:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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