鱼C论坛

 找回密码
 立即注册
查看: 4543|回复: 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")) #循环

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2018-8-6 20:25:08 | 显示全部楼层
def fun195(d,k):
    t=dict()
    while True:
        t[k]=d[k]
        d.pop(k)
        if t[k] in d:
            k=t[k]
        elif t[k] in t:
            return None
        else:
            return t[k]

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> 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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> 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

查看全部评分

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

使用道具 举报

发表于 2018-8-6 21:16:29 | 显示全部楼层
def fun195(dict1,key):
    list1 = []
    value = dict1[key]
    while value in dict1:
        list1.append(value)
        value = dict1[value]
        if value in list1:
            return None
    return value
>>> dict1 = {"A": "B", "B": "C", "C": "D"}
>>> fun195(dict1,'A')
'D'
>>> fun195(dict1,'C')
'D'
>>> dict2 = {"A": "B", "B": "C", "C": "D", "D": "A", "E": "F"}
>>> fun195(dict2,'A')
>>> 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-6 21:23:28 | 显示全部楼层
def func195(dct: dict, key: str):
    if dct[key] in dct:
        value = dct[key]
        del dct[key]
        return func195(dct, value)
    else:
        return None if dct=={} else dct[key]
  
if __name__ == '__main__':
    dict1 = {"A": "B", "B": "C", "C": "D"}
    res = func195(dict1,"A")
    print(res)

评分

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

查看全部评分

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

使用道具 举报

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

评分

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

查看全部评分

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

使用道具 举报

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

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

评分

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

查看全部评分

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

使用道具 举报

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

>>> d = {1:2,2:3,3:4}
>>> fun(d, 1)
4
>>> d = {1:2,2:3,3:4, 4:1}
>>> fun(d,1)
>>> d = {"A": "B", "B": "C", "C": "D"}
>>> fun(d,'A')
'D'
>>> fun(d,'C')
'D'
>>> d = {"A": "B", "B": "C", "C": "D", "D": "A", "E": "F"}
>>> fun(d, 'A')
>>> 

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-8-6 23:56:23 | 显示全部楼层
def fun(dic1, str_a):
    str_b = str_a
    str_a = dic1[str_a]
    while(1):
        if str_a in dic1:
            if str_a != str_b:
                str_a = dic1[str_a]
            else:
                str_b = None
                return str_b
                break
        else:
            str_b = str_a
            return str_b
            break

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

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-8-7 08:45:08 | 显示全部楼层
def fun195(dicts,key):
        try:
                fun195(dicts,dicts[key])
        except KeyError:
                print(dicts[key])
        except RuntimeError:
                return None
fun195({'A':'B','B':'C'},'A')

评分

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

查看全部评分

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

使用道具 举报

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

def result(dic,str):
    try:
        if dic[str] in dic.keys():
            return result(dic, dic[str])
        else:
            return dic[str]
    except:
        return None
    
    
dict1 = {"A": "B", "B": "C", "C": "D"}
dict2 = {"A": "B", "B": "C", "C": "D", "D": "A"}
print(result(dict1,'A'))
print(result(dict1,'C'))
print(result(dict1,'E'))
print(result(dict2,'A'))

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-8-7 11:15:33 | 显示全部楼层
本帖最后由 popython 于 2018-8-7 11:16 编辑
def fun(di,di_key):
    A = di.keys()
    ai = len(di)
    di_key = di[di_key]
    while ai:
        
        if di_key in A:
            di_key = di[di_key]
        else:
            return di_key
        ai -= 1
    if ai == 0:
        return None

只想到这样的。。。

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-8-7 11:49:50 | 显示全部楼层
本帖最后由 故梦L 于 2018-8-7 11:58 编辑
def function(dict, _key, keys=list(), values=list()):
    """
    :param count:搜索_key的位置
    :param flag:从_key开始索引
    :return:value or None
    """
    count = 0
    for key,value in dict.items():
        values.append(value)
        keys.append(key)
        if key == _key:
            flag = count
        else:
            count += 1
    for i in range(flag, len(dict)-1):
        if keys[i+1] != values[i]:
            return values[i]
    else:
        return None
   
dict1 = {"A": "H", "B": "C", "C": "D", "D": "E", "E": "F"}
print(function(dict1,'A'))

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-8-7 13:12:30 | 显示全部楼层
gtmp = []
def func195(dic, str):
    global gtmp
    try:
        if dic[str]:
            if dic[str] in gtmp:
                gtmp = []
                return
            else:
                gtmp.append(dic[str])
                return func195(dic, dic[str])
    except:
        gtmp = []
        return dic[str]


if __name__=='__main__':
    dict1 = {"A": "B", "B": "C", "C": "D"}
    print(func195(dict1, "A"))
    print(func195(dict1, "C"))
    dict1 = {"A": "B", "B": "C", "C": "D", "D": "A", "E": "F"}
    print(func195(dict1, "A"))

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> 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

查看全部评分

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

使用道具 举报

发表于 2018-8-7 16:18:47 | 显示全部楼层
def fun195(dic,key):
        if dic[key] in dic:
                dic[key],key=None,dic[key]
                return fun195(dic,key)
        else:
                return dic[key]

评分

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

查看全部评分

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

使用道具 举报

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


def func(ldict, key):
    value = None
    cdict = ldict.copy()
    for i in range(len(ldict)):
        if ldict.__contains__(key):
            value = ldict[key]
            try:
                del cdict[ key ]
            except KeyError:
                return None
            else:
                key = value
        else:
            break
    return value

print(func(dict1, "A"))  #D
print(func(dict1, "M"))  #None
print(func(dict2, "B"))  #None
print(func(dict3, "C"))  #Q

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-8-7 16:53:57 | 显示全部楼层
def fun193(dict1,str1):
    value = dict1[str1]
    while value in dict1.keys():
        value = dict1[value]
        if value == str1:
            return None
    return value

评分

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

查看全部评分

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

使用道具 举报

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


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

评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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