day 2笔记及作业

什么是模块

sys模块

import sys 
print(sys.path) 
# 打印环境变量  标准库(或安装的第三方库)就存在打印出的目录中 第三方库存在site-package中
>>>['D:\\BaiduNetdiskDownload\\新建文件夹\\源码', 'D:\\BaiduNetdiskDownload\\新建文件夹\\源码', 'D:\\software_programming\\PyCharm 2019.2.1\\helpers\\pycharm_display', 'C:\\Users\\15534\\python3.7\\python37.zip', 'C:\\Users\\15534\\python3.7\\DLLs', 'C:\\Users\\15534\\python3.7\\lib', 'C:\\Users\\15534\\python3.7', 'C:\\Users\\15534\\python3.7\\lib\\site-packages', 'D:\\software_programming\\PyCharm 2019.2.1\\helpers\\pycharm_matplotlib_backend']
# 系统有环境变量
# Python也有全局环境变量
print(sys.argv)
pritn(sys.argv[2])
#打印该文件的相对路径(pycharm)中打印绝对路径
#用命令行运行可以传参

os模块(系统交互)

import os
os.system("dir") # 查看当前目录文件
cmd_res = os.system("dir") # 执行命令,不保存结果
cmd_res2 = os.popen("dir").read() #内存地址 read取出
print("---->",cmd_res)
print("---->",cmd_res2)

os.mkdir("new_dir")# 在当前地方创建目录
  • 默认找模块先在当前目录下找,找不到再到全局变量里找
  • 解决方法
    • 1.将该模块路径添加到环境变量中(以后补充)
    • 2.将该模块复制到site-package中

pyc是啥

  • pyc文件
    • 预编译后的字节码文件
  • 为什么第二次运行py文件快
在说这个问题之前,我们先来说两个概念,PyCodeObject和pyc文件。
我们在硬盘上看到的pyc自然不必多说,而其实PyCodeObject则是Python编译器真正编译成的结果。我们先简单知道就可以了,继续向下看。
当python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当Python程序运行结束时,Python解释器则将PyCodeObject写回到pyc文件中。
当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,则直接载入,否则就重复上面的过程。
所以我们应该这样来定位PyCodeObject和pyc文件,我们说pyc文件其实是PyCodeObject的一种持久化保存方式。

Python数据类型

1.数字

  • 整数
    • 2
  • 长整数
    • 不过是大一些的整数。
  • 浮点数
    • 3.23和52.3E-4。E标记表示10的幂。在这里,52.3E-4表示52.3 * 10-4。
  • 复数
    • (-5+4j)和(2.3-4.6j),其中-5,4为实数,j为虚数。
  • int(整型)

在32位机器上,整数的位数为32位,取值范围为-231~231-1,即-2147483648~2147483647

在64位系统上,整数的位数为64位,取值范围为-263~263-1,即-9223372036854775808~9223372036854775807

  • long(长整型)

  跟C语言不同,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。

  注意,自从Python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数,所以如今在长整数数据后面不加字母L也不会导致严重后果了。

  • float(浮点型)

先扫盲 http://www.cnblogs.com/alex3714/articles/5895848.html

浮点数用来处理实数,即带有小数的数字。类似于C语言中的double类型,占8个字节(64位),其中52位表示底,11位表示指数,剩下的一位表示符号。

2.布尔值

  • 真或假

  • 1 或 0

3.字符串

bytes数据类型

bytes--decode--> string

sring--encode--> bytes

python3 中所有的文件传输类型都是bytes类型

msg = "我爱北京天安门"
print(msg)
msg_byte = msg.encode("utf-8")
print(msg_byte)
pritn(msg_byte.decode("utf-8"))
# Python3中,encode/decode默认utf-8

列表的使用

names = ["zhangyang", "Guyun", "Xiangpeng", "Xuliangchen"]

names.append("LeiHaidong") #添加到末尾
names.insert(1,"chengronghua")#随意插入 如不写位置默认插在最前端
names[2] = "XieDi"#改
names.remove("Chengronghua") # del names[1]
names.pop()# 默认删掉最后一个值,也可输入下标
print(names.index("XieDi"))
print(names[names.index("XieDi")])
  • 切片
print(names)
print(names[0],names[2])
print(names[1:2]) # 切片 [1,2) 顾头不顾尾
print(names[-1]) #取最后一位
print(names[-2:]) #取最后两位
print(names[:3]) 
print(names[:3:1)
pritn(names[::2])   

print(names.count("Chengronghua"))
  • 其他
names.clear()#清空列表

names.reverse()

names.sort()#按特殊符号 数字 大写 小写(ASCII)排序

names.extend(names2)#合并
del names2
  • zip
>>> x = zip([1,2,3],[2,3,4])
>>> list(x)
[(1, 2), (2, 3), (3, 4)]
>>> for i,j in zip([1,2,3],[2,3,4]):
...     print(i,j)
...
1 2
2 3
3 4
  • 列表的copy
names = ["zhangyang", "Guyun", "Xiangpeng", ["alex","jacl"], "Xuliangchen"]
names[2] = "向鹏"
names[3][0] = "ALEX"
names3 = names.copy() 
#浅copy 只copy第一层;第二层复制了内存地址,如此即使改names3的第二层names也会变
print(names)
print(names3)
>>>['zhangyang', 'Guyun', '向鹏', ['ALEX', 'jacl'], 'Xuliangchen']
['zhangyang', 'Guyun', 'Xiangpeng', ['ALEX', 'jacl'], 'Xuliangchen']
names = ["zhangyang", "Guyun", "Xiangpeng", ["alex","jacl"], "Xuliangchen"]
names3 = names
names[2] = "向鹏"
names[3][0] = "ALEX"
print(names)
print(names3)
>>>['zhangyang', 'Guyun', '向鹏', ['ALEX', 'jacl'], 'Xuliangchen']
['zhangyang', 'Guyun', '向鹏', ['ALEX', 'jacl'], 'Xuliangchen']
import copy
names = ["zhangyang", "Guyun", "Xiangpeng", ["alex","jacl"], "Xuliangchen"]
names3 = copy.copy(names) #深copy
names[2] = "向鹏"
names[3][0] = "ALEX"
print(names)
print(names3)
>>>['zhangyang', 'Guyun', '向鹏', ['ALEX', 'jacl'], 'Xuliangchen']
['zhangyang', 'Guyun', 'Xiangpeng', ['ALEX', 'jacl'], 'Xuliangchen']

循环:
for i in names:
    print(i)


import copy
person = ["name", ['a',100]]
# 浅copy
p1 = copy.copy(person)
p2 = person[:]
p3 = list(person)
person = ["name", ['saving',100]]
# 浅copy的例子
p1 = person[:]
p2 = person[:]
p1[0] = 'alex'
p2[0] = 'fengjie'
p1[1][1] = 50
print(p1)
print(p2)

元组

  • 只读列表tuple
    • names = ('alex','jack')

      购物车程序

    product_list = [
      ('Iphone',5800),
      ('Mac Pro',9800),
      ('Bike',800),
      ('Watch',10600),
      ('Coffee',31),
      ('Alex Python',120),
    ]
    shopping_list = []
    salary = input("Input your salary:")
    if salary.isdigit():
      salary = int(salary)
      while True:
          for index,item in enumerate(product_list):
                                                      #enumerate使用方法:
                                                      # >>> a = [1,2,3]
                                                      # >>> for i in enumerate(a):print(i)
                                                      # ...
                                                      # (0, 1)
                                                      # (1, 2)
                                                      # (2, 3)
              #print(product_list.index(item),item)
              print(index,item)
          user_choice = input("选择要买嘛?>>>:")
          if user_choice.isdigit():
              user_choice = int(user_choice)
              if user_choice < len(product_list) and user_choice >=0:
                  p_item = product_list[user_choice]
                  if p_item[1] <= salary: #买的起
                      shopping_list.append(p_item)
                      salary -= p_item[1]
                      print("Added %s into shopping cart,your current balance is \033[31;1m%s\033[0m" %(p_item,salary) )
                  else:
                      print("\033[41;1m你的余额只剩[%s]啦,还买个毛线\033[0m" % salary)
              else:
                  print("product code [%s] is not exist!"% user_choice)
          elif user_choice == 'q':
              print("--------shopping list------")
              for p in shopping_list:
                  print(p)
              print("Your current balance:",salary)
              exit()
          else:
              print("invalid option")

    字符串常用操作

name = "my \tname is {name} and i am {year} old"

print(name.capitalize())
print(name.count("a"))
print(name.center(50,"-"))# 用-两边填补
print(name.ljust(50,'*')  )# 用*右边填补
print(name.rjust(50,'-')  )# 用-左边填补
print(name.endswith("ex"))# 判断
print(name.expandtabs(tabsize=30))
print(name[name.find("name"):]) #切片
print(name.format(name='alex',year=23)) 
print(name.format_map(  {'name':'alex','year':12}  ))#传字典进去
print('ab23'.isalnum()) #英文字符+阿拉伯数字
print('abA'.isalpha())  #纯英文字符
print('1A'.isdecimal()) #十进制
print('1A'.isdigit())   #整数
print('a 1A'.isidentifier()) #判读是不是一个合法的标识符
print('a 1A'.islower()) #小写
print('My Name Is  '.istitle()) #首字母大写
print('My Name Is  '.isprintable()) #tty file ,drive file
print('My Name Is  '.isupper()) #大写
print('+'.join( ['1','2','3'])  )
print( 'Alex'.lower()  )
print( 'Alex'.upper()  )
print( '\nAlex'.lstrip()  )#去空格和回车
print( 'Alex\n'.rstrip()  )
print( '    Alex\n'.strip()  )
p = str.maketrans("abcdefli",'123$@456') #对应置换
print("alex li".translate(p) )
print('alex li'.replace('l','L',1))
print('alex lil'.rfind('l')) #从左往右找到最远的值的下标
print('1+2+3+4'.split('+'))
print('1+2\n+3+4'.splitlines())
print('Alex Li'.swapcase()) #大小写互换
print('lex li'.title())
print('lex li'.zfill(50)) #用0从左边填充

字典的使用

info = {
    'stu1101': "TengLan Wu",
    'stu1102': "LongZe Luola",
    'stu1103': "XiaoZe Maliya",
}
  • 增/改
info["stu1101"] ="武藤兰"
info["stu1104"] ="CangJingkong"
# 判断是否有这个key
print('stu1103' in info)
info.has_key("1103")# Python2.x使用 
del
del info["stu1101"]
info.pop("stu1101")
info.popitem()
print(info)
print(info["stu1101"])
print(info.get('stu1103')) #若无该key也不会报错

print(info.items() )
>>>dict_items([('stu1101', 'TengLan Wu'), ('stu1102', 'LongZe Luola'), ('stu1103', 'XiaoZe Maliya')])
  • 多级字典
av_catalog = {
    "欧美":{
        "www.youporn.com": ["很多免费的,世界最大的","质量一般"],
        "www.pornhub.com": ["很多免费的,也很大","质量比yourporn高点"],
        "letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"],
        "x-art.com":["质量很高,真的很高","全部收费,屌比请绕过"]
    },
    "日韩":{
        "tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","听说是收费的"]
    },
    "大陆":{
        "1024":["全部免费,真好,好人一生平安","服务器在国外,慢"]
    }
}

av_catalog["大陆"]["1024"][1] = "可以在国内做镜像" #改

av_catalog.setdefault("台湾",{"www.baidu.com":[1,2]}) #若无该key则添加
av_catalog.setdefault("大陆",{"www.baidu.com":[1,2]}) #若找到该key则不变
print(av_catalog)
  • 字典的更新
b ={
    'stu1101': "Alex",
    1:3,
    2:5
}

info.update(b)
print(info)
  • 字典初始化
c = dict.fromkeys([6,7,8],[1,{"name":"alex"},444]) #初始化一个字典
print(c)
c[7][1]['name'] = "Jack Chen"
print(c)
>>>{6: [1, {'name': 'alex'}, 444], 7: [1, {'name': 'alex'}, 444], 8: [1, {'name': 'alex'}, 444]}
{6: [1, {'name': 'Jack Chen'}, 444], 7: [1, {'name': 'Jack Chen'}, 444], 8: [1, {'name': 'Jack Chen'}, 444]}
  • for循环语句打印字典
for i in info:
    print(i,info[i])

for k,v in info.items(): # info.items()速度慢 不建议使用
    print(k,v)

>>>
stu1101 TengLan Wu
stu1102 LongZe Luola
stu1103 XiaoZe Maliya

三级菜单

本节作业——购物车优化

  • 用户入口
    • 商品信息存在文件里
    • 已购商品,余额记录
  • 商家入口
    • 可以添加商品,修改商品价格

猜你喜欢

转载自www.cnblogs.com/randomdoor-2019/p/11668888.html