鱼C论坛

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

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

[复制链接]
发表于 2018-8-7 20:14:32 | 显示全部楼层
def fun(dict, key):
    list1 = []
    key1 = key
    for i in dict:
        list1.append(i)
    if key not in list1:
        return "输入错误,没有该key值"
    else:
        while True:
            if key not in list1:
                return key
            elif dict[key] == key1:
                return None
            else:
                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 | 显示全部楼层
def find_key(input_dict, x):
    return find_key(input_dict, input_dict[x])

def fun195(input_dict, x):
        try:
            y = find_key(input_dict, x)
        except KeyError as e: 
            print(e)
        except RecursionError:
            print(None)

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

print('-----try A')    
fun195(dict1,'A')

print('-----try D')    
fun195(dict1,'D')

print('-----try E')    
fun195(dict1,'E')

print('-----try F')    
fun195(dict1,'F')

评分

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

查看全部评分

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

使用道具 举报

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

使用道具 举报

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

if __name__ == '__main__':
    print(func(dict1,'A'))

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-8-9 16:23:47 | 显示全部楼层
def fun195(dict1, key):
    i = 0
    while dict1[key] in list(dict1.keys()):
        i += 1
        key = dict1[key]
        if i >= len(list(dict1.keys())):
            return None
    return dict1[key]


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

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。第二种方法可处理非顺序情况。
def fun195_1(dict1, key):
    tmp = []
    for k, v in dict1.items():
        tmp.append(k)
        if key == k:
            key = v
    return None if key in tmp else key


def fun195_2(dict1, key):
    v = dict1[key]
    tmp = []
    while True:
        tmp.append(v)
        try:
            v = dict1[v]
            if v in tmp:
                return None
        except KeyError:
            break
    return v


d1 = {"A": "B", "B": "C", "C": "D", "E": "F"}
d2 = {"A": "B", "B": "C", "C": "D", "D": "B"}
d3 = {"A": "B", "C": "D", "B": "C", "D": "F", "F": "E", "E": "G"}
d4 = {"A": "B", "C": "D", "B": "C", "D": "F", "F": "E", "E": "D"}
print(fun195_2(d1, 'A'))
print(fun195_2(d1, 'E'))
print(fun195_2(d2, 'A'))
print(fun195_2(d3, 'B'))
print(fun195_2(d4, 'A'))

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

使用道具 举报

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

d1 = {"A": "B", "B": "C", "C": "D", "E": "F"}
d2 = {"A":"B", "B":"C","C":"D","D":"B"}
fun_195(d1,"E")
fun_195(d1,"A")
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 | 显示全部楼层
def fun195(dict_x,key):
    repeat_key = []
    while True:
        if key in repeat_key:
            return None
        try:
            dict_x[dict_x[key]]
        except KeyError:
            return dict_x[key]
        repeat_key.append(key)
        key = dict_x[key]

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

使用道具 举报

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

使用道具 举报

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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-19 11:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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