python基础(二)

一、模块初识

__author__ = 'meng'

import sys

#print (sys.path) #1.打印环境变量
#print (sys.argv) #2.打印相对路径
#print (sys.argv[2]) #3.读参数,计算机从0开始数

'''
import os
#cmd_res = os.system("dir") #执行命令,不显示结果
cmd_res = os.popen("dir").read() #读出结果
print ("---->",cmd_res)
os.mkdir("new_dir")  #创建目录
'''

 以下输出的结果对应上面注释1,2,3

 

二、.pyc文件

python是一门先编译后解释的语言。python程序第二次运行时,先在硬盘找同名的.pyc文件,如果找到直接载入,否则从新编译解释运行。pyc文件其实是PyCodeObject的一种持久化解决方案。

三、python常用数据类型

1、数字

int(整型): 在python3里面,只有一种整数类型int,表示为长整型,没有python2中的Long.

long长整型):python2中长整数没有限制长整数数值的大小,实际上我们使用的机器内存数值有限,我们使用的长整数数值不可能无限放大。如果整数发生溢出,python会将整数自动转化为长整数。如今在长整数数据后面不加字母L也不会导致严重后果。

float(浮点数):小数。

2、布尔值

真或假

1或0

3、字符串

"Hello World"

python的字符串拼接,需要在内存中开辟一块连续的空间,并且一单修改字符串需要再次开辟空间,+号一出现就会在内存中开辟一块空间。

>>>
>>> type(10)
<class 'int'>
>>> type(3.5)
<class 'float'>
>>> type(True)
<class 'bool'>
>>>

 四、三元运算

>>> a,b,c = 1,3,5
>>> d =a if a < b else c
>>> d
1
>>>

  result = 值1 if 条件 else 值2

如果条件为真:result = 值1

如果条件为假: result = 值2

五、bytes数据

msg = "穿越火线"
print (msg)
print (msg.encode()) #python3默认使用utf-8编码
print (msg.encode().decode()) #解码

  把字符串先转成bytes,再转回来。

"D:\Program Files (x86)\python36\python.exe" D:/py14/day2/sys_mod.py
穿越火线
b'\xe7\xa9\xbf\xe8\xb6\x8a\xe7\x81\xab\xe7\xba\xbf'
穿越火线

Process finished with exit code 0

  

 六、列表切片

__author__ = 'meng'

names = ["M4A1","AK-47","AWM","巴雷特"]

print (names)
print (names[0],names[2])
print (names[1:3]) #切片,顾头不顾尾,从左往右数
print (names[3])#取最后一个
print (names[-1])#从右往左取,取最后一个,下标-1代表最后一位
print (names[-2:])#取最后2个,
print (names[:2])#空着代表0,取下标0和1的值

  下面是对应的输出结果

"D:\Program Files (x86)\python36\python.exe" D:/py14/day2/names.py
['M4A1', 'AK-47', 'AWM', '巴雷特']
M4A1 AWM
['AK-47', 'AWM']
巴雷特
巴雷特
['AWM', '巴雷特']
['M4A1', 'AK-47']

Process finished with exit code 0

  

 

七、深浅copy

如果只有顶级对象:

>>> D = ['IT','name','age']
>>> import copy
>>> C1 = copy.copy(D)   #浅拷贝
>>> C2 = copy.deepcopy(D) #深拷贝
>>> D                                 #原始列表
['IT', 'name', 'age']
>>> id(D);id(C1);id(C2)  #三个不同对象
42981832
43400584
43400776
>>> D[1]=25           #改变下标1的值为 25
>>> D;C1;C2           #D变了,深浅copy没变
['IT', 25, 'age']
['IT', 'name', 'age']
['IT', 'name', 'age']
>>>

 如果有嵌套对象,源里的嵌套对象改变,浅copy跟着改变嵌套对象,深copy不受影响。

__author__ = 'meng'

import copy
names = ["M4A1","AK-47","AWM",["警棍","马来剑"],"巴雷特"]
b = copy.copy(names) 
c = copy.deepcopy(names) 
print (names)
names[2] = "狙击步枪"
names.insert(5,"AN94")
names[3][0] = "尼泊尔"
print (names)
print (b)
print (c)
#######################对应输出结果
['M4A1', 'AK-47', 'AWM', ['警棍', '马来剑'], '巴雷特']
['M4A1', 'AK-47', '狙击步枪', ['尼泊尔', '马来剑'], '巴雷特', 'AN94']
['M4A1', 'AK-47', 'AWM', ['尼泊尔', '马来剑'], '巴雷特']
['M4A1', 'AK-47', 'AWM', ['警棍', '马来剑'], '巴雷特']

 

【结论】
深浅拷贝都是对源对象的复制,占用不同的内存空间
如果源对象只有一级目录的话,源做任何改动,不影响深浅拷贝对象
如果源对象不止一级目录的话,源里的嵌套对象改动,都要影响浅拷贝,但不影响深拷贝
序列对象的切片其实是浅拷贝,即只拷贝顶级的对象

  

 八、元组

元组跟列表一样,元组只能读,()表示,不能增删改元素。

购物车程序练习:

 

__author__ = 'meng'

product_list = [
    ("Iphone",5800),
    ("Mac Pro",9800),
    ("Bike",800),
    ("Watch",10600),
    ("Coffee",31),
    ("python",120)
]
shopping_list = []
salary = input("please input your salary:")
if salary.isdigit(): #如果输入的字符串是数字为真
    salary = int(salary)  #把字符串转成int整数类型
    while True:
        for index,item in enumerate(product_list):  #enumerate打印下标
             #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 ("Add %s into shopping cart,your current blances is\033[31;1m %s\033[0m" %(p_item,salary))
                else:
                    print ("\033[41;1m 你的余额只剩[%s],还买个毛线啊\033[0m " % salary)
            else:
                print ("你要买的 [%s] 商品不存在!" % 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")

购物车二

__author__ = 'meng'
#!coding:utf-8
import sys
goods = [
                {"name": "电脑", "price": 1999},
                {"name": "鼠标", "price": 10},
                {"name": "游艇", "price": 20},
                {"name": "美女", "price": 998},
            ]
shop_list = [] #用户选择的商品价格
shop_list_2 = [] #用户选择的商品名称

salary = input('请输入你的工资,工资必须大于0:').strip()
#print (type(salary))
if salary.isdigit(): #如果输入的是阿拉伯数字为真,
    salary = int(salary)  #把字符串转成 int 类型
    while True:
        for i,k in enumerate(goods): #获取列表元素的下标
            print (i,k)              #打印下标和值
        user_choice = input ('请输入商品序号购买::').strip()
        if user_choice.isdigit():
            user_choice = int(user_choice)
            if user_choice < len(goods) and user_choice >= 0:
                p_item = goods[user_choice]['price']  #获取用户选择的商品价格
                p_key = goods[user_choice]['name']    #获取用户选择的商品名称
                #print (p_item)
                if p_item < salary: #买得起
                    shop_list.append(p_item) #加入购物车的商品价格表
                    shop_list_2.append(p_key) #加入购物车的商品名称
                    #print (shop_list)
                    salary = salary - p_item #实时余额
                    print ('商品 [%s] 已经加入购物车,你的可用余额还有[ %d ],输入 q 退出!' %(p_key,salary))
                else:
                    print ('你的余额只有[ %s],不能购买[ %s],输入 q 退出!' % (salary,p_key))
            else:
                print ('你购买的商品不存在,请重新输入商品的序号购买!')
        elif user_choice == 'q':
            sys.exit('你购买的 %s 已经放入购物车,购买成功!你的可用余额还有 %d ,退出登录!' %(shop_list_2,salary))

  

 九、字符串常用操作

 

__author__ = 'meng'

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

print (name.capitalize()) #首字母大写
print (name.count("m")) #统计有多少个 m
print (name.center(50,"-")) #把字符串放中间,不够的用-表示
print (name.endswith("ng")) #判断字符串是否是以 ng 结尾
print (name.expandtabs(50)) #把tab键转换成多少个空格
print (name[name.find("name"):]) # 字符串切片
print (name.format(name = "meng",year=23)) # 格式化输出
print (name.format_map({'name':'meng','year':23})) #很少用
print (name.index("is")) #该方法返回查找对象的索引位置
print ("Aab123".isalnum()) #包含英文字母和阿拉伯数字
print ("abAC".isalpha()) #纯英文字符
print ("1A".isdecimal()) #10进制为真
print ("1A".isdigit()) #字符串是数字为真
print ("1A".isidentifier())#判断是不是一个合法的标识符
print ("+".join(["1","2","3"])) #将列表里面的元素连接起来
print (name.ljust(50,"*")) #长度50,不够的用*表示
print (name.rjust(50,"-")) #长度50,开始位置不够的用-号表示
print ("Meng".lower()) #变成小写
print ("Meng".upper())#变大写
print ("\nMeng".lstrip())#去掉左边的空格
print ("Meng\n".rstrip())#去掉右边的空格
print ("  Meng\n".strip())#去掉开头和结尾的空格
print ("1+2+3+4".split("+")) #+号作为分隔符的作用
print ("1+2\n+3+4".splitlines()) #自动识别不同系统的换行符

  十、字典的使用

 

 字典是一种 key-value的数据类型,字典不存在下标。字典是无序的,key是唯一的。字典用{}表示,元组用()表示,列表用[]表示。

 

posted @ 2017-01-04 10:50  menglingqian  阅读(237)  评论(0编辑  收藏  举报