Python基础
-
声明: 以下代码示例为博主备考计算机二级Python时敲写的笔记
-
下面为博主当时备考时所学习的一些B站教学课程
1.猜数游戏
# 猜数游戏
import random
target = random.randint(1,100) # 生成随机整数
count = 0 # 猜的次数
while True:
try:
guess = eval(input('请输入你猜的数1-100:'))
except:
print('您输入的有误,请重新输入') # 异常处理
continue
count += 1 # 次数加一
if guess>target:
print('猜大了')
elif guess<target:
print('猜小了')
else:
print('猜对了')
break
print('共猜了',count,'次')
2.基础内容
# 续行符“\”,续行符之后不允许再存在空格,即续行符后直接换行
print("{}的首都是{}".format("中国",\
"北京"))
# 显示:中国的首都是北京
# 同步赋值语句
x = 2
a,b = 2+x,4*x
# 交换a与b的值
a,b = b,a
# Pyhon的画图与第三方库的导入(import turtle)
import turtle
turtle.fd(-200) # fd()是turtle库中的函数
turtle.right(90) # right()是turtle库中的函数,right为角度
turtle.circle(200) # circle()是turtle库中的函数,circle为画圆
# 条件循环的语法结构
# 输出10到100步长为3的全部整数
n = 10
while n < 100:
print(n,end=" ") # 其中end=" "为打印不换行
n = n + 3
# input()函数
a = input("请输入:") # 输出为字符串形式
# eval()函数
a = eval('1.2') # eval()函数将去掉字符串最外层的引号
print(a,type(a)) # 显示:1.2 <class 'float'>,type()为显示变量类型
# eval()函数与input()函数的组合使用
value = eval(input('请输入一个整数:'))
# print()函数
# 可以用于混合输出字符串与变量的值,其中输出字符串模板中使用{}表示一个槽位
# 每一个槽位对应于.format()中的一个变量
a,b = 10,20
print('整数{}和整数{}的差是{}'.format(a,b,a-b)) # 显示:整数10和整数20的差是-10
# 不换行参数end
a = 10
print(a,end=' ')
print(a) # 受上一次打印中的end=' '影响,下一次打印则不会换行(且中间含空格)
# 四舍五入运算函数round()
0.1+0.2 # 显示:0.30000000000000004,这是计算机内部的二进制误差导致的
round(0.1+0.2,3) # 显示0.3,其中的3表示保留3位小数
# 计算多少次方的函数pow()
pow(110,12) # 计算110(整数类型)的12次方,显示:3138428376721000000000000
pow(110.0,12) # 计算110.0(浮点数类型)的12次方,显示:3.138428376721e+24
# 增强赋值操作符
x = 9
x += 3 # 相当于x = x + 3,+=之间不能有空格
x # 显示x的值为:12
# 转义字符
print('这是一个单\'行字\'符串') # 显示:这是一个单'行字'符串
print('谁表示换行?\n嘿嘿嘿') # 显示:谁表示换行?
# 嘿嘿嘿
# 字符串的索引
print('撒旦会撒谎'[3]) # 显示:撒
# 字符串的切片
print('爽哒哒安委会打瓦的'[1:5]) # 显示:哒哒安委
# 格式化字符串
# 字符串格式化指的是用于解决字符串和变量同时输出时的格式安排问题
'{}说:撒大叔打我打速度撒大事'.format('撒旦')
# 显示:'撒旦说:撒大叔打我打速度撒大事'
'{0}说:撒大叔打我打速度撒大事{1}'.format('撒旦','大师')
# 显示:'撒旦说:撒大叔打我打速度撒大事大师'、
'{1}说:撒大叔打我打速度撒大事{0}'.format('撒旦','大师')
# 显示:'大师说:撒大叔打我打速度撒大事撒旦'
'{0:12}'.format('撒大苏打大师') # 显示:'撒大苏打大师 '
'{0:^12}'.format('撒大苏打大师') # 显示:' 撒大苏打大师 ',其中^为对中符号
'{0:*^12}'.format('撒大苏打大师') # 显示:'***撒大苏打大师***',其中*为填充字符
'{0:-^20,}'.format(123456789) # 显示:'----123,456,789-----',20后的“逗号”表示千位分隔符
'{0:.2f}'.format(123.456789) # 显示:'123.46',其中.2f表示显示两位小数
'{0:.3}'.format('飒飒打我') # 显示:'飒飒打',其中.3表示保留前三个输出长度
'春花秋月'*3 # 显示:'春花秋月春花秋月春花秋月',复制3次
3.函数定义
# 函数的定义
# 计算n的阶乘
def HJX(n):
s = 1 # 存储乘积
for i in range(1,n+1):
s*=i
return s
# 调用整数阶乘的函数
print(HJX(4)) # 计算4的阶乘
print(HJX(5)) # 计算5的阶乘
# 参数的赋值
def f(x,y):
ans = x*y
return ans
print(f(2,10))
# 函数的多个返回值
def f(x,y):
return x*y,x+y
ans1,ans2 = f(10,2)
print(ans1)
print(ans2)
# 函数的多种返回值
def f(x):
try:
if x>0:
return x+1
else:
return x-1
except:
return 0 # 异常情况
ans = f(2)
print(ans)
# 全局变量
# 全局变量是指在函数之外定义的变量,在程序执行全过程有效
# 全局变量在函数内部使用时,需要提前使用保留字global声明
n=2
def f(x,y):
global n # 声明全局变量
ans = x*y*n
return ans
print(f(10,2))
# 斐波那契数列
# 输入数列的位数n,来返回对应位数的值
def fib(n):
if n==1 or n==2:
return 1
else:
return fib(n-1)+fib(n-2) # 递归:自己调用自己
n=eval(input('请输入数字:'))
print(fib(n))
4.数据类型
# 集合类型
s={5,3.14} # 输出set类型
s.add(10) # 添加元素到s集合
s.remove(10) # 移除s中的元素
s.clear() # 移除s中的所有元素
len(s) # 返回集合s中元素的个数
# 元组类型
# 元组类型一旦定义就不能修改,所有操作都可以由列表类型实现
t = (11,22,33,44,55)
11 in t # 返回True
11 not in t # 返回False
t2 = (55,66,77)
t3 = t + t2
print(t3) # 返回(11, 22, 33, 44, 55, 55, 66, 77)
t[0] # 索引t中的元素,显示11
t3[1:5] # 切片,显示:(22, 33, 44, 55)
t3[1:5:2] # 切片,2表示步长为2,显示(22, 44)
t4 = t*3 # 显示:(11, 22, 33, 44, 55, 11, 22, 33, 44, 55, 11, 22, 33, 44, 55)
t3.index(55) # 索引t3元祖中元素为55出现的第一个位置,显示:4
t3.count(55) # 显示t3元祖中元素为55出现的个数,显示:2
# 遍历元组中的元素
for i in t:
print(i,end=' ') # 显示:11 22 33 44 55
# 定义函数中的元组输出返回
def f(x):
ans=x,x+1,x+2
return ans
print(f(1)) # 显示:(1,2,3)
# 列表类型
lst = [1000,'1000',[100,110]] # 自定义列表
print(lst)
# 内置函数list,自动转成列表类型
list('我喜欢python') # 显示:['我', '喜', '欢', 'p', 'y', 't', 'h', 'o', 'n']
lst2 = ['hello','world']
print(lst+lst2) # 显示:[1000, '1000', [100, 110], 'hello', 'world']
print(lst*2) # 显示:[1000, '1000', [100, 110], 1000, '1000', [100, 110]]
# 列表的索引
lst = [1111,'1100',[12,56]]
lst[0] # 显示:1111
# 遍历列表中的元素
for i in lst:
print(i,end=' ') # 显示:1111 1100 [12, 56]
# 或者采用索引遍历列表中的元素
for h in range(len(lst)):
print(lst[h],end=' ') # 显示:1111 1100 [12, 56]
# 列表的切片
lst = [1000,1100,1200,1400,1500]
print(lst[1:4]) # 显示:[1100, 1200, 1400]
print(lst[-4:-1]) # 显示:[1100, 1200, 1400]
print(lst[1:4:2]) # 其中2表示步长为2,显示:[1100, 1400]
# 将列表中的元素逆序输出
print(lst[::-1]) # 显示:[1500, 1400, 1200, 1100, 1000]
# 在列表中添加元素
lst.append(1600)
print(lst) # 显示:[1000, 1100, 1200, 1400, 1500, 1600]
# 在列表的指定位置中插入元素
lst.insert(1,1050)
print(lst) # 显示:[1000, 1050, 1100, 1200, 1400, 1500, 1600]
# 将列表中的元素进行反转
lst.reverse()
print(lst) # 显示:[1600, 1500, 1400, 1200, 1100, 1050, 1000]
# 生成一个新列表,并复制旧列表
lst = [1,2,3,4,5]
lst2 = lst.copy()
print(lst2) # 显示:[1, 2, 3, 4, 5]
# 清除列表中的所有元素
lst.clear()
print(lst) # 显示:[]
# 列表中的保留字del
# 作用是删除列表中的索引位置元素
lst = [11,22,33,44,55,66]
del lst[1]
print(lst) # 显示:[11, 33, 44, 55, 66]
# 删除列表中的片段(类似于切片操作)
lst = [11,22,33,44,55,66]
del lst[1:4]
print(lst) # 显示:[11, 55, 66]
# 字典类型
# python中的字典使用大括号{}建立,每个元素是一个键值对
# 其中:键和值通过冒号连接,不同键值对通过逗号隔开
# 字典类型中的键是无序的,键相同时会覆盖值
# 不可变类型(如:int.,str,元组)可以作为字典中的键
# 而可变类型(如:list列表)不可作为字典中的键
d={202001:'张三',202002:'李四',202003:'王五'}
print(d) # 显示:{202001: '张三', 202002: '李四', 202003: '王五'}
d={'name':'张三','age':20,'gender':'男'}
print(d) # 显示:{'name': '张三', 'age': 20, 'gender': '男'}
d={'name':'张三','age':20,'gender':'男','name':'李四'}
print(d) # 显示:{'name': '李四', 'age': 20, 'gender': '男'}
# 字典的索引
d={202001:'张三',202002:'李四',202003:'王五'}
name=d[202001]
print(name) # 显示:张三
# 字典的修改
d[202003]='王小五'
print(d) # 显示:{202001: '张三', 202002: '李四', 202003: '王小五'}
d={} # 建立空字典
d['name']='张三'
print(d) # 显示:{'name': '张三'}
# 内置函数dict(),用于生成一个空字典
d=dict() # 显示:{}
# 字典类型的操作
d={202001:'张三',202002:'李四',202003:'王五'}
s=d.keys() # 返回所有的键信息
print(s) # 显示:dict_keys([202001, 202002, 202003])
print(list(s)) # 转换成列表,显示:[202001, 202002, 202003]
v=d.values()# 返回字典中的所有值信息
print(v) # 显示:dict_values(['张三', '李四', '王五'])
i=d.items() # 获取所有的键值对
print(i) # 显示:dict_items([(202001, '张三'), (202002, '李四'), (202003, '王五')])
g=d.get(202001) # 根据键信息查找并返回值信息
print(g) # 显示:张三
p=d.pop(202001) # 根据键信息查找并取出值信息再删除,如果key存在则返回相应值,否则返回默认值
# pop是默认删除最后一个元素,我们可以指定查找再删除
print(d) # 显示:{202002: '李四', 202003: '王五'}
popitem=d.popitem() # 随机取出键值对,以元组形式返回,取出后从字典中删除这个键值对
print(popitem)
# 将一个字典的内容添加到另一个字典
d={202001:'张三',202002:'李四',202003:'王五'}
d2={202003:'撒旦',202004:'复读生'}
d.update(d2) # 将d2字典中的内容添加到d字典中
print(d) # 显示:{202001: '张三', 202002: '李四', 202003: '撒旦', 202004: '复读生'}
d.clear() # 清除字典中的所有元素
print(d) # 显示:{}
# 如果希望删除字典中的某一个元素,也可以使用保留字del
d={202001:'张三',202002:'李四',202003:'王五'}
del d[202001]
print(d) # 显示:{202002: '李四', 202003: '王五'}
# 字典元素的遍历
for i in d:
print(i,'-->',d.get(i)) # 显示:202002 --> 李四
# 202003 --> 王五
5.凯撒密码
# 凯撒密码
# 英文版
# 方案一
# 加密
ptxt=input('请输入明文文本:')
for p in ptxt:
if 'a'<=p<='z':
print(chr(ord('a')+(ord(p)-ord('a')+3)%26),end='')
elif 'A'<=p<='Z':
print(chr(ord('A')+(ord(p)-ord('A')+3)%26),end='')
else:
print(p,end='')
# 解密
ptxt=input('请输入密文文本:')
for p in ptxt:
if 'a'<=p<='z':
print(chr(ord('a')+(ord(p)-ord('a')-3)%26),end='')
elif 'A'<=p<='Z':
print(chr(ord('A')+(ord(p)-ord('A')-3)%26),end='')
else:
print(p,end='')
# 方案二
s1='bag'
s2='ont'
d={}
for c in (65,97):
for i in range(26): # 0到25之间
d[chr(i+c)]=chr((i+13)%26+c)
print(''.join(d.get(c,c) for c in s1)) # 编码
print(''.join(d.get(c,c) for c in s2)) # 解码
# 中文版
# 加密
ptxt=input('请输入明文文本:')
for p in ptxt:
if 'a'<=p<='z':
print(chr(ord('a')+(ord(p)-ord('a')+3)%26),end='')
elif 'A'<=p<='Z':
print(chr(ord('A')+(ord(p)-ord('A')+3)%26),end='')
elif 0x4E00<=ord(p)<=0x9FA5:
print(chr(ord(p)+3),end='')
else:
print(p,end='')
6.文件使用
# 文件使用
path='E:/Python文件夹/计算机二级/' # 注意路径地址中的“\”要改为“/”
# 地址最后还需再添加一个“/”
f=open(path+'a.txt','rt') # t表示文本文件方式打开
# f=open('a.txt','rb')
# 若将t改为b,则是用二进制方式打开
print(f.readline())
f.close()
# 遍历循环逐行遍历文件
path='E:/Python文件夹/计算机二级/' # 注意路径地址中的“\”要改为“/”
# 地址最后还需再添加一个“/”
f=open(path+'a.txt','rt') # t表示文本文件方式打开
# f=open('a.txt','rb')
# 若将t改为b,则是用二进制方式打开
for line in f:
print(line)
f.close()
# 文件的写入
path='E:/Python文件夹/计算机二级/'
f=open(path+'b.txt','w')
f.write('新年都未有芳华,\n')
f.write('二月出新见草芽。\n')
f.close()
# 文件的写入(另一种方法)
lst=['新年都未有芳华,','二月出新见草芽。']
path='E:/Python文件夹/计算机二级/'
f=open(path+'b.txt','w')
f.writelines(lst)
f.close()
# 一维数据的处理
lst=['北京','上海','天津','重庆']
f=open('city.csv','w') # 文件格式为csv格式,csv是二维数据
f.write(','.join(lst)+'\n')
f.close()
# 一维数据读取
f=open('city.csv','r')
content=f.read()
print(content,type(content)) # type(content)查看类型
# 显示:北京,上海,天津,重庆
# <class 'str'>
f.seek(0) # 移动读取指针位置,将读取指针移动到文件开头
lst=f.read().strip('\n').split(',') # 输出列表类型
print(lst,type(lst))
# 显示: ['北京', '上海', '天津', '重庆'] <class 'list'>
f.close()
# 二维数据的处理
lst=[
['指标','2014年','2015年','2016年'],
['居民消费价格指数','102','101.4','102'],
['食品','103.1','102.3','104.6']
]
f=open('example.csv','w')
for i in lst:
f.write(','.join(i)+'\n')
f.close()
# 二维数据的读取
f=open('example.csv','r')
print(f.read())
f.close()
7.turtle库
# turtle库与基本绘图
# 窗体函数
turtle.setup(500,500,500,500)
# 填充案例
# 其中turtle.filling()的作用是返回当前图形背景颜色的填充状态
# 如果当前代码在begin_fill()与end_fill()之间,则返回True,否则返回Flase
import turtle
turtle.color('red','blue')
turtle.screensize(600,400,'white') # 设置画布窗口宽度、高度及背景颜色
print(turtle.screensize())
turtle.begin_fill()
print(turtle.filling())
turtle.circle(50)
turtle.end_fill()
print(turtle.filling())
# 清空当前窗口
turtle.clear() # 清空图形,但不改变其位置和角度
turtle.reset() # 海龟对象绘图位置和角度归为原点
# 隐藏画笔的turtle形状
turtle.hideturtle()
# 显示画笔的turtle形状
turtle.showturtle()
# 如果turtle画笔的形状显示,则返回True,否则返回Flase
turtle.isvisible()
# turtle.write(str,font=None)
# 设置字体的font形式,将字符串str显示在画布上
# 参数:str是输出字符串,font是设置字体名称、尺寸及类型3个元素构成的元组
turtle.write('Hello world',font=('Arial',50,'normal'))
# 绘制三角形
import turtle as t
t.penup() # 抬笔
t.goto(-200,-50) # 目标位置
t.pendown() # 落笔
t.begin_fill()
t.color('red')
t.circle(40,steps=3) # steps=3表示3个边
t.end_fill()
# 绘制四边形
t.penup()
t.goto(-100,-50)
t.pendown()
t.begin_fill()
t.color('blue')
t.circle(40,steps=4)
t.end_fill()
# 绘制五边形
t.penup()
t.goto(0,-50)
t.pendown()
t.begin_fill()
t.color('green')
t.circle(40,steps=5)
t.end_fill()
# 绘制六边形
t.penup()
t.goto(100,-50)
t.pendown()
t.begin_fill()
t.color('yellow')
t.circle(40,steps=6)
t.end_fill()
# 绘制圆形
t.penup()
t.goto(200,-50)
t.pendown()
t.begin_fill()
t.color('purple')
t.circle(40)
t.end_fill()
t.hideturtle() # 隐藏画笔的turtle形状
8.time库
# time库
import time as t
print(t.time()) # 获取当前的时间戳
print(t.gmtime(1000)) # 获取当前时间戳对应的struct_time对象
print(t.localtime()) # 获取当前时间戳对应的本地时间的struct_time对象
print(t.ctime()) # 获取当前时间戳对应的易读字符串表示
# 内部会调用time.localtime()函数以输出当地时间
# 使用time.mktime(t)将struct_time对象t转换为时间戳,注意t代表当地时间
print(t.mktime(t.localtime()))
s=t.strftime('%Y-%m-%d %H:%M:%S',t.localtime()) # 时间格式化
print(s) # 补充:t.strftime与t.strptime作用是相反的
9.random库
# random库
import random as r
print(r.random()) # 产生[0.0,1.0)之间的随机小数
r.seed(10) # 设置随机数种子,种子相同,每次运行的随机数也相同
print(r.randint(1,10)) # 生成1到10之间的随机整数
d=r.randrange(1,10,3) # 生成一个[1,10)之间以3为步数的随机整数
print(d)
print(r.uniform(10,100)) # 生成一个10到100之间的随机整数
c1=r.choice('python') # 从序列类型中随机返回一个元素
print(c1)
c2=r.choice([1,2,3,43,45]) # 从序列类型中随机返回一个元素
print(c2)
lst=[1,2,3,4,5,6]
r.shuffle(lst) # 随机打乱元素排列
print(lst)
ans=r.sample([1,2,3,4,5],3) # 随机返回列表中的3个元素
print(ans)
10.wordcloud库
# wordcloud库
from wordcloud import WordCloud # 导入类
txt='I like Python,I am learning Python'
wd=WordCloud().generate(txt)
wd.to_file('演示案列1.jpg')
# 可视化词云
# 注意font_path为所选字体的路径,需要完全给定
import jieba # 导入jieba库
from wordcloud import WordCloud # 导入类
txt='机械工程,控制工程,机械原理,机械设计,液压传动,流体力学,弹药概论,数学建模,工程力学,程序设计,机器学习,飞行力学,Python,导弹设计,电气PLC,电路分析'
words=jieba.lcut(txt)
newtxt=' '.join(words)
wordcloud=WordCloud(font_path='C:\Windows\Fonts\STKAITI.TTF',\
background_color='white').generate(newtxt)
wordcloud.to_file('词云案列1.png')