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是唯一的。字典用{}表示,元组用()表示,列表用[]表示。

吃鸡id:开车撞死一群人

浙公网安备 33010602011771号