鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: 冬雪雪冬

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

[复制链接]
发表于 2018-8-7 20:14:32 | 显示全部楼层
  1. def fun(dict, key):
  2.     list1 = []
  3.     key1 = key
  4.     for i in dict:
  5.         list1.append(i)
  6.     if key not in list1:
  7.         return "输入错误,没有该key值"
  8.     else:
  9.         while True:
  10.             if key not in list1:
  11.                 return key
  12.             elif dict[key] == key1:
  13.                 return None
  14.             else:
  15.                 key = dict[key]
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-8-7 21:43:04 | 显示全部楼层
dict1 = {'A':'B','B':'C','C':'D','D':'A'}
def fun(dict,key):
    abkey = key
    while dict1[key] in dict1:
        key = dict1[key]
        if key == abkey:
            dict[key] = None
            break
    return dict1[key]

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-8-8 00:24:11 | 显示全部楼层
def test195(dic,key):
    temp = []
    temp.append(key)
    for i in range(len(dic)):
        if dic[key] in temp:
            return None
        else:
            key = dic[key]
            temp.append(key)
    else:
        return key

dict1 = {"A": "B", "B": "C", "C": "D", "D": "A", "E": "F"}
dict2 = {"A": "B", "B": "C", "C": "D"}
print(test195(dict1,'A'))
print(test195(dict2,'A'))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-8 21:19:34 | 显示全部楼层
  1. def find_key(input_dict, x):
  2.     return find_key(input_dict, input_dict[x])

  3. def fun195(input_dict, x):
  4.         try:
  5.             y = find_key(input_dict, x)
  6.         except KeyError as e:
  7.             print(e)
  8.         except RecursionError:
  9.             print(None)

  10. dict1 = {"A": "B", "B": "C", "C": "D"}
  11. ##dict1 = {"A": "B", "B": "C", "C": "D", "D": "A", "E": "F"}

  12. print('-----try A')   
  13. fun195(dict1,'A')

  14. print('-----try D')   
  15. fun195(dict1,'D')

  16. print('-----try E')   
  17. fun195(dict1,'E')

  18. print('-----try F')   
  19. fun195(dict1,'F')
复制代码

评分

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

查看全部评分

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

使用道具 举报

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

使用道具 举报

发表于 2018-8-9 15:33:26 | 显示全部楼层
  1. dict1 = {"A": "B", "B": "C", "C": "D", "D": "A", "E": "F"}
  2. def func(Dict, Item):
  3.     start = Item
  4.     times = 0
  5.     while True:
  6.         if times > len(Dict):
  7.             return None
  8.         next = Dict[Item]
  9.         if next in Dict.keys():
  10.             Item = next
  11.             times += 1
  12.         else:
  13.             return next

  14. if __name__ == '__main__':
  15.     print(func(dict1,'A'))
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-8-9 16:23:47 | 显示全部楼层

  1. def fun195(dict1, key):
  2.     i = 0
  3.     while dict1[key] in list(dict1.keys()):
  4.         i += 1
  5.         key = dict1[key]
  6.         if i >= len(list(dict1.keys())):
  7.             return None
  8.     return dict1[key]


  9. dict1 = {"A": "B", "B": "C", "C": "D", "D": "A", "E": "F"}
  10. key = "A"

  11. fun195(dict1, key)

复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-8-9 17:16:54 | 显示全部楼层
def fun(dict1,a):
    i=1
    c=a
    try:
        while i>0:
            b=dict1[a]
            if (len(b)>0):
                i=1
                a=b
                if (str(a)==c):
                    a=None
                    break        
            else:
                i=0
                break
    except:
        pass
   
    return a

if __name__=='__main__':

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

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-8-9 21:03:23 | 显示全部楼层
dict1 = {"A": "B", "B": "C", "C": "D", "D": "Q", "E": "F"}

这条貌似很多也过不了啊,输入key='F' ,正确应该返回None,很多返回F
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-9 21:05:12 | 显示全部楼层
凌九霄 发表于 2018-8-9 21:03
dict1 = {"A": "B", "B": "C", "C": "D", "D": "Q", "E": "F"}

这条貌似很多也过不了啊,输入key='F' , ...

主要是题目中没有要求检测不存在的key,所以就不强求大家了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-9 23:55:19 | 显示全部楼层
冬雪雪冬 发表于 2018-8-9 21:05
主要是题目中没有要求检测不存在的key,所以就不强求大家了

当时候有点迟疑,但觉得竟然题目没有特别要求,才用抛出异常的手法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-10 08:12:16 | 显示全部楼层
claws0n 发表于 2018-8-9 23:55
当时候有点迟疑,但觉得竟然题目没有特别要求,才用抛出异常的手法

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

使用道具 举报

发表于 2018-8-10 08:17:27 | 显示全部楼层
感谢版主仔细评分,没有用到递归算法,还是要多学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-10 16:49:07 | 显示全部楼层
d1 = {"A": "B", "B": "C", "C": "D", "E": "F"}
d2 = {"A":"B", "B":"C","C":"D","D":"B"}
def f(d,s):
    tmp1 = d[s]
    tmp2 = None
    if tmp1 not in d.keys():
        tmp2 = tmp1
    else:
        for k, v in d.items():
            if k != s and v not in d.keys():
                tmp2 = v
                break
    return tmp2


print(f(d1, "A")) #链状
print(f(d1, "E")) #单独
print(f(d2, "A")) #循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-14 10:33:54 | 显示全部楼层
本帖最后由 graceasyi 于 2018-8-14 10:35 编辑

第一种方法只能处理顺序的情况,就是题目中的dict。第二种方法可处理非顺序情况。

  1. def fun195_1(dict1, key):
  2.     tmp = []
  3.     for k, v in dict1.items():
  4.         tmp.append(k)
  5.         if key == k:
  6.             key = v
  7.     return None if key in tmp else key


  8. def fun195_2(dict1, key):
  9.     v = dict1[key]
  10.     tmp = []
  11.     while True:
  12.         tmp.append(v)
  13.         try:
  14.             v = dict1[v]
  15.             if v in tmp:
  16.                 return None
  17.         except KeyError:
  18.             break
  19.     return v


  20. d1 = {"A": "B", "B": "C", "C": "D", "E": "F"}
  21. d2 = {"A": "B", "B": "C", "C": "D", "D": "B"}
  22. d3 = {"A": "B", "C": "D", "B": "C", "D": "F", "F": "E", "E": "G"}
  23. d4 = {"A": "B", "C": "D", "B": "C", "D": "F", "F": "E", "E": "D"}
  24. print(fun195_2(d1, 'A'))
  25. print(fun195_2(d1, 'E'))
  26. print(fun195_2(d2, 'A'))
  27. print(fun195_2(d3, 'B'))
  28. print(fun195_2(d4, 'A'))
复制代码


结果:
D
F
None
G
None
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-24 19:01:26 | 显示全部楼层
  1. def fun_195(dict1,key1,temp=[]):
  2.     while True:
  3.         if key1 in dict1.keys():
  4.             temp.append(key1)
  5.             key1=dict1[key1]
  6.         else:
  7.             break
  8.         if key1 in temp:
  9.             key1=None
  10.             break
  11.     print(key1)

  12. d1 = {"A": "B", "B": "C", "C": "D", "E": "F"}
  13. d2 = {"A":"B", "B":"C","C":"D","D":"B"}
  14. fun_195(d1,"E")
  15. fun_195(d1,"A")
  16. fun_195(d2,"A")
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-26 16:30:50 | 显示全部楼层
def f(dic1,a):
    dic = dic1.copy()
    while True:
        b = dic.get(a)
        dic.pop(a,None)
        if dic.get(b,None):pass
        else:
            if dic1.get(b,None):return None
            return b
        a = b

d1 = {"A": "B", "B": "C", "C": "D", "E": "F"}
d2 = {"A":"B", "B":"C","C":"D","D":"B"}
print(f(d1,'A'))
print(f(d1,'E'))
print(f(d2,'A'))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-28 16:04:07 | 显示全部楼层
  1. def fun195(dict_x,key):
  2.     repeat_key = []
  3.     while True:
  4.         if key in repeat_key:
  5.             return None
  6.         try:
  7.             dict_x[dict_x[key]]
  8.         except KeyError:
  9.             return dict_x[key]
  10.         repeat_key.append(key)
  11.         key = dict_x[key]

  12. if __name__ == '__main__':
  13.     d1 = {'A': 'B', 'B': 'C', 'C': 'D', 'E': 'F'}
  14.     d2 = {'A':'B', 'B':'C','C':'D','D':'B'}
  15.     print(fun195(d1,'A'))
  16.     print(fun195(d1,'E'))
  17.     print(fun195(d2,'A'))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-27 21:30:20 | 显示全部楼层
  1. def func(dic,key):
  2.   originalkey=key
  3.   while 1:
  4.     try:key=dic[key]
  5.     except:return key
  6.     if key==originalkey:return
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-14 20:56:38 | 显示全部楼层
  1. def fun(dic, val):
  2.     found = []

  3.     while dic.get(val):
  4.         found.append(val)
  5.         val = dic.pop(val)
  6.         if val in found:
  7.             return None
  8.     else:
  9.         return val
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 07:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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