首页 > 代码库 > python之day2
python之day2
模块初识
模块分两种:标准库和第三方库
Sys和os模块,标准库
Import sys
Sys.path #print(sys.path)
起名字时不能与导入的库名一样,因为导入的时候首先会到当前目录中找,这样就会导入自己。
Python和系统都有一个环境变量,print(sys.path)可以打印出python的环境变量,输出结果如下:
[‘D:\\python_file\\day2‘, ‘D:\\python_file‘, ‘C:\\Python35\\python35.zip‘, ‘C:\\Python35\\DLLs‘, ‘C:\\Python35\\lib‘, ‘C:\\Python35‘, ‘C:\\Python35\\lib\\site-packages‘]
导入某个模块必须在python的列出来的目录中,一般的第三方库放在\\lib\\site-packages,标准库一般放在lib下。
Sys.argv #print(sys.argv) 打印相对路径,并记录参数,如下操作:
可以读到参数的值,并根据参数的值做判断,可以使用下面的命令读取到第二个值
Print(sys.argv[2])
Import os #跟操作系统相关的命令
import os os.system("dir") # 会有乱码,是编码的问题cmd_res = os.system("dir") # 执行命令,不保存输出内容print("--->", cmd_res) # 输出命令执行的结果,0表示执行成功,1表示执行失败cmd2_res = os.popen("dir")print("--->", cmd2_res) # 打印的是内存的对象地址cmd3_res = os.popen("dir").read() # 通过read方法读取内容print("--->", cmd3_res) # 打印内容,并且编码问题也解决了os.mkdir("new_dir") # 在当前目录下创建一个目录(文件夹)
用户输入用户名密码的模块,个人模块使用
Pyc是什么?
Python是一门先编译后解释的语言,在运行之前进行一次预编译。
当python程序运行时,编译的结果则是保存在位于内存中的pycodeobject中,当python程序运行结束时,python解释器则将pycodeobject写回到pyc文件中。
当python程序第二次运行时,首先程序会在硬盘中找pyc文件,如果找到,并且时间比源文件要新,则直接载入,否则就重复上面的过程。
数据类型python
1、 数字
int(整型)
32位机器上取值范围-2**31~2**31-1:- 2147483648~2147483647
64位机器上取值范围-2**63~2**63-1:-9223372036854775808~9223372036854775807
long(长整型)
python3中都是整型,没有长整型的类型
float(浮点型)
浮点数用来处理实数,即带有小数的数字。
complex(复数)工程领域使用,一般用不到
2、 布尔值
真或假:1或0
3、 字符串
字符串拼接:单双引号都可以,可以使用+拼接,如下情况+可以省略,但如果是字符串赋值给了变量,两个变量要进行拼接不能省略+
字符串比较:长度及各位置上的字符均要相等
数据运算
算数运算
+
_
*
/
%取模,返回余数
**多少次方
//整除,返回整除的部分
比较运算符
==
!=或<>都表示不等于
>
<
>=
<=
赋值预算符
=赋值
+=
-=
/=
逻辑运算
and
or
not
成员运算:
in:如果在序列中找到返回true,否则返回false
not in:如果在序列中没有找到返回true
身份运算:
is
not is
位运算:二进制运算
& 两个都为真
|
^ 异或运算:两个相同为0,不同为1
~ 按位取反,是一个值取反
<< 左移
>> 右移
计算机中能表示的最小单位,是一个二进制位
计算机中能存储的最小单位,是一个二进制位
8bit=byte(字节)
bytes数据类型
三元运算
如果if的条件成立,则d=a,否则d=b
字符串和byte类型
注:字符串类型的只能encode,bytes类型的只能decode
列表的使用
names =[“ZhangYang”,”GuPeng”,”WangLiang”,”TianXue”]
切片
print(names[0])
print(names[1:3])
print(names[-2:-3])
print(names[0:-1:2]) # 步长切片,0和-1可以省略即print(names[::2])
增删改查
names.append(“XuQing”)
names.insert(1,”XinZhiYu”) #插入的位置
names[2]=”MingMing” #直接把位置替换
names.remove=”MingMing” #删除该内容
del names[1] #删除下标为1的内容
names.pop(1) #删除下标为1的内容
names.append(“XuQing”) #再增加一个同名的内容
其它方法
print(names.count(“XuQing”)) #输出显示2,表示列表中有2个XuQing
names.clear() #清空列表
names.reverse() #整个内容反过来,即第一个将排到最后一个显示
names.sort() #特殊符号、数字、大写字母、小写字母,按ascii照码表中的顺序排序
names2=[1,3,4]
names.extend(names2) #把names2中的内容合并到names中,names2还保留
print(names,names2)
del names2 #删除变量
names = ["ZhangYang", "WangLiang", "TianXue", "GuanYu"]
names2= names.copy()
print(names)
print(names2)
输出结果(copy成功,names的内容全部copy了一份儿):
C:\Python35\python3.exe D:/python_file/day2/list.py
[‘ZhangYang‘, ‘WangLiang‘, ‘TianXue‘, ‘GuanYu‘]
[‘ZhangYang‘, ‘WangLiang‘, ‘TianXue‘, ‘GuanYu‘]
names = ["ZhangYang", "WangLiang", "TianXue",["Jiyuyang", "Liubang"], "GuanYu"]
names2= names.copy()
print(names)
print(names2)
names[1] = "王亮" # names中的内容修改为中文
print(names) # names修改成功
print(names2) # names2不变
names[3][0] = "JIYUYANG"
print(names) # names修改成功
print(names2) # names2也跟着修改了
输出结果:
C:\Python35\python3.exe D:/python_file/day2/list.py
[‘ZhangYang‘, ‘WangLiang‘, ‘TianXue‘, [‘Jiyuyang‘, ‘Liubang‘], ‘GuanYu‘]
[‘ZhangYang‘, ‘WangLiang‘, ‘TianXue‘, [‘Jiyuyang‘, ‘Liubang‘], ‘GuanYu‘]
[‘ZhangYang‘, ‘王亮‘, ‘TianXue‘, [‘Jiyuyang‘, ‘Liubang‘], ‘GuanYu‘]
[‘ZhangYang‘, ‘WangLiang‘, ‘TianXue‘, [‘Jiyuyang‘, ‘Liubang‘], ‘GuanYu‘]
[‘ZhangYang‘, ‘王亮‘, ‘TianXue‘, [‘JIYUYANG‘, ‘Liubang‘], ‘GuanYu‘]
[‘ZhangYang‘, ‘WangLiang‘, ‘TianXue‘, [‘JIYUYANG‘, ‘Liubang‘], ‘GuanYu‘]
注:copy只是浅copy,第一层的内容copy过来,当遇到第二层比如列表,只copy内存地址,所以当改第二层的数据时,names2的数据也会变
names = ["ZhangYang", "TianXue",["Jiyuyang", "Liubang"], "GuanYu"] names2 = namesnames[0]= "张扬"names[2][0]= "JIYUYANG"print(names)print(names2) a = 1b = a a = 2print(a, b)
输出结果:
C:\Python35\python3.exe D:/python_file/day2/list.py
[‘张扬‘, ‘TianXue‘, [‘JIYUYANG‘, ‘Liubang‘], ‘GuanYu‘]
[‘张扬‘, ‘TianXue‘, [‘JIYUYANG‘, ‘Liubang‘], ‘GuanYu‘]
2 1
注:列表的赋值和普通数字或字符的赋值有本质区别,列表的赋值完全是内存地址,而普通数字或字符的赋值是真实的值而不是地址。
import copy names = ["ZhangYang", "TianXue",["Jiyuyang", "Liubang"], "GuanYu"] names2= copy.deepcopy(names)print(names)print(names2) names[1] = "田雪" # names中的内容修改为中文print(names) # names修改成功print(names2) # names2不变names[2][0] = "JIYUYANG"print(names) # names修改成功print(names2) # names2不变
输出结果:
C:\Python35\python3.exe D:/python_file/day2/list.py
[‘ZhangYang‘, ‘TianXue‘, [‘Jiyuyang‘, ‘Liubang‘], ‘GuanYu‘]
[‘ZhangYang‘, ‘TianXue‘, [‘Jiyuyang‘, ‘Liubang‘], ‘GuanYu‘]
[‘ZhangYang‘, ‘田雪‘, [‘Jiyuyang‘, ‘Liubang‘], ‘GuanYu‘]
[‘ZhangYang‘, ‘TianXue‘, [‘Jiyuyang‘, ‘Liubang‘], ‘GuanYu‘]
[‘ZhangYang‘, ‘田雪‘, [‘JIYUYANG‘, ‘Liubang‘], ‘GuanYu‘]
[‘ZhangYang‘, ‘TianXue‘, [‘Jiyuyang‘, ‘Liubang‘], ‘GuanYu‘]
注:此时names2完全独立了是直接把names的内容copy一份儿,并占独立的内存地址,此时修改names的任何内容,names2都不变。一般情况下慎用深copy,因为数据量大的时候很占内存,知道就可以。
列表的循环:
names = ["ZhangYang", "TianXue",["Jiyuyang", "Liubang"], "GuanYu"]for list_content in names: print(list_content)
元组与购物车程序练习
元组tuple:只能查,所以又叫只读列表
name=(“ZhangYang”, “Liubang” , “Jiyuyang”)
只有两个方法:
name.index
name.count
第一次比较low的代码:
shopping_list = [["iphone", 6000],
["iwatch", 2000],
["book", 80],
["banana", 20],
]
cart = []
flag = False
salary = int(input("please input your salary:"))
while not flag:
product_num = 0
for product in shopping_list:
print(product_num, product[0], product[1])
product_num += 1
choice = str(input("please input product number:"))
if choice.isdigit():
choice = int(choice)
if shopping_list[choice][1] <= salary:
salary = salary - shopping_list[choice][1]
print("shopping successful,and your salary", salary)
cart.append(shopping_list[choice])
elif shopping_list[choice][1] > salary:
print("your balance:", salary)
elif choice == "q":
flag = True
else:
print("please select your shopping or exit:")
print("your list:", cart)
第二次比较low的代码(格式化输出、高亮输出、容错性好一些):
wal_mart = [
["Iphone", 6000],
["Iwatch", 2000],
["Ipad", 1888],
["Aisleep", 128],
["coffee", 31],
["bicycle", 1200]
]
cart_list = []
flag = False
while not flag:
salary = input("please input you salary(must be number):")
if salary.isdigit():
while not flag:
print("----------------------wal_mart china-------------------")
for product_list in wal_mart:
print(wal_mart.index(product_list), product_list)
salary = int(salary)
choice = input("please input your choice:")
if choice.isdigit():
choice = int(choice)
if choice >= 0 and choice < len(wal_mart):
if salary >= wal_mart[choice][1]:
cart_list.append(wal_mart[choice])
salary -= wal_mart[choice][1]
print("add \033[1;32m {name} \033[0m successful.".format(name=wal_mart[choice]))
else:
print("Not sufficient funds,\033[1;31m your balance is %d\033[0m."%(salary))
elif choice == "q":
print("--------------cart list-----------------")
for buy_product in cart_list:
print(buy_product)
print("\033[1;31m your balance is %d\033[0m." % (salary))
flag = True
else:
print("invalid input,please input your salary again.")
字符串操作
name=”My name is Tone”
name.capitalize() #首字母大写
name.count(“n”) #统计字母个数
name.center(50,”-”) #打印50个字符,把name放在中间,不够的用-补全
name.endswith(“.com”) #判断以什么结尾
name.expandtabs(tabsize=30) #把tab转成多少个空格
name.find(“y”) #取出该字符的下标
name.format() #格式化输出
例子:name=”My name is{name},I am {year} old. ”
print(name.format(name=”Tone”,year=30))
print(name.format_map({“name”:”Tone”,”year”:33})) #输出内容一致
name.isalnum() #是否是阿拉伯数字加阿拉伯字符,包含英文字符和数字
name.isalpha() #纯英文字符
name.isdecimal()
name.isdigit()
name.isidentifier() #判断是不是一个合法的标识符即变量
name.islower() #判断都是小写
name.isuper #判断都是大写
name.isnumeric() #判断是不是只有数字在里面,与digit没有什么区别
name.isspace #判断是不是空格
name.istitle() #判断是不是所有单词的首字母大写
print(‘+’,join([‘1’,’2’,’3’])) 把一个列表变成字符中间用+相连
name.ljust(50,”*”)
name.rjust(50,”*”)
name.lower()
name.uper()
name.lstrip()
name.rstrip()
name.strip() #左右的换行和空格都去掉
p=str.maketrans(“abcdef”,”123456”)
print(“alex li”.translate(p)) #用p中定义的数字替换字母
name.replace(“l”,”L”) #把l替换成L
name.rfind(“e”) #从右开始查找,找最右边e的下标返回
name.rsplit()
name.split() #默认把字符串按照空格生成一个列表
name.splitlines #按照换行符生成一个列表
name.startwith
name.swapcase #大小写转换
字典的使用
字典没有下标,是无序的,通过key可以读取value
info={“stu1101”:”Kaili”, “stu1102”:”Tony”, “stu1103”:”Steven” }
查:
print(info[“stu1101”]) #根据KEY查找,存在的情况下没有问题,如果不存在会报错
print(info.get(“stu1104”)) #有就返回值,没有返回none
修改:
info[“stu1101”]=”Summer” #修改1101学员的名字
print(info)
info.update(b) #把两个字典合并,重复的用b更新
添加:
info[“stu1104”]=”Tina”
print(info) #增加1104学员
删除:
del info #把字典都删除
del info[“stu1101”] #删除学员1101
info.pop(“stu1101”) #删除学员1101,标准删除方法
info.popitem() #随机删除
info.items() #把字典转化成列表
“stu1104” in info #判断KEY是否存在
info.values() #打印出所有的值
info.keys() #打印出所有的key
info.setdefault(“taiwai”,{“www.baidu.com”: [1,2]})
dict.fromkeys([key1,key2],”test”) #初始化一个字典
初始化字典的小坑:
c=dict.fromkeys([5,6,7],[1,{“name”:”alex”},333])
print(c)
c[7][1][“name”] = “Jack Chen”
print(c) #此时全改了,并不是改了一个
字典的循环:
for list in info:
print(list,info[list])
内容回顾
列表和元组都是有序的;
字符串不可以修改;
字典是无序的,通过KEY读取值(三级菜单);
python之day2