目录
sorted依照指定关键词排序

用键盘模拟用户输入,判断输入的用户名或密码是否正确,并输出登录信息。
如果输入的用户名存在,且密码正确,则输出success
如果输入的用户名存在,但密码不正确,则输出password error
如果输入的用户名不存在,则输出not found
输入格式
分两行输入,第一行为用户名,第二行为密码。
示例
输入
zhangsan
123456
输出
success
思路:
第一步:先判断username是否在users字典中存在。if username not in users,如果成立,则not found
第二步:如果不成立,继续判断 if users[username]!=password,成立输出 password error
第三步:如果不成立,则直接输出success## ## 这里有一个保存用户账户信息的字典,请用程序模拟系统的登录验证过程
users = {
"alpha": "alpha123",
"beta": "betaisverygood",
"gamma": "1919191923",
"zhangsan": "123456",
"lisi": "123456",
"admin": "ADMIN",
"root": "Root123"
}
username = input()
password = input()
if username not in users:
print("not found")
elif users[username] != password:
print("password error")
else:
print("success")
“Chr 函数:返回与指定的 ANSI 字符代码相对应的字符。
python内置的values()函数返回一个字典中所有的值。
即只返回{key0:value0,key1:value1}中的value0、value1……
>>> d = {'a': 34, 'b': 44, 'c': 45}
>>> d
{'a': 34, 'b': 44, 'c': 45}
>>> list(d.values())
[34, 44, 45]
get()方法的使用
d.get(‘key’,‘value’):如果字典中存在关键字key,则返回关键字对应的值;如果字典d中不存在关键字key,则返回value的值,一般默认为None,也可以返回指定的value值,例如
d={‘name’:‘alex’,‘sex’:‘male’}
a=d.get(‘name’)
print(a)
b=d.get(‘name1’)
print(b)
c=d.get(‘name1’,‘字典中没有name这个键’)
print©
#打印结果:
alex
None
字典中没有name这个键
在python中,eval()方法是一个经常用到的函数,我们在编写输入函数的时候,需要把input()函数写进eval()方法中,这样得到的输入结果就不会是字符串类型的了。
a=(input('请输入一个数字'))
print(type(a))
b=eval(input('请输入一个数字'))
print(type(b))
请输入一个数字3
<class 'str'>
请输入一个数字5
<class 'int'>
“reverse()是python中列表的一个内置方法(在字典、字符串和元组中没有这个内置方法),用于列表中数据的反转
“sorted是python的内置函数,并不是可变对象(列表、字典)的特有方法,sorted()函数需要一个参数(参数可以是列表、字典、元组、字符串),无论传递什么参数,都将返回一个以列表为容器的返回值,如果是字典将返回键的列表。”
python对list有一个内置函数:sorted(),专门用于排序。
举例:
>>> a=[5,3,6,1,9,2]
>>> sorted(a) #a经过sorted之后。得到一个排序结果
[1, 2, 3, 5, 6, 9] #可是,原有的a并没有受到影响
>>> a
[5, 3, 6, 1, 9, 2]
也能够使用list.sort()来进行上述操作。
>>> a.sort()
>>> a #注意这里,经过list.sort()之后,原有
[1, 2, 3, 5, 6, 9] #a的顺序已经发生变化。与上述不同之处。
sorted和list.sort()的差别:list.sort()仅仅能对list类型进行排序。例如以下:
>>> b_dict={1:'e',3:'m',9:'a',5:'e'}
>>> b_dict.sort()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'dict' object has no attribute 'sort'
而sorted则不然。看样例:
>>> b_dict
{1: 'e', 3: 'm', 5: 'e', 9: 'a'}
>>> sorted(b_dict)
[1, 3, 5, 9]
sorted之后。上述对dictinoary中,将key值取出并排序,返回list类型的排序结果。
依照指定关键词排序
在list.sort()和sorted中,都能够依据指定的key值排序。比如:
sorted的样例:
>>> qw="I am Qiwsir you can read my articles im my blog".split()
>>> qw
['I', 'am', 'Qiwsir', 'you', 'can', 'read', 'my', 'articles', 'im', 'my', 'blog']
>>> sorted(qw,key=str.lower) #依照字母升序排列
['am', 'articles', 'blog', 'can', 'I', 'im', 'my', 'my', 'Qiwsir', 'read', 'you']
list.sort()的样例:
>>> qw
['I', 'am', 'Qiwsir', 'you', 'can', 'read', 'my', 'articles', 'im', 'my', 'blog']
>>> qw.sort(key=str.lower)
>>> qw
['am', 'articles', 'blog', 'can', 'I', 'im', 'my', 'my', 'Qiwsir', 'read', 'you']
此外,key还能够接收函数的单一返回值。依照该值排序。比如:
>>> name_mark_age = [('zhangsan','A',15),('LISI','B',14),('WANGWU','A',16)]
>>> sorted(name_mark_age, key = lambda x: x[2]) #依据年龄排序
[('LISI', 'B', 14), ('zhangsan', 'A', 15), ('WANGWU', 'A', 16)]
>>> sorted(name_mark_age, key = lambda x: x[1]) #依据等级排序
[('zhangsan', 'A', 15), ('WANGWU', 'A', 16), ('LISI', 'B', 14)]
>>> sorted(name_mark_age, key = lambda x: x[0]) #依据姓名排序
[('LISI', 'B', 14), ('WANGWU', 'A', 16), ('zhangsan', 'A', 15)]
除了上述方式。python中还提供了一个选择循环选择指定元组值的模块。官方文档:https://docs.python.org/2/library/operator.html#module-operator
>>> from operator import itemgetter
>>> name_mark_age
[('zhangsan', 'A', 15), ('LISI', 'B', 14), ('WANGWU', 'A', 16), ('zhaoliu', 'B', 16)]
>>> sorted(name_mark_age,key=itemgetter(2)) #依照年龄排序
[('LISI', 'B', 14), ('zhangsan', 'A', 15), ('WANGWU', 'A', 16), ('zhaoliu', 'B', 16)]
>>> sorted(name_mark_age,key=itemgetter(1,2)) #先依照等级排序,同样等级看年龄
[('zhangsan', 'A', 15), ('WANGWU', 'A', 16), ('LISI', 'B', 14), ('zhaoliu', 'B', 16)]
在官方文档上。有这样一个样例,和上面的操作是全然一样的。
>>> class Student:
def __init__(self, name, grade, age):
self.name = name
self.grade = grade
self.age = age
def __repr__(self):
return repr((self.name, self.grade, self.age))
>>> student_objects = [
Student('john', 'A', 15), #注意这里,用class Student来生成列表内的值
Student('jane', 'B', 12), #因此,能够通过student_objects[i].age来訪问某个名称的年龄,i=0,则是john的年龄
Student('dave', 'B', 10),
]
>>> sorted(student_objects, key=lambda student: student.age)
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
也能够引用operator模块来实现上述排序
>>>from operator import attrgetter
>>> sorted(student_objects, key=attrgetter('age'))
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
>>> sorted(student_objects, key=attrgetter('grade', 'age'))
[('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]
**总结:**sorted的能力超强,不仅实现排序,还能依照指定关键词排序。
以上样例都是升序。假设,添加reverse=True。比如:
>>>from operator import itemgetter
>>> name_mark_age
[('zhangsan', 'A', 15), ('LISI', 'B', 14), ('WANGWU', 'A', 16), ('zhaoliu', 'B', 16)]
>>> sorted(name_mark_age, key=itemgetter(2),reverse=True)
[('WANGWU', 'A', 16), ('zhaoliu', 'B', 16), ('zhangsan', 'A', 15), ('LISI', 'B', 14)]
26万+

被折叠的 条评论
为什么被折叠?



