首页 > 代码库 > python之day2

python之day2

模块初识

 

模块分两种:标准库和第三方库

Sysos模块,标准库

 

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、  布尔值

真或假:10

3、  字符串

字符串拼接:单双引号都可以,可以使用+拼接,如下情况+可以省略,但如果是字符串赋值给了变量,两个变量要进行拼接不能省略+

技术分享

字符串比较:长度及各位置上的字符均要相等

 

数据运算

 

算数运算

+

_

*

/

%取模,返回余数

**多少次方

//整除,返回整除的部分

比较运算符

  ==

!=<>都表示不等于

>=

<=

赋值预算符

=赋值

+=

-=

/=

逻辑运算

  and

  or

  not

成员运算:

  in:如果在序列中找到返回true,否则返回false

  not in:如果在序列中没有找到返回true

身份运算:

  is

  not is

技术分享

位运算:二进制运算

  &   两个都为真

  |

  ^   异或运算:两个相同为0,不同为1

  ~   按位取反,是一个值取反

  <<  左移

  >>  右移

技术分享

计算机中能表示的最小单位,是一个二进制位

计算机中能存储的最小单位,是一个二进制位

8bit=byte(字节)

 

bytes数据类型

 

三元运算

如果if的条件成立,则d=a,否则d=b

技术分享

字符串和byte类型

技术分享

注:字符串类型的只能encodebytes类型的只能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,表示列表中有2XuQing

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