「Python」2020.03.11学习笔记 | 字典内置函数update、pop、切片+图书馆小程序之注册和登录

  • 学习测试开发的Day70,真棒!
  • 学习时间为1H15M
  • 第七次全天课20190126(下午视频3H32M-4H10M)

字典内置的常用函数

使用has_key函数已经从python3中取消,如何判断某个key在字典中是否存在:

a={1:'a',2:"b",3:"c"}
print (1 in a.keys())
print (4 in a.keys())

使用update函数来更新字典的value值

a={1:'a',2:"b",3:"c"}
a.update({4:'c'}) #若不存在key,则增加key和value
a.update({1:'x'}) #若key存在,则直接更新key对应的value
print (a)
>>> d
{1: None, 2: None}
>>> d.update({1:100})
>>> d
{1: 100, 2: None}

>>> d.update({100:100})
>>> d
{1: 100, 2: None, 100: 100}
>>>

字典内置的常用函数之pop数据

image.png

popitem()

>>> d.popitem()
(1, 100)
>>> d.popitem()
(2, None)
>>> d.popitem()
(100, 100)
>>> d.popitem()
Traceback (most recent call last):
  File "", line 1, in 
KeyError: 'popitem(): dictionary is empty'
>>> d
{}

pop()

>>> help(dict.pop)
Help on method_descriptor:

pop(...)
    D.pop(k[,d]) -> v, remove specified key and return the corresponding value.    If key is not found, d is returned if given, otherwise KeyError is raised

>>> d={1:2,3:3,5:6}
>>> d
{1: 2, 3: 3, 5: 6}

>>> d.pop(1)
2
>>> d.pop(1,100)
100
>>> d
{3: 3, 5: 6}
>>>

查看字典的方法

>>> dir(dict)
['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
>>>

序列切片

列表、元组和字符串都是序列。

序列的两个主要特点是索引操作符和切片操作符。

切片操作符是序列名后跟一个方括号,方括号中有一对可选的数字,并且用冒号分隔。

切片操作符中的第一个数(冒号之前)表示切片开始的位置,第二个数(冒号之后)表示切片的结束位置,但不包括这个位置(如:list[2:5])。

如果切片时,不指定第一个数,Python就会从序列的首位置开始(如list[:5])。如果不指定结束位置,Python就会停止在序列尾(如:list[3:])

代码示例1:字符串使用切片

>>> str1
'abdcdwesdfa'
>>> str1[1:5]
'bdcd'
>>> str1[:4]
'abdc'
>>> str1[3:]
'cdwesdfa'
>>> str1[-4:-1]
'sdf'
>>> str1[:20] #超出了序列的长度,一样可以进
行切片,返回整个序列
'abdcdwesdfa
# -*- coding: utf-8 -*-
bookList=['google test','yahaoo
test','sogou test','alibaba test']
print ("我的第一本书",bookList[0])
print ("我的第二本书",bookList[1])
print ("我的第三本书",bookList[2])
print ("我的第四本书",bookList[3])
#切片
print ("我的第二和第三本书
",bookList[1:3])
print ("我的倒数两本书",bookList[2:])
print ("我的最后一本书",bookList[-
1])
print ("我的倒数第二本书",bookList[-
2])
print ("我的全部书",bookList[:])

string="gloryroad test"
#遍历字符串:
for s in string:
print (s)
#字符串的切片操作
print ("字符串的前2个字母
",string[0:2])
print ("字符串的最后2个字母",string[-
2:])
print ("字符串的第3到第5个字母
",string[2:5])
print ("倒着打印最后字母",string[-1])
print ("输出单数的字母",string[::2])
print ("输出双数的字母",string[1::2])
print ("倒着输出所有字母",string[::-1])
print ("倒着输出单数字母",string[::-2])

练习:图书馆

注册和登录

users={"helloyetta":"123456"}
login_users={}
books={}
def register():
    global users
    while 1:
        username = input("请输入您要注册的用户名:")
        if not len(username)>=7:
            print("您输入的用户名少于7位,请重新输入")
            continue
        for i in username:
            if not (i>='a' and i<='z') and i!="_":
                print("您输入的用户名必须是小写字母或者_!")
                break

        else:
            if username in users:
                print("您输入的用户名已经存在,请重新输入!")
                continue
        break
    while 1:
        password=input("请输入您要使用的密码:")
        if not len(password) >=7:
            print("您输入的密码少于7位,请重新输入")
            continue
        for i in password:
            if not(i>='a' and i<='z') and i!='_' and not (i>='0' and i<='9'):
                print("您输入的密码必须是小写字母、_、数字!")
                break
        else:
            password2=input("请再次输入您要使用的密码:")
            if password==password2:
                users[username]=password
                print("%s 注册已经成功!"%username)
                break
            else:
                print("两次密码录入不一致!请重新录入!")
def login():
    global users
    while 1:
        login_username = input("请输入登录的用户名:")
        login_password=input("请输入登录的密码:")
        if login_username in users:
            if login_password==users[login_username]:
                print("%s 用户登录成功!"%login_username )
                login_users[login_username]=None
                break
        print("您输入的用户名和密码有误,请重新输入!")
#login()
#register()
print("欢迎使用光荣之路图书馆系统:")
print("""
    命令清单:
    注册用户请输入:register
    登录请输入:login
""")
while 1:
    command=input("请您输入要操作的命令:")
    if not command in ["register","login"]:
        print("您输入的命令不存在,请重新输入!")
        continue
    exec(command+"()")

结果:

PS D:\0grory\day7> python .\book.py
欢迎使用光荣之路图书馆系统:

        命令清单:
        注册用户请输入:register
        登录请输入:login

请您输入要操作的命令:login
请输入登录的用户名:helloyetta
请输入登录的密码:123456
helloyetta 用户登录成功!
请您输入要操作的命令:register
请输入您要注册的用户名:teacherwang
请输入您要使用的密码:12345678
请再次输入您要使用的密码:12345678
teacherwang 注册已经成功!
请您输入要操作的命令:login
请输入登录的用户名:teacherwang
请输入登录的密码:12345678
teacherwang 用户登录成功!
请您输入要操作的命令:

注册还有个小bug,下段代码有点问题,如果录入不符合下面判断的如yetta1234,不会让重新输入用户名,而是给出提示信息后直接到输入密码了,还需要再想下.....
'''
for i in username:
if not (i>='a' and i<='z') and i!="":
print("您输入的用户名必须是小写字母或者
!")
break
'''

你可能感兴趣的:(「Python」2020.03.11学习笔记 | 字典内置函数update、pop、切片+图书馆小程序之注册和登录)