一个关于列表值为字典,进行遍历的求助
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 以后的代码不会被执行
想了一天了 求大佬解救 本帖最后由 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('该员工不存在') jackz007 发表于 2020-12-23 19:37
else 的缩进位置不对,调整一下就可以了。把原来属于 if 的 else 语句调整给了 for 语句,在循环正 ...
strip()方法是干嘛的啊
我的else是和if同级缩进的 papapalongtime 发表于 2020-12-23 19:46
strip()方法是干嘛的啊
我的else是和if同级缩进的
else 的缩进位置是我专门修改的,先看看你的问题解决了没有?
strip() 是字符串的方法,作用是删除字符串首尾的空白字符,像空格、TAB、回车、换行符都属于空白字符,在我的这种写法中,如果键盘输入是一个空回车的话,程序就会直接退出,这是专门为程序设置的退出通道。 jackz007 发表于 2020-12-23 19:58
else 的缩进位置是我专门修改的,先看看你的问题解决了没有?
strip() 是字符串的方法,作 ...
NameError: name 'card_list' is not defined papapalongtime 发表于 2020-12-23 20:08
NameError: name 'card_list' is not defined
二楼的代码已经修改,请再测 jackz007 发表于 2020-12-23 20:14
二楼的代码已经修改,请再测
谢谢大哥 for循环直接用break就行了else :和 for循环同级 缩颈就可以了
print(‘该员工不存在’)
jackz007 发表于 2020-12-23 20:14
二楼的代码已经修改,请再测
感谢大哥的付出因为我不知道else是单独的语句
papapalongtime 发表于 2020-12-23 21:21
谢谢大哥 for循环直接用break就行了else :和 for循环同级 缩颈就可以了
...
Python 语言的 for 语句是可以带 else 语句的,如果循环自然结束(非 break 退出),else 语句块就会被执行,本例利用的正是这种情形。 jackz007 发表于 2020-12-23 19:37
else 的缩进位置不对,调整一下就可以了。把原来属于 if 的 else 语句调整给了 for 语句,在循环正 ...
懂了,学到了
页:
[1]