目录
一、Python是一种通用的高级语言
编程工具包括编译工具(编译型语言:exe,elf)和解释工具(解释型语言:Python,脚本),解释型语言直接存为文本文件。
Python特点:
- 高级语言:易学习,易掌握
- 解释型语言:易修改,易调试
二、安装及一个小游戏
(1)安装:https://www.python.org/
步骤略。
在Windows的环境变量中添加python目录:
在cmd中输入:
path=%path%;C:\Python
(C:\Python 为python安装目录。)
按回车键即可。
(2)小游戏
import random
num = random.randint(1,100) #获得一个整数
is_done = False #是否猜中指针
count = 0 #玩家玩的次数
while not is_done:
guess = int(input('请输入一个1~100的整数:'))
if guess == num:
is_done = True
elif guess > num:
print('大了,再猜猜!')
elif guess < num:
print('小了,再猜猜!')
count += 1
print('恭喜你猜了{}次,猜对了!!!答案就是{}!'.format(count,num))
三、数字和运算
int, float,complex
(1) 变量
变量命令规则:
- 变量可以是字母,数字,下划线
- 变量不能使用有特殊意义的字母
- 变量的第一个字符不能是数字
type(变量名)可以以查看变量类型
四、字符串
- str
(1)'...'或“....”,注意有时需要用转义字符\
(2)字符较多或跨多行使用'''....'''
- unicode编码是python3默认编码:兼容ascii和emoji等世界大部分文字系统
编码字符转换:ord() 和 chr()
- 变量 = 字符串
len(变量名) #计算字符串长度
变量名[下标] #引用字符 ,下标从0开始计数,可以是负值(表示从右向左)
变量名[下标1:下标2] #截取字符串区间
'moumouniu{}'.format() #格式化字符串,将{}中的内容替换为format括号中的内容
五、流程控制语句
shell中每行代表一个语句,python自上而下执行,可以在也句尾+\分行写代码
-
条件语句
(1)一般格式
if 条件表达式1:
子语句1 #缩进一般统一用四个空格
elif 条件表达式2:
子语句2
else:
子语句3
注意:tab键和空格键不能混用!
(2)表达式的结果为非0时,满足条件
float------非0.0
complex------非0+0j
str-------非空字符串
bool------非0值True (推荐使用)
例题:对一个整数进行因式分解
#因式分解
x = input("输入一个(0,1000)的整数:")
x = eval(x) #函数用来执行一个字符串表达式,并返回表达式的值
t = x
result = [] #list:用于存放因式
if t == 1: #判断输入是否为1,要不要判断得看题干输入数字的范围
result.append(1)
else:
i = 2
while True:
if t == i:
result.append(i)
break
if t % i == 0:
result.append(i)
t = t/i
else:
i += 1
print(x,'=','*'.join(map(str,result)))#把列表的每一个元素用*连接起来
- 循环语句
(1)while(条件满足则执行循环体内容)
while 条件控制语句:
执行内容
else:#条件不满足时执行
执行内容
(2)关键字:break(跳出当前循环)和continue(终止当前循环,直接进行下一个循环)
(3)for语句
for x in ....: #...可以是数组,字典等可遍历的对象
(4)循环嵌套
六、函数
(1)格式
def 函数名(arg1,...):
函数体
(2)可设置默认参数
在def 函数名(arg1,arg2= ,...),参数2的值作为这个函数的局部变量‘ ’
(3)def 函数名(*参数名)
参数名前加*,一次可以传入多个参数,存成元组()
(4)def 函数名(**参数名)
参数名前加**,一次可以传入多个参数,存成字典{} ,只支持带关键词的参数如a=1
(5)递归例题
#1+2+...+n求和
def sum_it(n):
if n == 0:
return 0
else:
return n + sum_it(n-1)
七、简单数据结构
7.1 列表
(1)格式 list = [...,...,...]
列表的内容可以是字符串,浮点数,整型,列表
(2)特点
1集合性的数据类型
2列表是有序的 ----用下标索引访问,可增删改查
一些操作详见:菜鸟教程python3 列表
(3)列表的遍历
包括直接遍历列表元素和通过索引遍历列表
list1 = [1,2,3,4,5]
for i in list1:
print(i*2) #直接遍历 列表元素
for i in range(len(list1)):
print(a[i]*2) #通过索引 遍历列表
(4)列表的截取和分片
slice = list[st:en] (st:起始索引 en:最后元素索引+1 省略则表示起头/结尾
(5)例题:计算质数
思路:根号做法质数判定是看它只有1和它本身可以将它整除,也就是看因数,如100 的因数 1 100;2 50;4 25;...;10 10;由此可见,两个因数一个大于等于根号100,另一个小于等于根号100.所以只要找到从2到根号100里面有没有是100的因子即可。
#计算质数:只有1和它本身可以将它整除
import math
cal_range = int(input('please input the range to calculate the prime:'))
prime_nums = [] #计算出来的质数结果存在列表中
for i in range(cal_range + 1): #+1是为了计算包括输入的那个数字
if i == 0 or i == 1:
continue
num = 2
while num <= math.sqrt(i): #尝试所有可能的除数
if i % num ==0:
break
else:
num += 1
if num > math.sqrt(i):
prime_nums.append(i)
for i in prime_nums:
print(i)
(6)列表推导式
通过推导式生成新列表
x = [1,2,3,4]
x1 = [i*i for i in x] # >>>x1 = [1,4,9,16]
(7)列表字符串转化
- join():连接
'sep'.join(seq) (sep:分隔符。可以为空 seq:要连接的元素序列、字符串、元组、字典)
- split():分割
str.split(str="", num=string.count(str))
7.2 元组
(1)格式:tup = (...,...,...,)
(2)特点:
- 元组与列表类似,不同之处在于元组的元素不能修改
- 元组使用小括号,列表使用方括号
- 元组支持列表操作
- 元组执行效率相对较高(快)
(3)元祖和列表可转化
list( )和tuple( )
(4)zip()函数:把元素打包成元组
7.3 字典
(1)格式:dict = {key1:value1,key2:value2,....}
(2)特点:
- 键必须是唯一的(不重复),但值则不必。
- 值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。
- 字典是无序的
(3)访问字典元素:dict[key] (输出为对应值,无该关键字则报错)
in操作符可检测字典中关键字是否存在
(4)遍历:
#遍历关键字
for key in x:
print(key,value)
#同时取出关键字的值
for key,value in x.items():
print(key,value)
(5)get()函数
get(参数1,参数2) (参数1:需要查找的key, 参数2:如果key不存在get返回的默认值)
(6)例题:
#词频统计:统计一段英文中,每个单词出现的次数
p = '''
If I could save time in a bottle
the first thing that I'd like to do
is to save every day until eternity passes away
just to spend them with you
If I could make days last forever
if words could make wishes come true
I'd save every day like a treasure and then
again I would spend them with you
'''
lines = p.strip().split('\n') #移除字符串头尾指定的字符,这里是换行符
words_cnt = {} #创建一个字典,存储结果
for line in lines:
line = line.replace(',','').lower() #删除,;lower():转换成小写
words = line.split(' ') #用' '分割出每个单词
for word in words:
words_cnt[word] = words_cnt.get(word,0) + 1 #返回指定key的值
words_lst = list(zip(words_cnt.values(),words_cnt.keys())) #字典转列表
words_lst.sort() #对列表排队
words_lst.reverse() #转置
for word in words_lst:
print(word[1],words_cnt[word[1]])
(7)dict的内部实现方式:
dict是通过hash表实现的,dict为一个数组,数组的索引键是通过hash函数处理后得到的,hash函数的 目的是使键值均匀的分布在数组中。
7.4 集合set
(1)格式:set() 或者{...,....,....} (注:空集合必须用set())
(2)可以求差集(-),交集(&),并集(|)
(3)集合内的元素是无序的
7.5 四种数据类型比较
列表list | 有序 | 不唯一 | 可更新 | 只有值 |
---|---|---|---|---|
元组tuple | 有序 | 不唯一 | 不可更新 | 只有值 |
字典dict | 无序 | 唯一 | 可更新 | 关键字和值 |
集合set | 无序 | 唯一 | 可更新 | 只有关键字 |
八、时间和日期处理
- time模块
time.time #时间戳:从1970年1月1日0:0:0起到现在总共经过的秒数
time.localtime() #当地时间 是个结构体
time.strftime() #格式化时间,便于输出 逆过程为strptime()
- datetime
date类型 #from datetime import date year,month,day,today
time类型 #from datetime import time hour,minute,second,microsecond
datetime类型 #from datetime import datetime date+time
timedelta类型 #时间段或者时间差
- calendar (日历相关)
calendar.weekday() #一个日期是星期几
calendar.isleap() #判断闰年
九、python的文件操作
文件系统:使用目录结构组织文件数据的系统
(1)文件读取
f = open(r'D:\pythonlearning\test.py','r') #参数1:文件路径 参数2:只读模式
with open(r'D:\pythonlearning\test.py','r') as f #另一种文件读取方法,无需close
f.read() #读取整个文件,字符为单位
f.readlines() #读取文件内容(以行为单位),并返回一个列表 (每行以\n结尾)
f.readline() #只读取并返回一行,反复调用可以返回下一行,整个文件读完继续调用怎返回空字符
f.close() #关闭文件对象
f.tell() #查看文件指针位置
(2)文件写
write() 只写入缓存区,若要存取到磁盘需用flush()函数
open():
在‘r’模式下,若文件不存在则报错;
在‘w’模式下,若文件不存在,则会新建一个文件;
但是两种模式都无法解决目录不存在问题(用os.makedirs(r'新建目录路径')解决)
十、数据表示格式json
json(JavaScript Object Notation)是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。是半结构化数据。
json.dumps() #json转换成python 编码 便于将数据文本形式存储
json..loads() #将数据解码
对应关系:
十一、异常处理
- SyntaxError语法错误
- 异常:ZeroDivisionError NameError TypeError
注意防御性编程
(1)异常捕获处理
try: #try:监视语句是否发生异常
guess = int(input('输入一个整数:'))
except ValueError: #若发生异常执行命令
print('输入有误,请重新输入')
else: #没有异常是执行代码
print('输入正常')
finally: #不管有没有异常都执行的代码
print('.....')