使用input和raw_input都可以读取控制台的输入,但是input和raw_input在处理数字时是有区别的
当输入为纯数字时
input返回的是数值类型,如int,float
raw_input返回的是字符串类型,string类型
输入字符串为表达式
input会计算在字符串中的数字表达式,而raw_input不会。
如输入 “57 + 3”:
input会得到整数60
raw_input会得到字符串”57 + 3”
看python input的文档,可以看到input其实是通过raw_input来实现的:
|
内容概览
- 模块
- python运行过程
- 基本数据类型(数字,字符串)
- 序列类型(列表,元组,字典)
-
模块使用
- 常用的模块之一:os(用于调用系统命令等)
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import os
print(os.path) #打印当前路所在的路径
cmd=os.system("dir") #定义cmd执行系统的dir命令
print(cmd) #返回cmd的状态信息,成功为0,反之不为0
cmd_1 = os.mkdir("SSS") #创建文件夹SSS
print(cmd_1) #打印状态
cmd_2 = os.rmdir("SSS") #删除SSS文件夹
##如果要通过print来打印定义的cmd命令变量的话就需要popen这个参数
cmd_3=os.system('ipconfig')
print(cmd_3)
cmd_4=os.popen("ipconfig").read() #执行系统命令ipconfig
print(cmd_4)
3.sys模块
#!/usr/bin/env python
import sys
print(sys.path) #打印python相关路径
print(sys.argv) #传参数的功能<br>print(sys.argv[1]) #打印第二个参数
-
python运行过程
对于Python的运行我们还是得追溯到那个神奇的*.pyc字节码文件,这就是在python解释器运行python代码的时候生成的一个字节码文件。
那么生成的*.pyc文件是什么呢?c应该是compiled的缩写才对啊!
-
基本数据类型
在python3.x中对于int这个整形数据类型不再有long int这种说法,这样有效的防止了所谓的溢出问题
成员运算
下面是装逼的三元运算,感觉66的:
2.python3.x严格区分string和byte:
在Python3.x下,文本用unicode表示,二进制数据则使用byte来表示。
代码表示:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#Author:wanghui
msg = "呵呵哒!!"
#print(msg.encode(encoding='utf-8')) ##编码的过程,指定字符编码
#结果 '\xe5\x91\xb5\xe5\x91\xb5\xe5\x93\x92\xef\xbc\x81\xef\xbc\x81'
##解码的过程<br> 呵呵哒!!
print(msg.encode(encoding='utf-8').decode(encoding='utf-8'))
序列类型
- 列表:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#Author:wanghui
names = ["chenjing","huangjie","huyuedong"]
'''
##切片操作
print(names[0]) #切片打印第一个位置元素
print(names[0:2]) #打印前两个元素(顾头不顾尾)
print(names[-2:]) #打印倒数后两个元素,不建议用[-2:-1]
'''
###添加元素
#names.append("shaolin") #在最后位置追加shaolin这个新元素
#print(names)
#names.insert(2,"wanghuihui") #在第三个位置插入wanghuihui
#print(names)
#b = ["wanghui","huangjie","chenyibo","huyuuedong"]
#names.extend(b) #在 names中拓展b列表
#print(names)
###修改元素
#names[2] = "alex" #修改第二个位置的元素为alex
#print(names)
#names[3] = "fengjie" #如果第四个位置没有fengjie这个元素的话就会报错
#print(names)
###索引(用于索引引用)
#print(names.index("alex")) #获取alex的位置索引
#print(names[names.index("alex")]) #根据alex索引位置值显示对应的内容
###统计
# print(names.count("wanghui")) #统计“wanghui”出现的次数
###删除操作
#方法一:del操作
# print(names)
# del names[2] #按照元素的索引位置删除
# print(names)
#方法二:remove操作
# print(names)
# names.remove("huyuedong") #按照元素的value删除
# print(names)
#方法三:pop操作
# print(names)
# names.pop() #删除结尾的一个元素
# print(names)
# names.pop(0) #指定索引位置删除
# print(names)
#方法四:清空
# names.clear() #直接清空列表
# print(names)
###排序操作
names.sort()
print(names) #排序的优先级是符号>数字>大写>小写
深浅拷贝
深浅拷贝,即可用于序列,也可用于字典
##浅拷贝
import copy
a=["hahaha","xixixi","lalala",["hehe",123],"wuwuwu"]
b=copy.copy(a)
print(a) #输出['hahaha', 'xixixi', 'lalala', ['hehe', 123], 'wuwuwu']
print(b) #输出['hahaha', 'xixixi', 'lalala', ['hehe', 123], 'wuwuwu']
a[0]="jjjjj" #修改第一个元素为jjjjj
print(a) #输出['jjjjj', 'xixixi', 'lalala', ['hehe', 123], 'wuwuwu']
print(b) #输出['hahaha', 'xixixi', 'lalala', ['hehe', 123], 'wuwuwu']
a[3][1]=789 #修改第三个元素的第二个元素为789
print(a) #输出['hahaha', 'xixixi', 'lalala', ['hehe', 789], 'wuwuwu']
print(b) #输出['hahaha', 'xixixi', 'lalala', ['hehe', 789], 'wuwuwu']
##深拷贝
import copy
names = ["wanghui","huangjie","chenyibo","王辉",["alex","jack"]]
name2 = copy.deepcopy(names)
names[-1][0]="ALEX"
print(names)
print(name2) ##保持原状不变,这就是深拷贝
2.元组:不能修改的列表,同样支持count和index方法
#!/usr/bin/env python
# -*- coding:utf-8 -*-
names = ("huangjie","liurun","huyuedong")
names.count('huangjie')
names.index('huangjie')
names[names.index("huangjie")]
#切片操作
print(names[1:]) #打印第一个到最后一个元素
print(names[0:2]) #打印第一个到第三个元素
#不能对元组元素进行增加和删除操作
3.字符串操作:比较多
#!/usr/bin/python
# -*- coding:utf-8 -*-
a = "name is hehehe"
print(a.capitalize()) # 首字母大写 Name is hehehe
print(a.count('h')) # 统计h出现的次数 3
print(a.center(16, "-")) # 按照10字节的字符,如果不够就用-补充,字符串居中
#-name is hehehe-
print(a.encode()) # 字符串编码 name is hehehe
print(a.endswith('he')) # 判断是否以he结尾 True
print(a.expandtabs()) # 字符串中有\t占位符才能读取到 name is hehehe
print(a.find('hehe')) # 打印hehe的下标位置 8
print(a[a.find("hehe"):]) #切片 hehehe
print(a.format()) #name is hehehe
print("hello {name}".format(name="hehe")) #hello hehe
print(a.index("is")) # 打印is的index编号 5
print(a.isalnum()) # 阿拉伯数字,有特殊字符就不行了 False
print(a.isalpha()) # 纯英文字符包括大小写 False
print(a.isdigit()) # 是否为十进制 False
print(a.islower()) # 判断字符串是否为小写 True
print(a.isspace()) # 是否为空格 False
print(a.istitle()) # 是否为标题 False
print(a.isupper()) # 是否为大写 False
print('+'.join(['1', '2', '3', '4'])) # 拼接成1+2+3+4的形式
print(a.ljust(20, '*')) # 保证长度20然后右侧填充 name is hehehe******
print(a.rjust(20, '#')) # 保证长度20然后左侧填充 ######name is hehehe
print(a.lower()) # 把大写转成小写
print("\n\n\nhehehe\n\nkkk".lstrip()) # 去除左边的空格或者回车
print("\n\n\nhehehe\n\nkkk").rstrip() # 去除右边的回车或者空格
print("\n\n\nhehehe\n\nkkk").strip() # 去除两侧的回车或者空格
# p = str.maketrans("abcdef","123456")
# print("wanghui".translate(p)) #把字符串转换成后面对应的数字的值w1nghui
print(a.replace('h', 'H', 2)) # 替换字符串里的h为H,name is HeHehe
print(a.rfind('e')) # 找到最右边的e的位置下标并返回
print('1+2+3+4'.split('+')) # 按照+作为分隔符分割字符串 ['1', '2', '3', '4']
# print('1+2\n+3\n+4'.splitlines('+')) #按照+号作为分隔符分割(忽略回车或者空格)
print(a.startswith("heh")) # 判断字符串是否以heh开头
print(a.swapcase()) # NAME IS HEHEHE
print(a.title()) # Name Is Hehehe
print(a.zfill(20)) # 补位操作 000000name is hehehe
4.字典及其操作
#!/usr/bin/env python
# -*- coding:utf-8 -*-
dic = {
'wanghui': 12345,
'jack': 123456,
'sam': 1234567,
'sary': 12345678
}
# 字典是无序的,key是唯一的,so天生去重
print(dic) # 无序打印字典
#{'wanghui': 12345, 'sary': 12345678, 'jack': 123456, 'sam': 1234567}
print(dic['wanghui']) # 按照wanghui打印出对应的值
dic['wanghui'] = 'wanghui' # 修改wanghui的值为wanghui
print(dic['wanghui']) # 打印
dic['henry'] = 'henry' # 新增字典元素
# del dic['wanghui'] #删除wanghui和对应的值
# print(dic)
# dic.pop('henry') #指定删除
# dic.popitem() #随机删除
print(dic.get('wanghui')) # 安全的查找方式,如果存在返回其值。否则返回none
dic_1={ 'wanghui':12345, 'alex':234567, 'huyuedong':23455}
dic.update(dic_1) # 合并两个字典,如果有交叉,就更新字典,如果没有交叉就创建
print(dic)
print(dic.items()) # 字典转成了列表
#[('alex', 234567), ('sam', 1234567), ('huyuedong', 23455), ('wanghui', 12345),
# ('sary', 12345678), ('jack', 123456), ('henry', 'henry')]
c = dic.fromkeys([6, 7, 8]) # 创建了新的字典
print(c) # ->输出:{8: None, 6: None, 7: None}
d = dic.fromkeys([6, 7, 8], "test") # 初始化字典创建
print(d) # ->输出:{8: 'test', 6: 'test', 7: 'test'}
e = dic.fromkeys([9, 10, 11], [1, {"name": 'wanghui'}, 1234])
print(e) #{9: [1, {'name': 'wanghui'}, 1234],
# 10: [1, {'name': 'wanghui'}, 1234], 11: [1, {'name': 'wanghui'}, 1234]}
嵌套字典:
dic={
"甘肃省":{
'张掖市':['甘州区','民乐县','山丹县','高台县'],
'武威市':['凉州区','古浪县','民勤县'],
'酒泉市':['敦煌市','玉门市','肃州区']
},
"山东省":{
'潍坊市':['寒亭区','高密市','寿光市','昌乐县'],
'济南市':['长清区','历下区','禹城市'],
'青岛市':['即墨市','黄岛区','崂山区']
},
"陕西省":{
'西安市':['未央区','长安区','雁塔区','新城区'],
'咸阳市':['秦都区','渭城区','礼泉县'],
'安康市':['汉阴县','白河县','紫阳县']
}
}
dic['陕西省']['西安市'][2]="碑林区" #修改操作
print(dic)
print(dic.values())
dic.setdefault('台湾省',{'baidu.com':[1,2,3]}) #设置默认值
print(dic)
课堂程序
购物车程序
需求:
- 启动程序后,让用户输入工资,然后打印商品列表
- 允许用户根据商品编号购买商品
- 用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
- 可随时退出,退出时,打印已购买商品和余额
enumerate将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标
#!/usr/bin/env python
# -*- coding:utf-8 -*-
product_list = [
('Iphone',5800),
('Mac Pro',9800),
('Bike',800),
('Watch',10600),
('Coffee',31),
('Alex Python',120),
]
shopping_list = []
salary = raw_input("Please input your salary:")
if salary.isdigit():
salary=int(salary)
while True:
for num,item in enumerate(product_list):
print(num,item)
user_choice = raw_input("Please choice your item:")
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 car,your current balence is \033[31;1m%s\033[0m" %(p_item,salary))
else:
print("your money is not enough to buy,you have \033[41;1m%s\033[0m left" %(salary))
else:
print("your choice %s is out of shopping_list" %(user_choice))
elif user_choice == 'q':
print("shopping_list".center(50,"*"))
for i in shopping_list:
print(i)
print("your current balence:",salary)
exit()
else:
print("Invalid option!!")
else:
print("invalid salary!!")
三级菜单程序:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
##三级菜单字典定义
zone = {
"甘肃省": {
"张掖市": ["甘州区", "民乐县", "山丹县"],
"武威市": ["凉州区", "古浪县", "民勤县"],
},
"山东省": {
"济南市":["历下区","长清区","禹城市"],
"潍坊市":["昌乐县","潍城区","寒亭区"]
},
"陕西省": {
"西安市":["雁塔区","新城区","未央区"],
"咸阳市":["礼泉县","秦都区","渭城区"]
}
}
##退出循环标志位定义
exit_flag = True
while exit_flag:
for i in zone: #读取第一级菜单
print(i)
choice = raw_input("first,press q to exit:") #第一级菜单输入
if choice == "q":
exit_flag =False
if choice in zone:
while exit_flag:
for i2 in zone[choice]: #第二级菜单读取
print("\t\t",i2.decode(encoding='utf-8'))
choice2 = raw_input("second,press b return back and q to quit!!!:") #第二级菜单输入
if choice2 in zone[choice]:
while exit_flag:
for i3 in zone[choice][choice2]:
print("\t\t\t\t",i3)
choice3 = raw_input("last one,press b return back and q to quit!!!") #第三级菜单输入
if choice3 == 'b':
break
elif choice3 == "q":
exit_flag=False
if choice2 == 'b':
break
elif choice2 == 'q':
exit_flag = False
升级版三级菜单(以后可以当模板):
current = zone
last = []
while True:
for i in current:
print(i)
choice = input(">>:")
if len(choice) == 0 :continue
if choice == 'b':
if len(last) == 0:break #防止第一级为空报错,直接退出
current=last[-1] #打印当前一级
last.pop() #往上走一级,就删除当前
if choice not in current:continue
last.append(current) #保存上级菜单
current = current[choice] #当前菜单