fateame 发表于 2018-8-14 11:30:44

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)
  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)
  print(names)
  print(names[-2:-3])
  print(names)   # 步长切片,0和-1可以省略即print(names[::2])
  增删改查
  names.append(“XuQing”)
  names.insert(1,”XinZhiYu”)   #插入的位置
  names=”MingMing”   #直接把位置替换
  names.remove=”MingMing”#删除该内容
  del names    #删除下标为1的内容
  names.pop(1)   #删除下标为1的内容
  names.append(“XuQing”)    #再增加一个同名的内容
  其它方法
  print(names.count(“XuQing”))   #输出显示2,表示列表中有2个XuQing
  names.clear()    #清空列表
  names.reverse()   #整个内容反过来,即第一个将排到最后一个显示
  names.sort()   #特殊符号、数字、大写字母、小写字母,按ascii照码表中的顺序排序
  names2=
  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 = "王亮"   # names中的内容修改为中文
  print(names)      # names修改成功
  print(names2)       # names2不变
  names = "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= "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 = "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, product)
  product_num += 1
  choice = str(input("please input product number:"))
  ifchoice.isdigit():
  choice = int(choice)
  if shopping_list <= salary:
  salary = salary - shopping_list
  print("shopping successful,and your salary", salary)
  cart.append(shopping_list)
  elif shopping_list > 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:
  cart_list.append(wal_mart)
  salary -= wal_mart
  print("add \033))
  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”: })
  dict.fromkeys(,”test”)   #初始化一个字典
  初始化字典的小坑:
  c=dict.fromkeys(,)
  print(c)
  c[“name”] = “Jack Chen”
  print(c)       #此时全改了,并不是改了一个
  字典的循环:
  for list in info:
  print(list,info
)
内容回顾
  列表和元组都是有序的;
  字符串不可以修改;
  字典是无序的,通过KEY读取值(三级菜单);
页: [1]
查看完整版本: python之day2