鱼C论坛

 找回密码
 立即注册
查看: 1542|回复: 9

[已解决]一个关于列表值为字典,进行遍历的求助

[复制链接]
发表于 2020-12-23 19:18:38 | 显示全部楼层 |阅读模式

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

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

x
card_List = [{'name':'张三','phone':'123','email':'123@qq.com'},
             {'name':'李四','phone':'234','email':'234@qq.com'},
             {'name':'王五','phone':'345','email':'345@qq.com'},
             {'name':'赵九','phone':'456','email':'456@qq.com'}
             ]
FindName = input('请输入你要查询的名字:')
for card_dict in card_List:
    if card_dict['name'] == FindName:
        print('姓名\t\t\t手机号\t\t\t邮箱')
        print('{}\t\t\t{}\t\t\t{}'.format(
                            card_dict['name'],
                            card_dict['phone'],
                            card_dict['email']
             ))
        break
    else:
        print('该员工不存在')

    #print(card_dict)


因为Crad_list 中有4个值为字典的列表
所以在遍历这个列表时 for循环下面的else会被执行好几次
需求是 当我找到在列表中的字典并且打印输出      之前的 或者剩下的遍历循环中中 不会esle 以后的代码不会被执行
想了一天了 求大佬解救
最佳答案
2020-12-23 19:37:26
本帖最后由 jackz007 于 2020-12-23 20:13 编辑

        else 的缩进位置不对,调整一下就可以了。把原来属于 if 的 else 语句调整给了 for 语句,在循环正常结束的时候会执行到里面。如果是 break 退出的循环,就不会执行。
        遍历寻找的逻辑是这样的,如果找到,可以当即下结论并退出循环,但是,没有找到的结论必须要在循环结束了才可以下。  
card_List = [{'name':'张三','phone':'123','email':'123@qq.com'},
             {'name':'李四','phone':'234','email':'234@qq.com'},
             {'name':'王五','phone':'345','email':'345@qq.com'},
             {'name':'赵九','phone':'456','email':'456@qq.com'}]
FindName = input('请输入你要查询的名字:') . strip()
if FindName:
    for d in card_List:
        if d['name'] == FindName:
            print('{}\t\t\t{}\t\t\t{}'.format(
                            d['name'],
                            d['phone'],
                            d['email']))
            break
    else:
        print('该员工不存在')
95e222dab409eebf402057474e0538d.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-12-23 19:37:26 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2020-12-23 20:13 编辑

        else 的缩进位置不对,调整一下就可以了。把原来属于 if 的 else 语句调整给了 for 语句,在循环正常结束的时候会执行到里面。如果是 break 退出的循环,就不会执行。
        遍历寻找的逻辑是这样的,如果找到,可以当即下结论并退出循环,但是,没有找到的结论必须要在循环结束了才可以下。  
card_List = [{'name':'张三','phone':'123','email':'123@qq.com'},
             {'name':'李四','phone':'234','email':'234@qq.com'},
             {'name':'王五','phone':'345','email':'345@qq.com'},
             {'name':'赵九','phone':'456','email':'456@qq.com'}]
FindName = input('请输入你要查询的名字:') . strip()
if FindName:
    for d in card_List:
        if d['name'] == FindName:
            print('{}\t\t\t{}\t\t\t{}'.format(
                            d['name'],
                            d['phone'],
                            d['email']))
            break
    else:
        print('该员工不存在')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-12-23 19:46:05 | 显示全部楼层
jackz007 发表于 2020-12-23 19:37
else 的缩进位置不对,调整一下就可以了。把原来属于 if 的 else 语句调整给了 for 语句,在循环正 ...

strip()方法是干嘛的啊
我的else是和if同级缩进的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-23 19:58:38 | 显示全部楼层
papapalongtime 发表于 2020-12-23 19:46
strip()方法是干嘛的啊
我的else是和if同级缩进的

      else 的缩进位置是我专门修改的,先看看你的问题解决了没有?
      strip() 是字符串的方法,作用是删除字符串首尾的空白字符,像空格、TAB、回车、换行符都属于空白字符,在我的这种写法中,如果键盘输入是一个空回车的话,程序就会直接退出,这是专门为程序设置的退出通道。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-23 20:08:23 | 显示全部楼层
jackz007 发表于 2020-12-23 19:58
else 的缩进位置是我专门修改的,先看看你的问题解决了没有?
      strip() 是字符串的方法,作 ...

NameError: name 'card_list' is not defined
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-23 20:14:09 | 显示全部楼层
papapalongtime 发表于 2020-12-23 20:08
NameError: name 'card_list' is not defined

      二楼的代码已经修改,请再测
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-23 21:21:15 | 显示全部楼层
jackz007 发表于 2020-12-23 20:14
二楼的代码已经修改,请再测

谢谢大哥   for循环直接用break就行了  else :和    for循环同级 缩颈就可以了

                                                                print(‘该员工不存在’)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-23 21:21:55 | 显示全部楼层
jackz007 发表于 2020-12-23 20:14
二楼的代码已经修改,请再测

感谢大哥的付出  因为我不知道else是单独的语句
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-23 21:27:13 | 显示全部楼层
papapalongtime 发表于 2020-12-23 21:21
谢谢大哥   for循环直接用break就行了  else :和    for循环同级 缩颈就可以了

                     ...

        Python 语言的 for 语句是可以带 else 语句的,如果循环自然结束(非 break 退出),else 语句块就会被执行,本例利用的正是这种情形。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-23 21:51:42 | 显示全部楼层
jackz007 发表于 2020-12-23 19:37
else 的缩进位置不对,调整一下就可以了。把原来属于 if 的 else 语句调整给了 for 语句,在循环正 ...

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-17 01:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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