A. python介绍
- 可以减少开发成本,代码开源
- 运行速度慢
B. python和其它语言对比
- C语言 : 编译 -> 机器码 -> 计算机
- 其它高级语言: 编译 -> 字节码 -> 机器码 -> 计算机
C. python种类
- CPython 代码 -> C字节码 -> 机器码 (一行一行)
- PYPY(特殊)代码 -> C字节码 -> 机器码 全部转换完 -> 执行
- 其它Python 代码 -> 其它字节码 -> 机器码
D. python基础
a. Python规则
1. 安装: python解释器
2. 写程序
C:Python35python.exe D:1.txt
# a. 打开文件,读取文件内容
# b. 词法分析,语法分析
# c. 字节
- 解释器
windows:
方法一:C:Python35python.exe D:1.txt
方法二:C:Python35python.exe
Linux:
方法一:/usr/bin/python /1.txt
方法二:/usr/bin/python
头部#!/usr/bin/python
chmod 755 1.py
./1.py
- 潜规则
.py 结尾
b. 编码
- 英文 256个-> ascii :a 00000010 由八位组成
- 万国码(至少16位) :a 00000000 00000010 中:10000000 00000000 00000010 最少十六位,没有上限
utf-8,对万国码压缩 :a 00000010 中:10000000 00000000 00000010 最少八位,没有上限
gbk,gb2312 :a 00000010 中: 00100110 00000010
例:
中文:龙
utf-8,需要使用三个字节来表示 24 10000000 00000000 00000010
gbk,gb2312 需要使用二个字节来表示 16 00100110 00000010
- Python编码相关:
文件编码
# -*- coding:utf-8 -*- 声明解释编码
Python解释器编码(py3默认 utf-8)
Python解释器编码(py2默认 ascii)
E. IDE
- pycharm
1.使用
- 添加或者修改文件模板
File->settings->Editor->File and Code Templates->Python Script
添加:
#!/usr/bin/python
# -*- coding:utf-8 -*-
- python版本管理切换
File->settings->Prgject:python->project interpreter
- 已有文件重命名
右击要重命名的文件->refactor->rename
- Python模块安装
File->settings->Prgject:python->project interpreter
- PyChram Tab键补全
file -> Power Save Mode
- PyChram字符集编码设置为UTF-8
File->settings->Editor->Code Style->File Encodings
- PyChram字体设置
File->settings->Editor->Colors & Fonts->Font
- Ctrl+鼠标调整比例
File->settings->Editor->General ->Change font size ....
- 快捷键
alt+ctrl+s # 打开设置界面
tab # 选择要缩进的代码,按键缩进
shift+tab # 选择要缩进的代码,按键增加
ctrl+d # 复制本行粘贴到下一行
ctrl+? #选择要添加注释的行,按键进行#添加或去除
双按shift #全局搜索
ctrl+/ #注释
ctrl+F #查找
ctrl+R #查找替换
F. 注释
#
""" """
G. .pyc文件,字节码文件
- import + 文件名
H. 变量
- 字母
- 数字(不能开头)
- 下划线
- 不能使用python内置关键字
- PS: 下划线分割
n = "name"
v = "name"
#只开辟一个内存空间 ,存在优化机制
n = "name"
v = n
n = "pwd"
#n为pwd ,v 为name
I. 输入,输出
v = input(">>>")
等待用户输入,显示输入内容 ,输出的数字 7 为 "7" 用int()转换
import getpass
v = getpass.getpass('>>>')
等待用户输入,不显示输入内容
print(v)
J. 条件语句
- 严格的缩进
- 例
if 条件 :
满足执行这
elif 条件:
否则满足执行这
else:
都不满足执行这
- pass 什么都不执行
K. 循环语句
while 条件:
- continue 结束本次循环
- break 结束循环
- exit() 退出脚本
L. 其它
i += 1 相等于 i = i + 1
3%2 等于 1
age = 18 数字
age = '18' 字符串
name = 'alex'
name = "alex"
name = """alex"""
name = "'alex'"
name = """
asdfalex
asdfasdf
asdf
"""
M. 运算符
2、比较运算:
3、赋值运算:
4、逻辑运算:
5、成员运算:
a.
i += 1
b.
if 1 == 1 or 1 > 2 and 1 == 4:
print('正确')
else:
print('错误')
c.
content = "Alex 前几天去泰国玩姑娘,一不小心染上了病,他的内心活动是,真该多来几个"
if "前几天去" in content:
print('包含敏感字符')
else:
print(content)
N. Python数据类型
a. 整数 int
- 创建
a = 123
a = int(123)
- 转换
age = "18"
new_age = int(age)
- 验证
print(type(a))
b. 布尔值
- 创建
a = True
b = False
- 转换
v = bool(1) 数字转换只有0为False 其它Ture
a = ""
v = bool(a) 字符串,只有""是False,其他True
待续...
c. 字符串
- 创建
a = "alex"
a = str('alex')
- 转换
age = 18
new_age = str(age)
- 字符串的拼接
name = 'alex'
gender = '女'
new_str = name + gender
- 字符串格式化
# 占位符,%s字符串 %d 数字
# name = '我叫李杰,性别:%s,我今年%s岁,我在说谎!'
# new_str = name %('男',18,)
- 判断子序列是否在其中
content = "Alex 前几天去泰国玩姑娘,一不小心染上了病,他的内心活动是,真该多来几个"
if "前几天去" in content:
print('包含敏感字符')
else:
print(content)
- 移除空白
val = " alex "
# new_val = val.strip() # 左右
# new_val = val.lstrip()# 左边
# new_val = val.rstrip() # 右边
- 分割
user_info = "alex|sb123|9"
# v = user_info.split('|')
# v = user_info.split('|',1)
# v = user_info.rsplit(' ',1)
- 长度(字符)
val = "李杰sb"
v = len(val) #等于4
- 索引
val = "李杰sb"
v = val[0] #等于 李
val = input('>>>')
i = 0
while i < len(val):
print(val[i])
i += 1
- 切片
name = '我叫李杰,性别我今年岁,我在说谎!'
print(name[0])
print(name[0:2])
print(name[5:9])
print(name[5:])
print(name[5:-2])
print(name[-2:])
- 列表
创建:
a = ['alex','狗','eric',123]
a = list(['alex','狗','eric',123])
in判断
if 'alex' in a:
if 'al' in a[0]:
索引
val = a[0]
长度
val = len(a)
切片
a = ['alex','狗','eric',123]
v = a[0::2]
print(v)
追加
a.append('xxoo')
# 在最后追加
插入
a.insert(0,'牛')
# 在索引前边添加
删除
a.remove('eric')
# 删除匹配到的第一个
del a[0]
# 按索引删除
替换
a[1] = 'asd'
# 按照索引替换
For循环
for item in a:
print(item)
#输出每个元素
- 字典
创建
v = {
'name': 'alex',
'password': '123123'
}
# 字典是无序的
索引
n = v['name']
增加,无,增加;有,修改
v['age'] = 19
删除
del v['name']
For循环
for item in v.keys():
print(item)
for item in v.values():
print(item)
for key,val in v.items():
print(key,val)
print(len(user_dict)) #输出有几对
PS: 相互嵌套
user_dict = {
'k1': 'v1',
'k2': {'kk1':'vv1','kk2':'vv2'},
'k3': 123,
'k4': ['alex','eric',['a','b','c'],'李杰',{'k11':'vv1'}],
}
user_dict['k4'][2].append('123')
user_dict['k4'][4]['n'] = '过啥龙'
- 文件
创建文件db
#读文件
f1 = open('db','r')
date = f1.read()
f1.close()
#格式化
# sys|123456|3
# sy|123456|0
# 转换成
# [{'pwd': '123456', 'name': 'sys', 'num': '3'}, {'pwd': '123456', 'name': 'sy', 'num': '0'}]
user_info_list = []
user_str_list = date.split('
')
for item in user_str_list:
temp = item.split('|')
v = {
'name':temp[0],
'pwd':temp[1],
'num':temp[2]
}
user_info_list.append(v)
# [{'pwd': '123456', 'name': 'sys', 'num': '3'}, {'pwd': '123456', 'name': 'sy', 'num': '0'}]
# 转换成
# sys|123456|3
# sy|123456|0
user_str_list = []
for item in user_info_list:
temp = "%s|%s|%s"%(item['name'],item['pwd'],item['num'])
user_str_list.append(temp)
target = "%s
%s"%(user_str_list[0],user_str_list[1])
#写文件
f2 = open('db','w')
f2.write(target)
f2.close()
--------------------------------------------------------------------------------------------------------------------------------------------------------------
练习1
有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。
即: {'k1': 大于66的所有值, 'k2': 小于66的所有值}
答:
1 A = [11,22,33,44,55,66,77,88,99] 2 A1 = [] 3 A2 = [] 4 B = {'k1':A1,'k2':A2} 5 for item in A: 6 if item < 66: 7 A1.append(item) 8 elif item == 66: 9 pass 10 else: 11 A2.append(item) 12 print(B)
练习2
功能要求:
- 要求用户输入总资产,例如:2000
- 显示商品列表,让用户根据序号选择商品,加入购物车
- 购买,如果商品总额大于总资产,提示账户余额不足,否则,购买成功。
- 附加:可充值、某商品移除购物车
goods = [
{"name": "电脑", "price": 1999},
{"name": "鼠标", "price": 10},
{"name": "游艇", "price": 20},
{"name": "美女", "price": 998},
]
答:
1 goods = [ 2 {"name": "电脑", "price": 1999}, 3 {"name": "鼠标", "price": 10}, 4 {"name": "游艇", "price": 20}, 5 {"name": "美女", "price": 998}, 6 ] 7 amount = 2000 8 card = [] 9 print('欢迎光临!') 10 while True: 11 option = input('1.购物 2.查询购物车 3.结账 4.查询余额 5.充值 6.退出 请输入: ') 12 if option == '1': 13 for item in goods: 14 print(item['name'],item['price'],'元') 15 type = 'y' 16 while type != 'q': 17 res = input('请输出购买商品:') 18 for item in goods: 19 if res == item['name']: 20 card.append(item) 21 print('已加入购物车') 22 type = input('按任意键继续购买,按q返回主页') 23 elif option == '2': 24 option_1 = 'n' 25 while option_1 != 'q': 26 type = input('查看购物车请按1,删除商品请按2,按q键返回主页') 27 if type == '1': 28 for item in card: 29 print(item['name'],item['price'],'元') 30 elif type == '2': 31 option_2 = 'n' 32 while option_2 != 'q': 33 res = input('请输入要删除的商品名:') 34 for item in card: 35 if res == item['name']: 36 card.remove(item) 37 print('删除成功') 38 option_2 = input('任意键继续删除,按q键返回') 39 elif type == 'q': 40 option_1 = 'q' 41 else: 42 print('请正确输入') 43 elif option == '3': 44 num = 0 45 for item in card: 46 money = int(item['price']) 47 num += money 48 if amount >= num: 49 amount -=num 50 print('已结账') 51 card = [] 52 else: 53 print('余额不足') 54 option_1 = input('返回主页请按任意键,退出请按q') 55 if option_1 == 'q': 56 break 57 else: 58 continue 59 elif option == '4': 60 amount_1 = str(amount) 61 print('当前余额为:' + amount_1) 62 option_1 = input('返回主页请按任意键,退出请按q') 63 if option_1 == 'q': 64 break 65 else: 66 continue 67 elif option == '5': 68 option_2 = 'n' 69 while option_2 != 'q': 70 money = input('请输出充值金额:') 71 if money.isdigit(): 72 pass 73 else: 74 print('请正确输入!') 75 continue 76 option_1 = input('确认请按y,返回请按任意键!') 77 if option_1 == 'y': 78 money = int(money) 79 amount += money 80 print('充值成功') 81 option_2 = input('继续充值请按任意键,返回请按q') 82 else: 83 print('充值失败') 84 option_2 = input('继续充值请按任意键,返回请按q') 85 continue 86 elif option == '6': 87 break 88 else: 89 print('请正确输出选项!') 90 continue 91 print('谢谢光临!')
练习3
交互式显示省市县三级联动
答:
1 dic = { 2 "河北":{ 3 "石家庄" :["鹿泉","藁城","元氏"], 4 "邯郸" : ["永年","涉县","磁县"] 5 }, 6 "河南":{ 7 "郑州":["巩义","登封","新密"], 8 "开封":["金明","鼓楼","通许"] 9 }, 10 "山西":{ 11 "太原":["古交","清徐","阳曲"], 12 "大同":["天镇","阳高","广灵"] 13 } 14 } 15 back = 'n' 16 while back != 'q': 17 i = 0 18 for item in dic.keys(): 19 i += 1 20 print("%d.%s"%(i,item)) 21 option = input('请输入查询的地区:') 22 if option not in dic.keys(): 23 print('请正确输出') 24 back = input('退出请按q,按任意键继续') 25 else: 26 back_1 = 'n' 27 while back_1 != 'q': 28 i = 0 29 for item in dic[option].keys(): 30 i += 1 31 print("%d.%s"%(i,item)) 32 option_1 = input('请输入查询的地区:') 33 if option_1 not in dic[option].keys(): 34 print("请正确输出") 35 back_1 = input("返回请按q,退出请按Q,按任意键继续") 36 if back_1 == 'Q': 37 print("谢谢使用") 38 exit() 39 else: 40 pass 41 else: 42 back_2 = 'n' 43 while back_2 != 'q': 44 i = 0 45 for item in dic[option][option_1]: 46 i += 1 47 print("%d.%s"%(i,item)) 48 back_2 = input('返回请按q,退出请按Q') 49 if back_2 == 'Q': 50 print("谢谢使用") 51 exit() 52 else: 53 pass
作业
1. 基于文件存储的用户登录程序(3次登录失败,锁定用户)
答:
1 db文件为 2 3 sys|123456|0 4 sy|123456|0 5 6 7 f1 = open('db','r') 8 date = f1.read() 9 f1.close() 10 user_info_list = [] 11 user_str_list = date.split(' ') 12 for item in user_str_list: 13 temp = item.split('|') 14 v = { 15 'name':temp[0], 16 'pwd':temp[1], 17 'num':temp[2] 18 } 19 user_info_list.append(v) 20 21 22 back = 'n' 23 while back != 'q': 24 user_name = input('请输出用户名:') 25 import getpass 26 user_pwd = getpass.getpass('请输出密码:') 27 option = '0' 28 for item in user_info_list: 29 if user_name in item['name']: 30 option = '0' 31 user_num = int(item['num']) 32 if user_num < 3: 33 if user_pwd == item['pwd']: 34 print('登录成功!') 35 item['num'] = 0 36 exit() 37 else: 38 item['num'] = user_num + 1 39 option = '1' 40 break 41 else: 42 print('用户被锁!') 43 exit() 44 else: 45 option = '1' 46 if option == '1': 47 print('用户名密码或错误!') 48 else: 49 pass 50 back = input('按q退出,任意键继续!') 51 52 53 user_str_list = [] 54 for item in user_info_list: 55 temp = "%s|%s|%s"%(item['name'],item['pwd'],item['num']) 56 user_str_list.append(temp) 57 target = "%s %s"%(user_str_list[0],user_str_list[1]) 58 f2 = open('db','w') 59 f2.write(target) 60 f2.close()