8、模块初始(库)
一、标准库(不需要安装 python自带)
1、sys
#!/usr/bin/env python import sys print(sys.path) #打印环境变量
sys.argv #脚本的相对路径
sys.argv[1] #输入的第二个参数。
2、os
import os os.system("dir")#执行命令不保存结果 dir windows系统命令
cmd_res=os.popen("dir").read()
print("--->",cmd_res)
os.mkdir('new_dir')
3、创建一个模块
3.1 创建login.py
import getpass _username='alex' _password='123' username = input("username:") password = input("password:")#getpass.getpass("password:") #pycharm 不好使 if username==_username and _password==password: print("welcom user {name} login".format(name=username)) else: print("Invalid username or password") print(password)#缩进表示同级
ps: import 会首先到当前路径下寻找
导入
import login
第三方库(安装后才能使用)
3、Python3 基本数据类型
Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。
在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。
等号(=)用来给变量赋值。
等号(=)运算符左边是一个变量名,等号(=)运算符右边是存储在变量中的值。例如:
实例(Python 3.0+)
#!/usr/bin/env python counter = 100 # 整型变量 miles = 1000.0 # 浮点型变量 name = "runoob" # 字符串 print (counter) print (miles) print (name)
执行以上程序会输出如下结果:
100 1000.0 runoob
多个变量赋值
Python允许你同时为多个变量赋值。例如:
a = b = c = 1
以上实例,创建一个整型对象,值为 1,从后向前赋值,三个变量都指向同一个内存地址。
您也可以为多个对象指定多个变量。例如:
a, b, c = 1, 2, "runoob"
以上实例,两个整型对象 1 和 2 的分配给变量 a 和 b,字符串对象 "runoob" 分配给变量 c。
标准数据类型
Python3 中有六个标准的数据类型:
- Number(数字)
- String(字符串)
- List(列表)
- Tuple(元组)
- Set(集合)
- Dictionary(字典)
Python3 的六个标准数据类型中:
- 不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
- 可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。
三元运算
a,b,c = 1,2,5 d=a if a>b else c
bytes 类型
文本 unicode str
二进制 bytes
‘ff’.encode('utf-8')
msg='世界你好' msg.encode('utf-8').decode('utf-8')
列表
names = ['Zhang','Wang','Li','Bu','Guo'] names.append("Liheng") names[1:3]#顾头不顾尾 ames[-2:]#最后两个 names.insert(1,"Cheng")#下标为1的位置插入
names[2]="Xie"#update
删除
names.remove("Xie") del names[1]
names.pop()#不输入参数默认最后一个
names.pop(1)
查找某个元素的位置
names.index('Xie')
统计
names.count('Bu')
反转
names.reverse()
排序
names.sort()
合并两个列表
names2=[1,2,3] names.extend(names2)
复制列表
names2 = names.copy()
列表嵌套(复制第一个列表每个元素的引用)
names = ['123','qe',['Alex','MI'],'he'] names2 = names.copy()#names2=names[:] names=list(names) names[1] = 'QQ'#names2不会更改 names[2][0]='ALEX'#两个列表都会更改 print(names) print(names2)
完全复制
import copy names = ['123','qe',['Alex','MI'],'he'] names2 = copy.deepcopy(names)#copy.copy(names)还是浅copy names[1] = 'QQ'#names2不会更改 names[2][0]='ALEX'#names2不会更改 print(names) print(names2)
列表循环
for i in names: print(i)
for i in names[0:-1:2]: print(i) namess[::2]
元组 (只读列表 )只有两个方法
names = ('123','asd','sdasd') names.index('asd') names.count('123')
字符串操作
name="my name is bu" name.capitalize()#首字母大写 name.count("m")#统计 name.center(50,'-')#50 个字符,不够用‘-’ name.endswith(".com")#以什么结尾 name.expandtabs(10)#\t (table键)转成多少个空格 name.find("b")#返回字符的下标 name[name.find("n"):9]
name="my name is {name} and I am {age} years old" name.format(name='Wang',age=12)
name="123sad"
name.isalnum()#英文字符和数字
name.isalpha()#纯英文字符
name.isdecimal()#十进制
name.isidentifier()#是不是一个变量名
name.islower()#小写
name.isnumeric()#整数
name.isspace()#空格
name.istitle()#每个单词首字母大写
name.isprintable()#tty file drive file 不能打印
name.isupper()
print('+'.join(['1','2','3']))
name.ljust(50,'*')#右边补上*
name.rjust(50,'*')
name.lstrip()#左边去空格和回车
name.rstrip()
name.strip()
p = str.maketrans('abcdedli','123@#456')
"alex li".translate(p)
"KAAsda".replace('K','L',1)
'alex li'.rfind('l')#找到所有l的最右边的l下标
'1+2+3+4+5'.split('+')#默认为空格
'name\nis ales'.splitlines()#按换行分识别不同系统的换行
'ΑleX'.swapcase()#大写变小写,小写变大写
'my name is'.title()
'sad'.zfill(10)#左边补0
字典
info = { 'stu1101' : 'Wang' 'stu1102' : 'He' 'stu1103' : 'Xiaoze' }#字典是无序的 key-value print(info['"stu1101"])
修改或增加
info['stu1101'] = '武藤兰'#存在就改,不存在就添加
b = {
'stu1101':'212'
'stu1201':'ahd'}
info.update (b)#合并更新与原来相同的key的value
info.items()#转成列表
dict.fromkeys([6,7,8],'text')#初始化一个字典。浅的copy
删除
del info['stu1101'] del info info.pop("stu1101") info.popitem()#随机删
查找
info = { 'stu1101' : 'Wang' 'stu1102' : 'He' 'stu1103' : 'Xiaoze' } info['stu1101']#确定有 info.get('stu1111')#不确定 'stu1104' in info#判断有没有py2.x info.has_key()
info.keys() info.values()
多级嵌套字典
info['dalu'][1]='taiwan' info.setdefault("dalu",{})
循环
for i in info: print(i,info[i])
for k,v in info.items():#转成了列表,变慢很多 print(k,v)
练习:三级菜单
#Author: Xiaochun Bu data = { '北京' : { '昌平':{ '沙河':["华北电力大学",'中国石油大学'], '高教园':["华北电力大学",'中国石油大学'] }, '海淀区':{ '魏公村':'北京理工大学', '中关村':'北京外国语大学'} }, '天津': { '昌平': {'沙河': ["华北电力大学", '中国石油大学'], '高教园': ["华北电力大学", '中国石油大学']}, '海淀区': {'魏公村': '北京理工大学', '中关村': '北京外国语大学'} }, '重庆': { '昌平': {'沙河': ["华北电力大学", '中国石油大学'], '高教园': ["华北电力大学", '中国石油大学']}, '海淀区': {'魏公村': '北京理工大学', '中关村': '北京外国语大学'} }, } exit_flag = True while exit_flag: for i in data : print(i) choice = input('选择进入》》:') if choice in data: while exit_flag: for i2 in data[choice]: print('\t',i2) choice2 = input('选择进入》》:') if choice2 in data[choice]: while exit_flag: for i3 in data[choice][choice2]: print('\t\t', i3) choice3 = input('选择进入3》》:') if choice3 in data[choice][choice2]: for i4 in data[choice][choice2][choice3]: print('\t\t\t', i4) choice4 = input('最后一层,按b返回') if choice4 == 'b': pass elif choice4 =='q': exit_flag=False if choice3 == 'b': break; elif choice3 == 'q': exit_flag = False elif choice2 == 'b': break; elif choice2 == 'q': exit_flag = False elif choice == 'b': break; elif choice4 == 'q': exit_flag = False
集合(去重简单、关系交叉测试)
list_1 = [1,4,5,7,3,6,9] list_1=set(list_1)#变成集合 无序的
list_2=set([2,6,0,66,22,8,4])
list_1.intersection(list_2)
list_1.union(list_2)
list_1.difference(list_2)
list_1.issubset(list_2)
反向差集
list_1.symmetric_difference(list_2)#对称差集
相交与否
list_1.isdisjoint(list_2)
运算符操作
s=set([1,2,3,4]) t=set('hello') a=s | t#并集 b=s & t#交集 c=t-s#差集 d=t^s#对称差集
添加
list_1 = set([1,"23"]) list_1.add('1231')
list_1.update([888,777,555])#添加多个
list_1.remove('1')#可以指定,不存在会报错。
len(list_1)
x in s# 字符串、列表、字典、集合都这么写。
list_1.copy()#浅copy
list_1.pop()#不能指定
list_1.discard("23")#不存在do nothing