Day2-基础学习

 

目录

    1.pyc是什么?
    2.列表使用
    3.元组
    4.字符转换
    5.购物车程序编写
    6.字符串使用
    7.字典运用

 

1.pyc是什么?

 
  解析型语言跟编译型语言
 
    编译型语言:在程序执行之前,先会通过编译器对程序执行一个编译的过程,把程序转变成机器语言,运行的时候就不需要翻译,直接执行就可以了,最典型的例子就是C语言
    解析型语言: 没有编译的过程,而是程序运行的时候,通过解析器对程序做出解析,然后直接运行,最典型的例子是Ruby
    java 通过编译器编译成字节码文件,然后在运行是通过解析器解析成机器文件
 
  Python到底是什么呢?
 
     其实Python和java或者C#一样的,也是一门基于虚拟机的语言。
     当我们在命令行输入python hello.py时候,其实是激活了Python的“解析器”,告诉解析器“解析器”你要开始工作了,在解析之前,其实执行的第一项的工作和java一样的是编译
     Python是一门先编译后解析的语言。
 
  Python运行过程:     
 

    PyCodeObjectpyc文件

    我们在磁盘上看到的pyc自然不必多说,而其实PyCodeObject则是Python编译器真正编译成的结果。

    当Python程序运行的时候,编译的结果而是保存在位于内存中的PyCodeOject中,当Python程序运行结束时候,Python编译器则将PyCodeObject写回到pyc文件中。

    当Python程序第二次运行的时候,首先程序会在硬盘中寻找pyc文件,如果找到,则直接载入,否则就重复上面的过程。

    所以我们应该来定位PyCodeOjectpyc文件,我们说pyc文件其实是PyCodeOject的一种持久的保存方式。

 

 2.列表使用

    (1) 列表取值

 

names = ["zhangyang","xiaoming","guyun","chenfengjie","jifeng",]
print(names[0],names[2])   ##取其中的值

     值得输出如下:

C:\Users\cfj\AppData\Local\Programs\Python\Python35\python3.exe C:/Users/cfj/PycharmProjects/基础/day2/练习.py
zhangyang guyun

Process finished with exit code 0

     

    (2) 切片

 

        例子1取列表中的"xiaoming","chenfengjie"中间的值

names = ["zhangyang","xiaoming","guyun","chenfengjie","jifeng",]
print(names[1:2])

      

       例子2:取最后一个值

names = ["zhangyang","xiaoming","guyun","chenfengjie","jifeng",]
print(names[3])   ###最后一个值,在已知道列表的数量情况直接数出来

 

names = ["zhangyang","xiaoming","guyun","chenfengjie","jifeng",]
print(names[-1])  ###最后一个值,在不清楚列表数目的情况下

      

        例子3: 取最后第二个值

names = ["zhangyang","xiaoming","guyun","chenfengjie","jifeng",]
print(names[-2])  ###最后第二个值

      

       例子4:取最后两个值

names = ["zhangyang","xiaoming","guyun","chenfengjie","jifeng",]
print(names[-2:])  ###最后两个值    从左边开始读取,顾头不顾尾

        

       例子5:取前面两个值

names = ["zhangyang","xiaoming","guyun","chenfengjie","jifeng",]
print(names[:2])   ###前面两个值    从左边开始读取,顾头不顾尾

     

    (3) 添加

 

       例子1:添加到末尾

names = ["zhangyang","xiaoming","guyun","chenfengjie","jifeng",]
names.append("cfj")   ###追加到末尾
print(names)

       

       例子2:添加到某个字符前面

names = ["zhangyang","xiaoming","guyun","chenfengjie","jifeng",]
names.insert(1,"cfj")  ###追加到某个字符前面
print(names)

 

    (4) 修改      

       例子1:将列表中的"guyun"值修改为www

names = ["zhangyang","xiaoming","guyun","chenfengjie","jifeng",]
names[2] ="www"
print(names)

 

 

    (5) 删除

       例子1: 删除列表中的某个字符

names = ["zhangyang","xiaoming","guyun","chenfengjie","jifeng",]
names.remove("jifeng")    ###此删除方法,在知道列表名称的情况下直接使用字符删除
print(names)

 

      例子2: 以下标方式删除

names = ["zhangyang","xiaoming","guyun","chenfengjie","jifeng",]
del names[4]    ##删除下标方式
print(names)

 

      例子3:删除最后一个字符

names = ["zhangyang","xiaoming","guyun","chenfengjie","jifeng",]
names.pop()    ##默认不写入下标,删除最后一个;也可以写入下标删除任意一个;#del names[1] = names.pop(1)一样的意思
print(names)

 

    (6) 其他

      例子1:取下标,在取值

names = ["zhangyang","xiaoming","guyun","chenfengjie","jifeng",]
print(names[names.index("jifeng")])

 

      例子2:统计字符的数量

names = ["zhangyang","xiaoming","guyun","chenfengjie","jifeng",]
print(names.count("jifeng"))   ###统计数量,此处打印出来是“1”

 

      例子3:清空列表

names = ["zhangyang","xiaoming","guyun","chenfengjie","jifeng",]
names.clear()   ###清空列表

 

      例子4:反转整个列表

names = ["zhangyang","xiaoming","guyun","chenfengjie","jifeng",]
names.reverse()      ###整个列表反转

 

      例子5:排序

names = ["zhangyang","xiaoming","guyun","chenfengjie","jifeng",]
names.sort()        ###以字母顺序排序

 

      例子6:合并列表

names = ["zhangyang","xiaoming","guyun","chenfengjie","jifeng",]
names2 = [1,2,3,4]
names.extend(names2)    ###合并列表
print(names)

输入如下:

C:\Users\cfj\AppData\Local\Programs\Python\Python35\python3.exe C:/Users/cfj/PycharmProjects/基础/day2/练习.py
['zhangyang', 'xiaoming', 'guyun', 'chenfengjie', 'jifeng', 1, 2, 3, 4]

Process finished with exit code 0

       

    (7) copy使用

    例子1:浅copy使用,只会copy第一层信息

names = ["zhangyang","xiaoming","guyun","chenfengjie","jifeng",]
names1= names.copy()
print(names)
print(names1)

打印输出如下:

C:\Users\cfj\AppData\Local\Programs\Python\Python35\python3.exe C:/Users/cfj/PycharmProjects/基础/day2/练习.py
['zhangyang', 'xiaoming', 'guyun', 'chenfengjie', 'jifeng']
['zhangyang', 'xiaoming', 'guyun', 'chenfengjie', 'jifeng']

Process finished with exit code 0

 

names = ["zhangyang","xiaoming","guyun","chenfengjie","jifeng",]
names1= names.copy()
names[2] = "顾云"         ###修改"guyun"为顾云
print(names)
print(names1)

打印输出如下: C:\Users\cfj\AppData\Local\Programs\Python\Python35\python3.exe C:/Users/cfj/PycharmProjects/基础/day2/练习.py ['zhangyang', 'xiaoming', '顾云', 'chenfengjie', 'jifeng'] ['zhangyang', 'xiaoming', 'guyun', 'chenfengjie', 'jifeng'] Process finished with exit code 0

 

    例子2:深copy

import  copy
names = ["zhangyang","xiaoming","guyun","chenfengjie","jifeng",]
names[2] = "顾云"         ###修改"guyun"为顾云
names1= copy.deepcopy(names)
print(names)
print(names1)

打印输出如下:
C:\Users\cfj\AppData\Local\Programs\Python\Python35\python3.exe C:/Users/cfj/PycharmProjects/基础/day2/练习.py ['zhangyang', 'xiaoming', '顾云', 'chenfengjie', 'jifeng'] ['zhangyang', 'xiaoming', '顾云', 'chenfengjie', 'jifeng'] Process finished with exit code 0

 

3.元组

元组:创建完之后不可再修改
names =(‘elxe’,‘jack’,‘www’)
比如extend ,增删查改等不能使用

 

4.字符转换

mes = "中华人民共和国"
print(mes)
print(mes.encode(encoding="utf-8")) ##将字符串转成二进制  python默认是utf8
print(mes.encode(encoding="utf-8").decode(encoding="utf-8"))  ##将二进制转成字符串

 

5.购物车程序编写

   需求:

     1、启动程序后,让用户输入工资,然后打印商品列表

      2、允许用户根据商品编号购买商品

     3、用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒 

      4、可随时退出,退出时,打印已购买商品和余额

 

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

welcome_message = '+++++++++++++++ welcome to our shopping mall  +++++++++++++++'
print(welcome_message)

product_list = [    # 创建商品列表
    ('iphone6s',5888),
    ('computer',4300),
    ('bike',800),
    ('book',81),
    ('thinkpad',4500)
]
shop_car = []    # 创建购物列表

salary = input('input your salary:')  # 输入工资
if salary.isdigit:   # 如果薪水输入正确
    salary = int(salary)   # 转换为整数型
else:
    exit()
while True:
    for item in enumerate(product_list):   # 打印产品列表
        index = item[0]
        shop_name = item[1][0]
        shop_price = item[1][1]
        print(index,shop_name,shop_price)
    user_choice = input('input your want to buy on num:[q=quit]')   # 获取信息选择要买的商品还是退出
    if user_choice.isdigit():   # 如果输入的是数字
        user_choice = int(user_choice)
        if user_choice < len(product_list):     # 获取对应产品
            shop_item = product_list[user_choice]
            if shop_item[1] <= salary:    # 如果买得起
                shop_car.append(shop_item)   # 添加入购物列表
                salary -=shop_item[1]   # 计算余额
                for item in shop_car:
                    print(item)
                print('your balance is [%s]'%salary)
                user_continu1 = input("继续 is [yes|y],任意键退出")
                if user_continu1 == 'yes' or user_continu1 == 'y':
                    continue
                else:
                        print(shop_car)
                        exit()
            else:
                print('your balance is [%s],sorry,cannot to buy this product'%salary)   #余额不足提示
                user_continu2 = input("继续 is [yes|y],任意键退出")
                if user_continu2 == 'yes' or user_continu2 == 'y':
                    continue
                else:
                    exit()
    elif user_choice == 'q' or user_choice == 'quit':   #直接退出
        break
    else:   # 如果薪水输入错误
        print("sorry!input code [%s] is not exist!"%user_choice)
        exit()

  

 6.字符串使用

 

'''name='my name is cfj'

print(name.capitalize())   #首字母大写
print(name.count("c"))   #计算c的个数
print(name.center(50,"+"))  #一共打印50个字符,不够使用+补充
print(name.endswith("j"))  #判断字符串以什么结尾
print(name.expandtabs())  #将tab键转成空格
print(name.find("name"))  #字符串的长度,字符串也可以进行切片
  #例子
print(name[name.find("name"):8])  #自己本身前面的长度是3,所以:8可以把name打印处理'''

'''name='my name is {name} and i am {year}'
print(name.format(name='jifeng',year='25'))'''  #格式化,传递字符串


'''print('123abc'.isalnum())    #判断是否只有数字,字母
print('abc'.isalpha())    #纯英文字符
print('123'.isdigit())    #判断是否是整数
print('ad'.isidentifier())  #判断是否是合法的标识符
print('22'.isnumeric())   #只有数字在哪里的时候才是正确的
print('My Name Is Cfj'.istitle())  #字符串的每个字母开头是大写
print('MWWFSF AFSD'.isupper())  #字符全是大写
print(''.join(['1','2','3','4']))   ##字符合并'''

'''name='my name is cfj'
print(name.ljust(50,'*'))    #保证长度,不够其他字符右边补充
print(name.rjust(50,'*'))    #保证长度,不够其他字符左边补充'''


'''print('Cfj'.lower())  #将大写变成小写
print('Cfj'.upper())  #将小写变成大写'''

'''print('Cfj\n'.lstrip())   #去掉左边空格与回车
print('---')'''

'''print('---')
print('\nCfj'.rstrip()) #去掉右边空格与回车'''

print('   Cfj\n'.strip())  #去掉左右的空格


'''p = str.maketrans("abcdef",'123456')
print("alex li".translate(p))   #把字符串转成对应的数值'''


'''print('alex li'.replace('l','L',1))  #替换,且替换第一个
print('alex li'.rfind('l'))  #找到最右边值的下标
print('alex li'.split())  #将字符串按照空格分成列表
print('al ex li'.split('l'))  #将l当作了分隔符
print('Alex Li'.swapcase())  #大写变小写'''
print('alex li'.zfill(50))

 

7.字典运用

 

     (1)字典是无序,无下标,乱序

    例子1:字典的写法

info = {
    'stu01':"chen fengjie",
    'stu02':"jifeng",
    'stu03':"zhan lan the tian"
}

print(info)  #打印出来的值是无序的

    结果输出:

C:\Users\cfj\AppData\Local\Programs\Python\Python35\python3.exe C:/Users/cfj/PycharmProjects/基础/day2/字典1.py
{'stu01': 'chen fengjie', 'stu02': 'jifeng', 'stu03': 'zhan lan the tian'}

  

    (2)字典取值

info = {
    'stu01':"chen fengjie",
    'stu02':"jifeng",
    'stu03':"zhan lan the tian"
}

print(info["stu01"])   #字典取值

  

     (3)删除

方式1:
del info["stu01"]
print(info)

方式2:
info.pop("stu01")   #标准删除
print(info)

  

      (4)查找

      例子1:查询

方式1:
print(info.get('stu01'))

方式2:
print('stu01' in info)  #判断stu01是否存在,输出True或者False

     

 

     (5)修改  

       例子1:

info["stu01"] = "蜈蚣"  #修改值
print(info)

      

       例子2:

av_catalog = {
    "欧美":{
        "www.youporn.com":["很多免费的","世界最大的"],
        "www.pornhub.com":["质量好点"],
        "lemedothistoyou。com":["自拍的","资源不多"],
    },
    "日韩":{
        "tokyo-hat":["质量很好"]
    },
    "大陆":{
        "1024":["全部免费","好人一生平安,服务器在国外,慢!!!"]
        }
}

av_catalog["大陆"]["1024"][1] = "路漫漫兮"
print(av_catalog)

 

       

            (6)添加

     例子1:查询无再添加

av_catalog.setdefault("taiwan",{"www.taiwan.com":[1,2]})  #查看是否有此条信息,若是没有就创建新的
print(av_catalog)

   

      例子2:有交叉替换,无交叉添加

info = {
    'stu01':"chen fengjie",
    'stu02':"jifeng",
    'stu03':"zhan lan the tian"
}

b = {
    'stu01':"cfj",
    'stu04':"poxiao",
    'stu05':"chenxi"
}

info.update(b)     #针对于info而言,有交叉的地方则覆盖,没有的则添加
print(info)

 

      (7)将字典转换成列表 

info = {
    'stu01':"chen fengjie",
    'stu02':"jifeng",
    'stu03':"zhan lan the tian"
}
print(info.items()) #将字典转变成列表'''

   

             (8)建立新字典及修改

c = dict.fromkeys([6,7,8],[1,{"name":"alex"},555])   #建立一个新的字典
print(c)
c[7][1]['name'] = 'chen xi'
print(c)

C:\Users\cfj\AppData\Local\Programs\Python\Python35\python3.exe C:/Users/cfj/PycharmProjects/基础/day2/字典1.py
{8: [1, {'name': 'alex'}, 555], 6: [1, {'name': 'alex'}, 555], 7: [1, {'name': 'alex'}, 555]}
{8: [1, {'name': 'chen xi'}, 555], 6: [1, {'name': 'chen xi'}, 555], 7: [1, {'name': 'chen xi'}, 555]}

    

     (9)字典循环

info = {
    'stu01':"chen fengjie",
    'stu02':"jifeng",
    'stu03':"zhan lan the tian"
}

方式1:
for i in info:
    print(i,info[i])  #建议使用

方式2:
for k,v in info.items():
    print(k,v)

    打印输出:

C:\Users\cfj\AppData\Local\Programs\Python\Python35\python3.exe C:/Users/cfj/PycharmProjects/基础/day2/字典1.py
chen fengjie
stu02 jifeng
stu03 zhan lan the tian
stu01 chen fengjie

  

 

posted @ 2017-02-10 16:03  善战者求之于势  阅读(354)  评论(0)    收藏  举报