python_day2_模块初始/pyc?/python数据类型/列表+购物车实例/字典的使用+三级菜单/字符串操作

python_模块初始/pyc?/python数据类型/列表/购物车实例/字典的使用/三级菜单

在这里得感谢,老师Alex金角大王(路飞学城IT)
Python(给兄弟们挂个🔗)

>_<…因为有的是自己理解,如有错误,希望大家踊跃评论,我好即使改正…

一、模块(库):

1.一般分为标准库和第三方库:

标准库:sys/os…这两个模块
第三方库:可以是自己去写的

(1)sys模块 >>> 放在python文件下的 >>> Lib
在这里插入图片描述
result:
(1)导入sys模块,print(“sys.path”)打印其相对路径,即python会按照这些路径去找到sys模块…
(2)注意:左边当前的文件名[‘sys_mod.py’] 不要和模块名重复,因为python会在当前路径下去找sys模块…

import sys

# print(sys.path)
print(sys.argv)

result:(打印当前执行文件的相对路径)
[‘C:/Users/cc/PycharmProjects/alex/第二周/modle.py’]

(2)os模块:
1.去读当前文件:

import os

os.system("dir")#只执行命令,不保存结果
cmd_os = os.system("dir")
print('->>',cmd_os)

result:只执行命令,不存结果
->> 0

import os

cmd_res = os.popen("dir")
print("-->",cmd_res)#.....所存对象的值(地址)
cmd_res = os.popen("dir").read().....#"读出所存对象"

result:可输出当前文件…

 import os
 os.mkdir("new_dir")

result:创建一个文件

(3)自己调“自己”模块:
自己写的.py文件,也可调用,即import 文件名

import login

result:
(1)调用文件 和 写好的 .py文件 要在同一个文件夹下,否则会报错
(2)或者(可以copy到site-package里面再import),sit-package里面存的全是第三方库

二、pyc?

在这里插入图片描述
result:
问:刚刚调用完login文件…pyc文件是什么???

答:(1)计算机是无法识别高级语言的,需要一种"翻译机"去实现,高级语言转换成计算机语言
(2)这种“翻译”过程分为:1.编译2.解释
(3)像c、c++这种就是编译机制的语言;首先将高级语言编译成机器码,在运行的时候,由CPU直接执行机器码,运行速度最快
(4)解释型语言,就是将编写的代码,交给解释器,一句一句的去翻译,速度不如编译型…
(5)随后…在java等基于虚拟机的语言的兴起;不能将语言分为:编译和解释型两种了
Java的运行机制:1.将高级语言编译成字节码文件(可以理解为是一种介于机器码文件)2.再将这种字节码文件,交给解释器解释成机器文件3.速度提升了,但只能无限的接近于编译型的

>>>其实python的运行和Java类似,在“解释之前”也要预先编译,即python是一种先编译后解释的语言
1.当程序运行时:python将其编译在PyCode Object 中,当程序结束的时候,解释器将PyCode Object写回到pyc文件中,其实python编译的直接结果是pycode object
2.当程序第二次运行的时候,直接调用pyc文件,直接载入,速度就会快很多…

又存在一个问题:原代码更新???会怎么样???
答:python就原代码和pyc…这两个的更新时间进行判断…来执行什么

三、python的数据类型

(1)三元运算:

#Author:Jony c
#!/usr/bin/env  python 
# -*- coding:utf-8 -*-

a = 1;b = 2;c = 10

d = a if a>b else b
print(d)

result:输出为2

result = 值1 if 条件 else 值2 ;条件成立值1,不成立值2

(2)字符串/bytes类型:
1.二进制的bytes类型:在传输数据时的要用到的的数据类型…
在这里插入图片描述
2.

#Author:Jony c
#!/usr/bin/env  python
# -*- coding:utf-8 -*-

name = "国庆节快乐"

print(name.encode(encoding = "utf-8")) #字符串转二进制....编码
_name = name.encode(encoding = "utf-8")#赋值
print(_name.decode(encoding = "utf-8"))#二进制转字符串..解码

result:
1.encode(encoding = ‘utf-8’)…告诉它你之前是什么编码…
2.python3…不写默认utf8…2里面不写默认的是系统编码…

四、列表:

1.列表是什么?

name = ["wangcheng","zhaohao","helong","guwen","baimingyu"]

result:like this >>> 可以存储多个str、number…的一个“集合”吧,再把它赋给一个变量,用点调用"name."的方法去调用功能,有以下功能:

2.列表的"增"、“删”、“改” 和 "查"等其他功能:
(1)list.py

#Author:Jony c
#!/usr/bin/env  python 
# -*- coding:utf-8 -*-

# "增" "删" "改" "查"
#  name.append...name.insert(1,"")...name[]=""....name.remove()...del name[]....name.pop()...name.pop(1)
# name.index....name.count..name.clear..name.reverse...name.sort()..name.extend
name = ["wangcheng","zhaohao","helong","guwen","baimingyu"]

#"查"
'''print(name[0],name[2],name[-1])

print(name[0:3])#"顾首不顾尾"....0..1..2..
print(name[-3:-1])#z从左往右....-3..-2..
print(name[-3:])#把最后一个取出来....
print(name[:3])#..0..1...2

#"添"
name.append("gaona")#z追加
name.insert(1,"luotao")#插入
print(name)

#"替换"
name[1] = "leishuyang"
print(name)

#"删"
name.remove("leishuyang")#直接删除
print(name)

del name[3]
print(name)

name.pop()
print(name)

name.pop(1)
print(name)

#"查"
print(name.index("helong"))
print(name[name.index("helong")])

#"添"
name.insert(1,"wangcheng")

#查数
print(name.count("wangcheng"))

#反转
name.reverse()
print(name)

#排序
name.sort()
print(name)

#扩展exend
_name = [1,2,3,4]
name.extend(_name)
print(name)

#清除
name.clear()
print(name)
'''
#copy
import copy

names2 = name.copy()
print(names2)

name[0] = "zhangqianhui"
print(name)
print(names2)

#深度copy
names3 = ["wangcheng","zhaohao","helong","guwen","baimingyu",[1,2]]

name3 = copy.deepcopy(names3)

print(names3)
print(name3)

#步长切片
name4 = ["wangcheng","zhaohao","helong","guwen","baimingyu"]
print(name4[0::2])


#for
for i in name4:
    print(i)

(2)“增”:

#"增加":
name.append("Alex")#自动加到尾部
name.insert(1,"wuyifan")#选定位置(角标)加入,不会挤掉原有的

(3)“删”:

#"删:"
name.pop(1)#指定人员删除...指定位置(角标)
name.remove("zhaohao")#指定人员删除...指定人员(str;即字符串)
del name[0]#角标删除
name.pop()#随机删除
name.clear()#全部删除

(4)“改”:

name[0] = "luhan"

(5)“查”:

#"查"
print(name[0],name[-1])#输出第一和倒一
print(name[0:3])#切片...0 1 2..."顾首不顾尾"..不会输出name[3]
print(name[-3:-1])#倒3..倒2.."顾首不顾尾"
print(name[-3:])#name[-3]name[-2]name[-1]
print(name[:3])#name[0]name[1]name[2]

result:
注意:
1.name[-1] = 最后一个;
2.“顾首不顾尾”
3.name[ :3],这种切片形式…

(6)“其他”功能:eg:index,sort,reverse,extend



name = ["wangcheng","zhaohao","helong","guwen","baimingyu"]
#index
print(name.index("wangcheng"))

#反转
name.reverse()
print(name)

#排序
name.sort()
print(name)

#扩展exend
_name = [1,2,3,4]
name.extend(_name)
print(name)


(7):浅层copy、深层copy:
1.浅层"copy":

#Author:Jony c
#!/usr/bin/env  python 
# -*- coding:utf-8 -*-

#copy
import copy
name = ["wangcheng","zhaohao","helong","guwen","baimingyu"]
names2 = name.copy()
print(names2)

name[0] = "wuyanzhu"
print(name)
print(names2)

result:
[‘wangcheng’, ‘zhaohao’, ‘helong’, ‘guwen’, ‘baimingyu’]
[‘wuyanzhu’, ‘zhaohao’, ‘helong’, ‘guwen’, ‘baimingyu’]
[‘wangcheng’, ‘zhaohao’, ‘helong’, ‘guwen’, ‘baimingyu’]

names不随着name而改变,浅层copy
但是!!!..请看下面的:

#Author:Jony c
#!/usr/bin/env  python 
# -*- coding:utf-8 -*-

#copy
import copy
name = [[1,2],"zhaohao","helong","guwen","baimingyu"]
names2 = name.copy()
print(names2)

names2[0][0] = 55
print(name)
print(names2)

result:
[[1, 2], ‘zhaohao’, ‘helong’, ‘guwen’, ‘baimingyu’]
[[55, 2], ‘zhaohao’, ‘helong’, ‘guwen’, ‘baimingyu’]
[[55, 2], ‘zhaohao’, ‘helong’, ‘guwen’, ‘baimingyu’]

这回names2跟着变了…说明copy是浅层copy

2.深层“copy”:

#Author:Jony c
#!/usr/bin/env  python 
# -*- coding:utf-8 -*-

#copy
import copy
name = [[1,2],"zhaohao","helong","guwen","baimingyu"]
names2 = copy.deepcopy(name)
print(names2)

names2[0][0] = 55
print(name)
print(names2)

result:
[[1, 2], ‘zhaohao’, ‘helong’, ‘guwen’, ‘baimingyu’]
[[1, 2], ‘zhaohao’, ‘helong’, ‘guwen’, ‘baimingyu’]
[[55, 2], ‘zhaohao’, ‘helong’, ‘guwen’, ‘baimingyu’]

用一次深层copy…会发现names2又不随name变…深层copy

(8)步长切片:

#步长切片
name4 = ["wangcheng","zhaohao","helong","guwen","baimingyu"]
print(name4[0::2])

result:
[‘wangcheng’, ‘helong’, ‘baimingyu’]

#for
for i in name4:
    print(i)

result:
wangcheng
zhaohao
helong
guwen
baimingyu

五、购物车实例:

#Author:Jony c
#!/usr/bin/env  python 
# -*- coding:utf-8 -*-


#用列表存.....做嵌套
product_list = [
    ('iphone',3000),
    ('mac pro',5000),
    ('wangcheng python',50),
    ('watch',300),
    ('AJ',400),
    ('bike',300),
]#制作"商品列表"
shopping_bike = [] #购物车"空"
salary = input("\033[32;1myour salary:\033[0m")#\033[32;1m....\033[0m  31红色...32绿色....41带背景的红色....42带背景的绿色
#salary....其中只输入一次....

if salary.isdigit():# (1)."判断salary数据是否为数字..."
   salary = int(salary)#赋值"整型int"
   while True:# "循环" 操作....
      for index,item in enumerate(product_list):#(2)."enumerate" = print("production_list.index(item)")   第一步:打印商品名单
          print(index,item)#输出商品序号.....和商品"子列表"
      user_choice = input("\033[42;1mwhat do you want?\033[0m")#第二步:输入用户的序号选择....
      if user_choice.isdigit():#第三步:判断"用户选择"是否为数字?
           user_choice = int(user_choice)#整型
           if user_choice < len(product_list) and user_choice >= 0:#判断"用户选择"是否在列表里...
               production = product_list[user_choice]#如果在....把列表里的商品拿出来
               if production[1] <= salary:#判断商品价格和工资.....
                    salary =salary-production[1]#工资扣去商品价格
                    shopping_bike.append(production)#商品放在购物车里
                    print("you have add %s in your shopping bike,you balance just have \033[31;1m%s\033[0m" %(production,salary))
                    #格式化输出.....


               else:#商品价格过高....买不起
                   print("you balance just have \033[31;1m%s\033[0m ,it is not enough!"% salary)
           else:#商品序号不在列表里.....
               print("invaild number!")

      elif user_choice == 'q':#用户选择退出
           print("exit......")
           print("you have buy %s,you balance just have %s" %(shopping_bike,salary))#打印购物车..就已经买到的商品...
           exit()#"退出"
      else:
            print("invaild number!")#商品序号不对.....

result:
基本逻辑:

           先输入商品列表和价格.....
           输入你的工资......1.判断你的工资是否为数字


            循环:
            1.打印商品列表
            2.user_choice......>>>>>>判断:
             (1)数字:判断价格 
            (2)"q"退出:打印商品列表 
            (3)无效
            3.价格 < = or >salary >>>>> 判断:
            买的起:
             (1)钱够...production拿出来...
            (2)工资扣除  
             (3)production放进"shopping bike"中
             (4)打印出来"已购"商品列表...和剩余工资...
             买不起:
             print("你买不起.....")

六、字典:

1.字典是什么?

info = {
    'stu1101':"wangcheng",
    'stu1102':"helong",
    'stu1103':"zhaohao",
}#"字典"无序....因为其靠"索引"找目标

result:字典数据属于一种key-value;要通过其"key"(索引)来查找"value"(目标)…有以下功能:

2.字典的"增"、“删”、“改”、“查” 和其他功能:

(1)dictionaries.py

#Author:Jony c
#!/usr/bin/env  python 
# -*- coding:utf-8 -*-
#"字典"数据类型...."索引"
#key-value数据.."key"索引...

info = {
    'stu1101':"wangcheng",
    'stu1102':"helong",
    'stu1103':"zhaohao",
}#"字典"无序....因为其靠"索引"找目标
print(info)

'''#"查"
print(info["stu1101"])
print(info.get('stu1104'))
print('stu1103' in info)#info.has_key() in py2.x
#"改"
info["stu1101"] = "baimingyu"
#"加"
info["stu1104"] = "guwen"
#"删"
del info["stu1101"]
info.pop("stu1102")
info.popitem()#随机删
print(info)
'''

'''#多级字典的嵌套及操作..key一般不要用中文...
school_dictionaries = {
    "hantai":{"zuoyue":[1,2,3]},
    "mianyizhong":{'shiyan':[1,2]},
    "zyihong":{'zhongdian':[1,2]},
    "nanzhengyizhong":{'huojian':[1,2,3]},
}

school_dictionaries["hantai"]['zuoyue'][1] = '宏志二班'
print(school_dictionaries)
'''

print(info.values())#单输出values
print(info.keys())#单输出keys
#setdefault...1.先去找stu1111 2.有的话..返回输出 3.无的话...赋值输出
info.setdefault("stu1111",{"www.baidu.com":[1,2]})
print(info)

# "新的值" 覆盖...."没有的"补充...有交叉的覆盖
b = {
    'stu1101': "alex",
    1:3,
    2:3
}
info.update(b)

print(info.items())#变成一个"列表"

c = dict.fromkeys([6,7,8],[1,{"name":"a_test"}])#初始化一个字典
c[7][1]['name'] = "jony j"#相当于 copy....全部都改
print(c)

print(info)

#字典的循环...
for i in info:
    print(i,info[i])

for k,v in info.items():#不建议....会转化成列表...
    print(k,v)

(2)“增”:

#"加"
info["stu1104"] = "guwen"

(3)“删”:

#"删"
del info["stu1101"]
info.pop("stu1102")
info.popitem()#随机删

(4)“改”:

#"改"
info["stu1101"] = "baimingyu"

(5)“查”:

#"查"
print(info["stu1101"])
print(info.get('stu1104'))
print('stu1103' in info)#info.has_key() in py2.x

(6)其他功能:
这里先给出一个字典:


school_dictionaries = {
    "hantai":{"zuoyue":[1,2,3]},
    "mianyizhong":{'shiyan':[1,2]},
    "zyihong":{'zhongdian':[1,2]},
    "nanzhengyizhong":{'huojian':[1,2,3]},
}

只输出 key or value:

print(school_dictionaries.values())#单输出values
print(school_dictionaries.keys())#单输出keys

setdefault:

#setdefault...1.先去找龙冈中学 2.有的话..返回输出 3.无的话...赋值输出
school_dictionaries.setdefault("龙岗中学",{"www.baidu.com":[1,2]})
print(school_dictionaries)

update:

# "新的值" 覆盖...."没有的"补充...有交叉的覆盖
b = {
    'stu1101': "alex",
    1:3,
    2:3
}
school_dictionaries.update(b)
print(school_dictionaries)

字典变列表:

print(school_dictionaries.items())

初始化列表dict.fromkeys([key],[value]):

c = dict.fromkeys([6,7,8],[1,{"name":"a_test"}])#初始化一个字典
c[7][1]['name'] = "jony j"#相当于copy....全部都改
print(c)

字典的循环打印:

#字典的循环...
for i in info:
    print(i,info[i])

for k,v in info.items():#不建议....会转化成列表...
    print(k,v)

综上:
掌握:字典的 增删改查 +
keys和values/setdefault/update/iteams/dictfroms/循环打印

七、三级菜单:

#Author:Jony c
#!/usr/bin/env  python 
# -*- coding:utf-8 -*-

date = {
    '北京':{
        "昌平":{
            "沙河":["oldboy","test"],
            "天通苑":["链家地产","我爱我家"]
        },
        "朝阳":{
            "望京":["奔驰","陌陌"],
            "国贸":{"CICC","HP"},
            "东直门":{"Advent","飞信"},
        },
        "海淀":{},
    },
    '山东':{
        "德州":{},
        "青岛":{},
        "济南":{}
    },
    '广东':{
        "东莞":{},
        "常熟":{},
        "佛山":{},
    },
}
flag = False
while not flag:
    for i in date:
        print(i)#打印第一层
    user_choice = input("what you want to choice? ")#用户选择
    if user_choice in date:#用户选择在第一层
        while not flag:
            for j in date[user_choice]:
                print(j)#打印第二层
            choice2 = input("again choice:")#用户接着选择
            if choice2 in date[user_choice]:#用户选择的在第二层
                 while not flag:
                    for k in date[user_choice][choice2]:
                          print(k)#打印第三层
                    choice3 = input("the last choice:")#第三次选择
                    if choice3 in date[user_choice][choice2]:
                         while not flag:
                              for e in date[user_choice][choice2][choice3]:
                                    print(e)#打印最后一层
                              choice4 = input("choice b back!")#用户选择返回
                              if choice4 == 'b':
                                 break  #如果这里写 "pass"..相当于占位符/跳出这一层循环....接着在上一层循环
                              elif choice4 == 'q':
                                  flag = True#  while not flag:直接跳出去
                    # if choice3 == 'b':
                    #     break
                    elif choice3 == 'b':
                        break
            # if choice2 == 'b':
            #             break
            elif choice2 == 'b':
                    break
    # if user_choice == 'b':
    #                 break
    elif user_choice == 'b':
            break

result:
1.准备一个"菜单"字典 >>> data{…}
2.每一级层上加一个:elif choice = b ?…这样的条件判断…
用break可以跳出本次循环 >>> 即跳回上一级…

<3>用一个flag 当做一个"旗帜"…使while not True…全部执行/全不执行(跳出所有循环)

八、字符串操作:

#Author:Jony c
#!/usr/bin/env  python
# -*- coding:utf-8 -*-

name = "my \tname is alex , i am {age} old"
print(name.capitalize())#首字母大写
print(name.count("a"))
print(name.center(50,"-"))
#print(name.encode(encoding = "utf8"))
print(name.endswith("ex"))#结果是  True
print(name.expandtabs(tabsize = 30))#无效果
#print(name.expandtabs(tabsize = 30))......name = "my \tname is alex"
#加空格的效果在  \t  的地方
print(name.find("name"))#找索引...."4"
print(name[name.find("name"):])#切片
print(name.format(age = 22))#格式化输出...{_name = name}....{0}{1}{2}....
print(name.format_map({'age':22}))#"字典"格式化输出....format_map({'age':22})
print(name.isalnum())#阿拉伯数字+英文字符.....
print('abc123'.isalnum())#True
print('abcAJ'.isalpha())#True...纯英文字符
print('122'.isdecimal())#True...decimal是十进制
print('122'.isdigit())#是个整数
print('122.225'.isdigit())#False
print('a_test'.isidentifier())#判断是不是合法的标识符.....是不是合法的变量名
print('33'.isnumeric())#是不是数字...only numerical
print(' '.isspace())#是不是空格
print('My Name Is'.istitle())#开头字母大写
print('My Name Is'.isprintable())#tty.file..drive.file.."返回False"..是否能打印
print('MNI'.isupper())#是不是....全是大写
print(''.join(['1','2','3']))#"123"
print('+'.join(['1','2','3']))#"1+2+3"...会经常使用
print(name.ljust(50,'!'))#保证长50.....剩余的"右边"用"!"补齐..
print(name.center(50,'@'))
print(name.rjust(50,'@'))#"right"左边的用@补齐
print('ASDAD'.lower())#变小写
print('asdad'.upper())#变大写
print('\nasdad'.lstrip())#去掉"left"(左边)的"空格"和"回车"
print('asdad\n'.rstrip())#去掉"right"的回车
print('     asdad\n'.strip())#两头的回车

p = str.maketrans("abcdef",'123456')#maketrans..一样的"数量"做转换...
print("alex li".translate(p))#把作完转化的值带进去....输出"115x li"
print('alex'.replace('a','A',1))#把"A"代替"a_test"...."1"数量...
print('alex li'.rfind('l'))#找到最后面的"l"...下标返回...
print('alex li'.split('l'))#"split""分离"...按照"l"分离....
print('1+2+3+4+5+6'.split('+'))#['1','2','3','4','5','6']
print('1+2+3\n4+5+6'.splitlines())#自动识别"\n"....并分割...
print('adASDAdasdas'.swapcase())#大小写转换....
print('adASDAdasdas'.title())#只把"首字母"变成大写...
print('adASDAdasdas'.zfill(50))#不够用"0"填充..

result:
expantabs/join/just/stip/maketrans + translate/split/swapcase

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值