wangwt123

Python知识点练习题(一)

一、基础题

1、查看一个对象的类型关键字是什么?查看对象的内存地址关键字是什么?举例说明

答:查看一个对象的类型关键字是type,查看对象的内存地址关键字是id。举例如下:

1 #type()型
2 name=input("What is your name?\n")
3 print(type(name))
4 #id()型
5 print(id(name))

运行结果如下:

What is your name?
Lucy
<class 'str'>
2177634999664

Process finished with exit code 0

2、字符串格式化使用到的关键字是哪个?举例说明

答:到目前为止,python格式化字符串有三种方法,第一是早期就有的%,其次是2.5之后的format(),还有就是3.6版本添加的f字符串调试。

第一种方法:%格式化字符串是python最早的,也是能兼容所有版本的一种字符串格式化方法。

name=str(input("What is your name?\n"))
age=int(input("How old are you?\n"))
sex=bool(input("women/man\n"))
print("My name is %s and I am %d years old and I am a %s."%(name,age,sex))


运行结果如下:
What is your name?
Rose
How old are you?
12
women/man
women
My name is Rose and I am 12 years old and I am a True.

Process finished with exit code 0

显然,%虽然强大,但用起来难免有些麻烦,代码也不是特别美观。

第二种和第三种表示法:.format()和f

name=input("What is your name?\n")
age=input("How old are you?\n")
sex=input("women/man\n")

#在python 2.5 之后,提供了更加优雅的str.format()方法。
print("My name is {0} and I am {1} years old and I am a {2}.".format(name,age,sex))

#f字符串格式化
print(f"My name is {name} and I am {age} years old and I am a {sex}.")


运行结果如下:
What is your name?
Rose
How old are you?
12
women/man
women
My name is Rose and I am 12 years old and I am a women.
My name is Rose and I am 12 years old and I am a women.

Process finished with exit code 0

3、字符串的替换使用到的方法是?

答:字符串的替换使用到的方法是:.replace("旧","新")

str4="hello java"
print(str4.replace("java","world!"))


运行结果如下:
hello world!

Process finished with exit code 0

4、怎么获取字符串的索引信息?

答:获取字符串的索引信息有三种查找方式,一是.index()方法,另一个是.find()方法最后一个是enumerate(),其中,字符串里的位置是从左向右,以0开始的。空格也会算一个元素。

A:.index()方法,查看字符串里面对象的索引,是线性查找的思路。

str4="hhello wohrld"
print(str4.index("h"))
print(str4.index("z"))


运行结果如下:
0
Traceback (most recent call last):
  File "D:\test\code\testDev\python基础\字符串.py", line 58, in <module>
    print(str4.index("z"))
ValueError: substring not found

Process finished with exit code 1

B:.find()方法,也是线性方式查找。

str8="hhello"
print(str8.find("h"))
print(str8.find("a"))



运行结果如下:
0
-1

Process finished with exit code 0

.index()方法和.find()方法的区别:

a:如果index找不到元素,会导致程序报错。

b:如果find找不到元素,会返回-1。

C:enumerate()是将字符串所有的对象都遍历一遍。

str1="Hello!"
for item in enumerate(str1):
    print(item)



运行结果如下:
(0, 'H')
(1, 'e')
(2, 'l')
(3, 'l')
(4, 'o')
(5, '!')

Process finished with exit code 0

.index()方法和enumerate()的区别:

a:.index 返回的是查找对象的索引位置

b:enumerate函数是遍历数据对象,可以返回元素和元素下标

c:如果一个数组中含有相同的数值,那么使用index就无法做到遍历,输出的数值下标信息不全,会有重复。而enumerate函数可以很好的解决这个问题。

5、怎么理解“is”,“in”,“==” ?

答:is:比较的是两个对象的内存地址(id)。

示例1:
a=1
b=a
print(id(a))
print(id(b))

运行结果如下:
2368035383600
2368035383600

Process finished with exit code 0


示例2:
a=1
b="1"
print(id(a))
print(id(b))

运行结果如下:
2404665420080
2404666049328

Process finished with exit code 0


示例3:
a=1
b=1
print(id(a))
print(id(b))

运行结果如下:
2752376564016
2752376564016

Process finished with exit code 0

in:一个对象是否被包含在另外一个对象里面。

str1="abc"
str2="ab"
if str2  in str1:
    print("str2包含在str1里")
else:
    print("str2不包含在str1里")



运行结果如下:
str2包含在str1里

Process finished with exit code 0

==:比较的是两个对象的内容和类型。

示例1:
a="1"
b=1
if a==str(b):
    print("OK")
else:
    print("not ok")

运行结果如下:
OK

Process finished with exit code 0

示例2:
str1="abc"
str2="ABC"
if str1==str2.lower():
    print("ok")
else:
    print("not ok")

运行结果如下:
ok

Process finished with exit code 0

6、举例说明列表推导式的使用。

答:列表推导式的使用场合:在使用for循环的时候,用列表推导来创建新的列表。

列表推导式的语法格式如下:

[表达式 for 迭代变量 in 可迭代对象 [if 条件表达式] ]

此格式中,[if 条件表达式] 不是必须的,可以使用,也可以省略。

可以这样认为,它只是对 for 循环语句的格式做了一下简单的变形,并用 [] 括起来而已,只不过最大的不同之处在于,列表推导式最终会将循环过程中,计算表达式得到的一系列值组成一个列表。

#列表推导式
list=[x for x in range(10) if x>2]
print(list)

#分解列表推导式
list=[]
for x in range(10):  #获取一定的范围:rang(),包含开始不包含最后,从0开始
    if x>2:
        list.append(x)  #append:添加的元素默认在列表的最后一位
print(list)


运行结果如下:
[3, 4, 5, 6, 7, 8, 9]

Process finished with exit code 0

7、使用列表推导式实现取出100数字以内整除2的数字。

答:

list=[x for x in range(100) if x%2==0]
print(list)


运行结果如下:
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98]

Process finished with exit code 0 

8、列表中append()与insert()的区别是什么?举例说明

答:append()与insert()这2个函数在列表中均表示的是增加。

append:添加的元素默认在列表的最后一位。

insert:可以指定元素添加的位置。

#.append():添加的元素默认在列表的最后一位。
list1=["Go","Python","Java"]
list1.append("Net")
print(list1)

#.insert():可以指定元素添加的位置。
list1=["Go","Python","Java"]
list1.insert(3,"C++")
print(list1)


运行结果如下:
['Go', 'Python', 'Java', 'Net']
['Go', 'Python', 'Java', 'C++']

Process finished with exit code 0

9、怎么取出列表中相同的数据,所有的数据和不同的数据?举例说明

答:首先把列表转为set集合,然后按照集合的交集,并集,差集来提取列表中的数据。

list1=["go","java","Python","c"]
list2=["a","b","go","java","c"]

#交集(&):获取两个对象中的共同拥有的值,很重要!!
print(set(list1)&set(list2))

#并集(|):把他们所有的元素合并在一起组成的集合。
print(set(list1)|set(list2))

#差集(-):list1和list2是两个集合,则所有属于list1且不属于list2的元素构成的集合。
print(set(list1)-set(list2))
print(set(list2)-set(list1))

运行结果如下:
{'java', 'go', 'c'}
{'a', 'c', 'go', 'java', 'Python', 'b'}
{'Python'}
{'b', 'a'}

Process finished with exit code 0

10、字符串与列表之间的互相转换。

#字符串转列表,使用.split()函数,这个函数本身就是列表型的。
str="hello world!"
str_list=str.split(" ")
print(str_list)
print(type(str_list))


#列表转字符串,使用.join()函数,这个函数本身就是字符串型的。
list_str=" ".join(str_list)
print(list_str)
print(type(list_str))


运行结果如下:
['hello', 'world!']
<class 'list'>
hello world!
<class 'str'>

Process finished with exit code 0

11、当元组只有一个对象的时候,需要注意什么?

答:当元组只有一个对象的时候,记得加逗号,否则,系统会认为是字符串型。

tuple=("APPLE")
print(tuple)
print(type(tuple))

tuple1=("APPLE",)
print(tuple1)
print(type(tuple1))


运行结果如下:
APPLE
<class 'str'>
('APPLE',)
<class 'tuple'>

Process finished with exit code 0

12、列表与元组的区别是什么?

答:列表:list=["apple","banana","orange"]

       元组:tuple=("Go","Java","Python","C++")
区别:从形式上来看:列表使用的是中括号“[]”,元组使用的是小括号“()”。
          从运行速度上来看:Python内部对元组进行了大量的优化,访问和处理速度都比列表快。
          从内容上来看:列表是可变的,如果你想要增加、删减或者改变元素,那么列表显然更优。而元组是不可变的类型。因为对于元组来说,必须得通过新建一个元组来完成。

13、结合具体的代码案例说明演示字典的有序和字典的排序。

答:字典的有序,是按照我们人的主观意愿来进行排序的,使用的函数是:OrderedDict()函数。

#比如我想编写这样的字典:dict1={"name":"Lucy","age":12,"sex":"女"}
from collections import OrderedDict
dict1=OrderedDict()
dict1["name"]="Lucy"
dict1["age"]=12
dict1["sex"]=""
print(dict(dict1))


运行结果如下:
{'name': 'Lucy', 'age': 12, 'sex': ''}

Process finished with exit code 0

字典的排序,是按照计算及ASCLL码来进行排序,使用的函数是:sorted(),根据"key"和"value"来排序。

#对dict1={"name":"Lucy","age":12,"sex":"女"}排序
#都改为str型
dict2={"name":"Lucy","age":"12","sex":""}

#按照key值来排序:
data1=sorted(dict2.items(),key=lambda item:item[0])
print(dict(data1))

#按照value值来排序:
data2=sorted(dict2.items(),key=lambda item:item[1])
print(dict(data2))


运行结果如下:
{'age': '12', 'name': 'Lucy', 'sex': ''}
{'age': '12', 'name': 'Lucy', 'sex': ''}

Process finished with exit code 0

14、字符串与字典之间的互相转换。

#字符串转字典,曲线救国
#字符串转列表
str="hello world!"
str_list=str.split(" ")  #['hello', 'world!']
#列表转字典
str_list_dict=enumerate(str_list)
print(dict(str_list_dict))
print(type(dict(str_list_dict))) #{0: 'hello', 1: 'world!'}

#字典转字符串,曲线救国
#字典转列表
str_list_dict_list=list(dict(str_list_dict).items())
str_list_dict_list_str=" ".join(str_list)  #这块要注意,转换
print(str_list_dict_list_str)
print(type(str_list_dict_list_str))


运行结果如下:
{0: 'hello', 1: 'world!'}
<class 'dict'>
hello world!
<class 'str'>

Process finished with exit code 0

15、什么是序列化与反序列化,举例说明列表、元组、字典序列化与反序列化。

答:序列化:把Python对象(字典、列表、元组)转为字符串的过程。

       反序列化:把字符串转为Python对线(字典、列表、元组)的过程。

a:列表的序列化与反序列化

import json
#列表的序列化
list=[x for x in range(5)]
list_str=json.dumps(list)
print(list_str)
print(type(list_str))

#列表的反序列化
str_list=json.loads(list_str)
print(str_list)
print(type(str_list))


运行结果如下:
[0, 1, 2, 3, 4]
<class 'str'>
[0, 1, 2, 3, 4]
<class 'list'>

Process finished with exit code 0

虽然运行出来,展示的列表形式,但是序列化后确实是字符型,非序列化后字列表型。

b:元组的序列化与反序列化(很特殊)

import json
#列表的序列化
tuple=("apple","orange")
tuple_str=json.dumps(tuple)
print(tuple_str)
print(type(tuple_str))

#列表的反序列化
str_tuple=json.loads(tuple_str)
print(str_tuple)
print(type(str_tuple))


运行结果如下:
["apple", "orange"]
<class 'str'>
['apple', 'orange']
<class 'list'>

Process finished with exit code 0

通过运行出来的结果可知,不论是序列化还是反序列化,展示出来的都是列表的形式,序列化的类型是字符串,非序列化的类型是列表型。

c:字典的序列化与反序列化

import json
#字典的序列化1
dict={"name":"Lucy","age":23,"city":"xi'an"}
dict_str=json.dumps(dict,indent=True,ensure_ascii=True)
print(dict_str)
print(type(dict_str))

#字典的序列化2
dict1={"name":"黛西","age":23,"city":"西安"} #注意有中文
dict1_str=json.dumps(dict1,indent=True,ensure_ascii=False)
print(dict1_str)
print(type(dict1_str))

#字典非序列化
str_dict=json.loads(dict1_str)
print(str_dict)
print(type(str_dict))


运行结果如下:
{
 "name": "Lucy",
 "age": 23,
 "city": "xi'an"
}
<class 'str'>
{
 "name": "黛西",
 "age": 23,
 "city": "西安"
}
<class 'str'>
{'name': '黛西', 'age': 23, 'city': '西安'}
<class 'dict'>

Process finished with exit code 0

虽然运行出来,展示的字典形式,但是序列化后确实是字符型,非序列化后字典型。

16、序列化与反序列化,结合字典编写,结合文件实现。

答:针对文件的序列化和反序列化

序列化:把第三方的内容写到文件中去,使用函数json.dump()

反序列化:从文件中读取数据,使用函数json.load()

#在Python里新建一个空白文件,名为"json.txt"
import json
#假设第三方的内容为:
dict1={"name":"黛西","age":12,"city":"Beijing"} #这里出现了中文,记得ensure_ascii=False
#文件的序列化操作json.dump()
json.dump(dict1,open(file="json.txt",mode="w",encoding="UTF-8"),ensure_ascii=False)

#文件的非序列化操作json.load
data=json.loads(open(file="json.txt",mode="r",encoding="UTF-8"))
print(data)
print(type(data))
#写的是字典型,对应的也会输出字典型的

运行结果如下:
{'name': '黛西', 'age': 23, 'city': "xi'an"}
<class 'dict'>

Process finished with exit code 0

17、结合函数的返回值编写一个案例。

 1 def shopping(things="shoes",colour="yellow"):
 2     if things=="clothes" and colour=="yellow":
 3         return True
 4     else:
 5         return False
 6 
 7 
 8 def profile():
 9     if shopping()==True:
10         print("加购成功!")
11     else:
12         print("加购失败!")
13 profile()
14 
15 
16 运行结果如下:
17 加购失败!
18 
19 Process finished with exit code 0

18、编写一个读取文件内容和把内容写入文件的程序。

 1 #把内容写入文件方法1
 2 def open_W():
 3     f=open(file="data.txt",mode="w",encoding="UTF-8")
 4     f.write("我想吃🍉!")
 5     f.close()
 6 open_W()
 7 
 8 #把内容写入文件方法2
 9 def with_W():
10     with open(file="data.txt",mode="w",encoding="UTF-8") as f:
11         print(f.write("我想吃🍉!"))
12 with_W()
13 
14 #读取文件内容方法1
15 def open_R():
16     f=open(file="data.txt",mode="r",encoding="UTF-8")
17     print(f.read())
18     f.close()
19 open_R()
20 
21 #读取文件内容方法2
22 def with_R():
23     with open(file="data.txt",mode="r",encoding="UTF-8") as f:
24         print(f.read())
25 with_R()
26 
27 
28 运行结果如下:
29 打开data.txt,可以看到文件里有:我想吃🍉!
30 5
31 我想吃🍉!
32 
33 Process finished with exit code 0

19、获取当前时间。

import datetime
import time
print(datetime.datetime.now())


运行结果如下:
2022-06-26 21:02:01.205338

Process finished with exit code 0

二、综合实战

1、输出Java

data2=[["Go",["Java"]]]

data2=[["Go",["Java"]]]
print(data2[0][1][0])

运行结果:

Java

Process finished with exit code 0

2、输出c
lists=['language',['go','python',['java','net',['c']]]]

lists=['language',['go','python',['java','net',['c']]]]
print(lists[1][2][2][0])

运行结果:

c

Process finished with exit code 0

3、输出唐山
datas=["go",{"name":'lisi',"age":18,'address':["xian",'唐山']}]

datas=["go",{"name":'lisi',"age":18,'address':["xian",'唐山']}]
print(datas[1]["address"][1])

运行结果:

唐山

Process finished with exit code 0

4、获取公司数据,合理的取数据。

data1=["Go","Python","阿里巴巴","腾讯","百度","字节跳动"]

(1):获取Go,并输出列表剩下的元素。

data1=["Go","Python","阿里巴巴","腾讯","百度","字节跳动"]
a,*b=data1
print(a)
print(b)



运行结果如下:
Go
['Python', '阿里巴巴', '腾讯', '百度', '字节跳动']

Process finished with exit code 0

(2):获取Go,Python,并输出列表剩下的元素。

data1=["Go","Python","阿里巴巴","腾讯","百度","字节跳动"]
a,b,*c=data1
print(a,b)
print(c)


运行结果如下:
Go Python
['阿里巴巴', '腾讯', '百度', '字节跳动']

Process finished with exit code 0

5、将列表里的元素,转换成字符串型。

lists=["正常双休" ,"带薪年假","五险一金"]

lists=["正常双休" ,"带薪年假","五险一金"]
lists_str=",".join(lists)
print(lists_str)
print(type(lists_str))

运行结果如下:
正常双休,带薪年假,五险一金
<class 'str'>

6、dict1={"name":"Lucy","age":23}

dict2={"sex":"女","salary":8000}

(1):分别获取name里的value,获取age里的value。

data1=dict1["name"]
print(data1)

data2=dict1["age"]
print(data2)



运行结果如下:
Lucy
23

Process finished with exit code 0

(2):给dict1增加一个"sex":"女"。

dict1["sex"]=""
print(dict1)


运行结果如下:
{'name': 'Lucy', 'age': 23, 'sex': ''}

Process finished with exit code 0

(3):将dict1里的name后的"Lucy"改为"Rose"。

dict1["name"]="Rose"
print(dict1)

运行结果如下:
{'name': 'Rose', 'age': 23}

Process finished with exit code 0

(4):删除dict1里的"name":"Lucy"。

del dict1["name"]
print(dict1)


运行结果如下:
{'age': 23}

Process finished with exit code 0

(5):在字典dict1里查找所有的key值。

for item in dict1.keys():
    print(item)


运行结果如下:
name
age

Process finished with exit code 0

(6):在字典dict1里查找所有的value值。

for item in dict1.values():
    print(item)


运行结果如下:
Lucy
23

Process finished with exit code 0

(7):查找字典dict1里所有的键值对。

for key,value in dict1.items():
    print(key,value)


运行结果如下:
name Lucy
age 23

Process finished with exit code 0

(8):将字典dict2追加到字典dict1后面。

dict1.update(dict2)
print(dict1)

运行结果如下:
{'name': 'Lucy', 'age': 23, 'sex': '', 'salary': 8000}

Process finished with exit code 0

7、提取出90。

dict2={"name":"wuyan","age":18,"datas":[{"english":90,"math":100}]}

dict2={"name":"wuyan","age":18,"datas":[{"english":90,"math":100}]}
print(dict2["datas"][0]["english"])

运行结果:

90

Process finished with exit code 0

8、a、输出所有人的成绩   b、获取成绩里面的最高分,最低分,平均分,并且进行排序。

data=[ ("wangxiaoping","90"), ("zhaosi","89"),("gaosan","65"),("lihua","99"),("huahua","67")]

1 data=[ ("wangxiaoping","90"), ("zhaosi","89"),("gaosan","65"),("lihua","99"),("huahua","67")]     
2 score=[]                                                                                          
3 for item in data:                                                                                 
4     score.append(int(item[1]))      #为了提取出每个人的成绩                                                  
5 print(max(score))    #最高分                                                                             
6 print(min(score))    #最低分                                                                            
7 print(sum(score)/len(score))    #平均分                                                                  
8 score.sort()      #默认从小到大排序                                                                       
9 print(score)                                                                                      

运行结果:

99
65
82.0
[65, 67, 89, 90, 99]

Process finished with exit code 0

9、输出分数的最高分,最低分,平均分。
dict1={'name':'wuya',"score":[
{"score":"90"},
{'score':"88"},
{'score':"60"}]}

 1 dict1={'name':'wuya',"score":[                             
 2 {"score":90},                                              
 3 {'score':88},                                              
 4 {'score':60}]}                                             
 5 test=[]                                                    
 6 for item in dict1["score"]:                                
 7     test.append(int(item["score"]))      #为了提取出每个人的成绩           
 8 print(max(test))      #最高分                                 
 9 print(min(test))      #最低分                                 
10 print(sum(test)/len(test))   #平均分                          

运行结果:

90
60
79.33333333333333

Process finished with exit code 0

10、在如下数据中获取学生成绩,输出如下几点:

A、学生最高,最低,平均成绩

B、过滤出成绩大于等于60的学生成绩

C、过滤出成绩小于60分的

D:过滤出成绩大于等于60的学生的名字

dict1={'status':0,'msg':'msg','data':[
{'name':"lisi","score":"90"},
{'name':"wangwu","score":"60"},
{'name':"lisi1","score":"88"},
{'name':"lisi2","score":"59"},
{'name':"lisi3","score":"24"},
{'name': "lisi4", "score": "66"},
{'name': "lisi5", "score": "70"},
{'name': "lisi6", "score": "45"},
{'name': "lisi7", "score": "39"}
]}

A:学生最高,最低,平均成绩

1 test=[]                               
2 for item in dict1["data"]:            
3     test.append(int(item["score"]))   
4 print(max(test))                      
5 print(min(test))                      
6 print(sum(test)/len(test))            

运行结果:

90
24
60.111111111111114

Process finished with exit code 0

B、过滤出成绩大于等于60的学生成绩

C、过滤出成绩小于60分的

1 test=[]                                                         
2 for item in dict1["data"]:                                      
3     test.append(int(item["score"]))                             
4 test1=list(filter(lambda test:test>=60,test))                   
5 print(test1)                                                    
6 test2=list(filter(lambda test:test<60,test))                    
7 print(test2)                                                    

运行结果:

[90, 60, 88, 66, 70]
[59, 24, 45, 39]

Process finished with exit code 0

D:过滤出成绩大于等于60的学生的名字

1 for item in dict1["data"]:    
2     if int(item["score"])>=60:
3         print(item["name"])   

运行结果:

lisi
wangwu
lisi1
lisi4
lisi5

Process finished with exit code 0

11、获取所有的城市
data4={"code":0,"message":"Success","zpData":[{"name":"全国","code":100010000,"url":"/?city=100010000"},{"name":"北京","code":101010100,"url":"/beijing/"},{"name":"上海","code":101020100,"url":"/shanghai/"},{"name":"广州","code":101280100,"url":"/guangzhou/"},{"name":"深圳","code":101280600,"url":"/shenzhen/"},{"name":"杭州","code":101210100,"url":"/hangzhou/"},{"name":"天津","code":101030100,"url":"/tianjin/"},{"name":"西安","code":101110100,"url":"/xian/"},{"name":"苏州","code":101190400,"url":"/suzhou/"},{"name":"武汉","code":101200100,"url":"/wuhan/"},{"name":"厦门","code":101230200,"url":"/xiamen/"},{"name":"长沙","code":101250100,"url":"/changsha/"},{"name":"成都","code":101270100,"url":"/chengdu/"},{"name":"郑州","code":101180100,"url":"/zhengzhou/"},{"name":"重庆","code":101040100,"url":"/chongqing/"},{"name":"佛山","code":101280800,"url":"/foshan/"},{"name":"合肥","code":101220100,"url":"/hefei/"},{"name":"济南","code":101120100,"url":"/jinan/"},{"name":"青岛","code":101120200,"url":"/qingdao/"},{"name":"南京","code":101190100,"url":"/nanjing/"},{"name":"东莞","code":101281600,"url":"/dongguan/"},{"name":"昆明","code":101290100,"url":"/kunming/"},{"name":"南昌","code":101240100,"url":"/nanchang/"},{"name":"石家庄","code":101090100,"url":"/shijiazhuang/"},{"name":"宁波","code":101210400,"url":"/ningbo/"},{"name":"福州","code":101230100,"url":"/fuzhou/"}]}

1 data4={} #省略,如上图所示
2 city=[]                                    
3 for item in data4["zpData"]:               
4     city.append(item["name"])              
5 print(city)                                                                         

运行结果如下:

['全国', '北京', '上海', '广州', '深圳', '杭州', '天津', '西安', '苏州', '武汉', '厦门', '长沙', '成都', '郑州', '重庆', '佛山', '合肥', '济南', '青岛', '南京', '东莞', '昆明', '南昌', '石家庄', '宁波', '福州']

Process finished with exit code 0

12、用函数的导包的方式

dict1={"name":"Lucy","age":23,"city":"xi'an","time":time.time()}

a、针对字典进行排序,以key值来排序。b、把排序后的字典处理成key1=value1&key1=value2。  c、进行md5加密。(md5是一种加密方式,md5加密后基本破解不了。)

 1 import time
 2 from urllib import parse
 3 import hashlib
 4 #urllib 是网络爬虫
 5 
 6 def password():
 7     dict1={"name": "Lucy", "age": 23, "city": "xi'an", "time": time.time()}
 8 
 9     #字典进行排序
10     data=dict(sorted(dict1.items(),key=lambda item:item[0]))
11     print(data)
12 
13     #把排序后的字典处理成key1=value1&key1=value2。
14     data2=parse.urlencode(data)
15     print(data2)
16     #进行md5加密
17     m=hashlib.md5()
18     m.update(data2.encode("UTF-8"))
19     print("加密后的结果信息:\n",m.hexdigest()) #哈希函数,不可逆,意味着如果您只知道输出,就无法确定输入
20 password()

运行结果如下:

{'age': 23, 'city': "xi'an", 'name': 'Lucy', 'time': 1656254535.887048}
age=23&city=xi%27an&name=Lucy&time=1656254535.887048
加密后的结果信息:
 297d822bbd3317787a69beb368a35e4d

Process finished with exit code 0

13、设计函数,将通过文件的写入与读取,实现:a、注册登录 b、登陆成功后,显示个人主页 c、通过控制台的模式来交互

 1 #公共部分:封装思想,减少重复代码的书写
 2 def out():
 3      username=input("请输入您的账号:\n")
 4      password=input("请输入您的密码:\n")
 5      return username,password
 6 
 7 #注册
 8 def registred():
 9      username,password=out()
10      temp=username+"-"+password
11      with open(file="login.txt",mode="w",encoding="UTF-8") as f:
12          f.write(temp)
13 
14 #登陆
15 def login():
16     username, password = out()
17     temp = username + "-" + password
18     with open(file="login.txt", mode="r", encoding="UTF-8") as f:
19         list=f.read().split("-")
20     if username==list[0] and password==list[1]:
21         return True
22     else:
23         print("您的账号或者密码有误,请重新登录!")
24 
25 #登陆成功后,显示个人主页
26 def profile():
27     with open(file="login.txt",mode="r",encoding="UTF-8") as f:
28         list=f.read().split("-")
29     print("欢迎{0}来到主页面!".format(list[0]))
30 
31 #通过控制台的模式来交互
32 def principal():
33      while True:
34          try:  #异常处理
35              f=int(input("1、注册,2、登陆\n"))
36              if f==1:
37                  registred()
38              elif f==2:
39                  if login()==True:
40                      profile()
41                  else:
42                      print("请重新登录!")
43              else:
44                  break
45          except:
46              continue
47 if __name__ == '__main__':#作为程序的入口,执行函数
48      principal()

运行结果如下:

1、注册,2、登陆
1
请输入您的账号:
admin
请输入您的密码:
123
1、注册,2、登陆
2
请输入您的账号:
admin
请输入您的密码:
123
欢迎admin来到主页面!
1、注册,2、登陆
2
请输入您的账号:
Rose
请输入您的密码:
4325
您的账号或者密码有误,请重新登录!
请重新登录!
1、注册,2、登陆
3

Process finished with exit code 0

posted on 2022-06-26 22:43  DOUBLE快乐  阅读(200)  评论(0编辑  收藏  举报

导航