Python自学笔记
从9.1~9.8 学习python基本语法
学习链接: Python语言程序设计(北理)
基本语法元素
#温度转换
Tempstr =input(":")
if Tempstr[-1] in ['F', 'f']: #判断最后一个字符是否为华氏度标志
C = (eval(Tempstr[0:-1]) - 32)/1.8
print("转换后的温度是{:.2f}C".format(C)) #格式化输出温度
elif Tempstr[-1]in ['c', 'c']:
F = 1.8*eval(Tempstr[0:-1]) + 32
print("转换后的温度是{:.2f}F".format(F))
else:
print("输入格式错误")
bug:
IndentationError:expected an indented block
明此处需要缩进,你只要在出现错误的那一行,按空格或Tab(但不能混用)键缩进就行。一句话 有冒号的下一行往往要缩进,该缩进就缩进
注释
单行注释以#开头,多行注释以"""开头和结尾
缩进
缩进表达程序的格式框架
- 严格明确缩进是语法的一部分,缩进不正确程序运行错误
- 所属关系表达代码间包含和层次关系的唯一手段
- 长度一致程序内一致即可,一般用4个空格或1个TAB
字符串的使用
使用[ ]获取字符串中一个或多个字符
-索引∶返回字符串中单个字符<字符串>[M]
“请输入带有符号的温度值:”[0]或者TempStr[-1]
-切片:返回字符串中一段字符子串<字符串>[M:N]
“请输入带有符号的温度值:”[1:3]或者TempStr[0:-1]
包括起点不含终点
python切片详解
字符串逆序 “字符串”[: : -1]
列表类型
由0个或多个数据组成的有序序列
-列表使用[]表示,采用逗号分隔各元素
[ ‘F’,‘f’]表示两个元素’F’和’f’
-使用保留字in判断一个元素是否在列表中
TempStr[-1] in [‘C’, ‘c’] 判断前者是否与列表中某个元素相同
也就是TempStr[-1] 是不是‘C’或‘c’
输入函数input()
<变量> = input(<提示信息字符串>) 用户输入的信息以字符串类型保存在<变量>中
输出函数print()
-print()函数的格式化:
print(*objects, sep=' ', end='\n', file=sys.stdout)
参数的具体含义如下:
objects --表示输出的对象。输出多个对象时,需要用 , (逗号)分隔。
sep – 用来间隔多个对象。
end – 用来设定以什么结尾。默认值是换行符 \n,我们可以换成其他字符。
file – 要写入的文件对象。
如print(“转换后的温度是{:.2f}C”.format©)
{}表示槽,后续变量填充到槽中,注意分隔符是“ . ”
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pKVWKWEa-1603536749174)(D:\QQdoc\Markdown\20170910165845679.png)]
print(“Hello:”,i) 输出默认在字符串之间+空格
评估函数-eval()
去掉参数最外侧引号并执行余下语句的函数,能将任何字符串形式信息变成python语句
基本图形绘制
#PythonDraw.py
import turtle #引用turtle库
turtle.setup(650, 350, 200, 200)
turtle.penup()
turtle.fd(-250) #后退
turtle.pendown()
turtle.pensize(25)
turtle.pencolor("purple")
turtle.seth(-40) #设定角度为-40°
for i in range(4): #循环4次绘制关节
turtle.circle(40, 80)
turtle.circle(-40, 80)
turtle.circle(40, 80/2)
turtle.fd(40) #前进
turtle.circle(16, 180)
turtle.fd(40 * 2/3)
turtle.done() #手动退出图形界面
库引用
| import<库名> | from<库名> import * | import<库名>as<库别名> |
|---|---|---|
| <库名>.<函数名>(<函数参数>) | <函数名>(<函数参数>) | <库别名>.<函数名>(<函数参数>) |
| 不会重名 | 可能重名 | 不会重名且代码量少 |
界面
turtle. setup(width,height,startx,starty)
前两个参数是窗体的长宽,后两个参数是左上角在屏幕的坐标,缺省时在中央
循环语句
for<变量>in range(<参数>)
<被循环执行的语句>
基本数据类型
浮点类型
浮点数间运算存在不确定尾数使用,用round()函数辅助
round(x,d):对x四舍五入,d是小数截取位数
科学计数法
4.3e-3 :0.0043 9.6E5 :960000.0
复数类型
z= 1.23e-4 + 5.6e+89 j
z.real获得实部 z.imag获得虚部
数值运算
x/y 是自然的商 如: 10/3等于 3.333333…
x//y 是整数除法 如: 10//3等于3
| 操作符 | 描述 |
|---|---|
| -x | x的负值 |
| x % y | 余数,模运算 10%3 结果是1 |
| x ** y | 幂运算 x的y次方 y为小数是为开方 |
| 函数 | 描述 |
|---|---|
| divmod(x,y) | 商余,(x//y,x%y),同时输出商和余数 divmod(10,3)结果为(3,1) |
| pow(x, y, [,z]) | 幂余,(x**y)%z,[…]表示参数z可省略 pow(3, pow(3,99),10000)结果为4587 |
| max(x1,x2,…) | 返回参数最大值 |
| int(x) | 去尾变整数,支持字符串 |
GRIT (坚毅): perseverance and passion for long-term goals
字符串
| 操作符及使用 | 描述 |
|---|---|
| x +y | 连接两个字符串x和y |
| n*x 或 x *n | 复制n次字符串x |
| x in s | 如果x是s的子串,返回True,否则返回False |
str(x) 增加引号成为字符串
eval(x) 去掉引号
len(x) 返回字符串长度
| 方法 | 描述 |
|---|---|
| str.lower()或str.upper() | 返回字符串的副本,全部字符小写/大写 “AbCdEfGh”.lower()结果为"abcdefgh" |
| str.split(sep=None) | 返回一个列表,由str根据sep被分隔的部分组成 “A,B,C”.split(",")结果为[‘A’,‘B’ ,‘C’] |
| str.count(sub) | 返回子串sub在str中出现的次数 “an apple a day”.count(“a”)结果为4 |
| str.replace(old, new) | 返回字符串str副本,所有old子串被替换为new python".replace(“n”,“n123.io”)结果为 “python123.io” |
| str.center(width[,fillchar]) | “字符串str根据宽度width居中,fillchar可选 “python”.center(20,”=")结果为 ‘=python=’ |
| str.strip(chars) | 从str中去掉在其左侧和右侧chars中列出的字符 “= python= “.strip(” =np”)结果为 “ytho” |
| str.join(iter) | 在iter变量除最后元素外每个元素后增加一个str ", ".join(“12345”)结果为 "1,2,3,4,5”#主要用于字符串分隔等 |
format()方法的格式控制
槽内部对格式化的配置方式
{<参数序号> :<格式控制标记>}
| : | <填充> | <对齐> | <宽度> | < , > | <.精度> | <类型> |
|---|---|---|---|---|---|---|
| 引导符号 | 填充单个字符 | <左对齐 <右对齐 ^居中对齐 | 输出宽度 | 千位分隔符 | 小数精度or 最大数去长度 | 整数浮点数 |
time库
time.ctime() 返回当前时间,字符串
rime.gmtime() 获取当前时间,表示为计算机可处理的时间格式
perf_conter() 返回一个CPU级别的精确时间计数值,单位为秒,由于这个计数值起点不确定,连续调用差值才有意义
-刷新的本质是:用后打印的字符覆盖之前的字符 print()默认换行
#文本进度条 实例完整效果
import time
scale = 50
print("执行开始".center(scale//2, "-"))
start = time.perf_counter()
for i in range(scale+1):
a = '*' * i
b = '.' * (scale - i)
c = (i/scale)*100
dur = time.perf_counter() - start
print("\r{:^3.0f}%[{}->{}]{:.2f}s".format(c,a,b,dur),end='')
time.sleep(0.1)
print("\n"+"执行结束".center(scale//2,'-'))
分支循环结构
紧凑二分支 <表达式1> if<条件>else<表达式2>
guess = eval(input())
print("猜{}了".format("对"if guess==99 else"错"))
条件组合
and:与 or:或 not:非 (not x)
异常处理
try:
<1>
except: <异常类型>
<2>#<1>异常
else:
<3>#<1>不异常
finally:
<4>#一定执行
#计算IBM
#注意多个参数的输入和赋值
height, weight = eval(input("请输入身高(米)和体重\(公斤)[逗号隔开]: "))
bmi = weight / pow(height, 2)
print("BMI 数值为:{:.2f}".format(bmi))
nat = ""
if bmi < 18.5:
nat = "偏瘦"
elif 18.5 <= bmi < 24:
nat = "正常"
elif 24 <= bmi < 28:
nat = "偏胖"
else:
nat = "肥胖"
print("BMI 指标为:国内'{0}'".format(nat))
遍历循环
for <循环变量>in <遍历结构>:
<语句块>
else:
<语句块>(正常退出时执行)
随机数
seed() 初始化给定的随机数种子,默认为当前系统时间 可以使得程序复现
random() 生成0~1之间的产生
randint(a, b) 生成[a, b]之间的随机整数
用 \ 可以换行书写
函数
def <函数名>(<参数(0个或多个)>):
<函数体>
return<返回值>
def<函数名>(<非可选参数>,<可选参数>): (可选参数可以给默认值)
传参:
def fact(n,m=1):
s = 1
for i in range(1,n+1):
s *= i
return s//m, n , m #多个返回值
#输出
>>>fact(10,5)
(725760,10,5)#元组类型
>>> a,b,c = fact(10,5)
>>>print(a,b,c)
725760 10 5
位置传递 fact(10,5)
名称传递 fact(m=5, n=10)
函数可以返回多个值
global 声明全局变量
lambua() 函数是─种匿名函数,即没有名字的函数,返回函数名作为结果,用于定义简单的、能够在一行内表示的函数
<函数名>= lambda<参数>:<表达式>
递归调用:
函数+分支结构
递归链条
递归基例
PyInstaller库概述
将.py源代码转换成无需源代码的可执行文件
简单的使用:
(cmd命令行)pyinstaller -F <文件名.py>
如: pyinstaller -i curve.ico -F SevenDigitsDrawV2.py
在dist下生成exe文件
| PyInstaller库参数 | 功能 |
|---|---|
| -F, --onefile | 在dist文件夹中只生成独立的打包文件 |
| -i<图标文件名.ico> | 指定打包程序使用的图标(icon)文件 |
组合数据类型
集合:
集合是多个不同元素的无序组合,不可更改
用大括号表示,元素间用逗号分隔,建立集合类型用{}或 set()(建立空集合类型)
| 操作符及应用 | 描述 |
|---|---|
| S|T | 返回一个新集合,包括在集合S和T中的所有元素 |
| S-T | 返回一个新集合,包括在集合S但不在T中的元素 |
| S&T | 返回一个新集合,包括同时在集合S和T中的元素 |
| S^T | 返回一个新集合,包括集合S和T中的非相同元素 |
| S<=T或S<T | 返回True/False,判断S和T的子集关系 |
| S =| T | 更新集合S,包括在集合S和T中的所有元素 |
数据去重:集合类型所有元素无重复
#列表数据去重
>>>ls = ["p","p","y", "y", 123]
>>>s = set(ls) #利用了集合无重复元素的特点
{f'p', 'y',123}
>>>lt = list(s) #将集合转换为列表
[ 'p','y',123]
序列:
序列是具有先后关系的一组元素,是一维元素向量,元素类型可以不同
类似数学元素序列:Se,S1,…,Sn-1,元素间由序号引导,通过下标访问序列的特定元素
| 函数和方法 | 描述 |
|---|---|
| s[i] | 索引 |
| len(s) | 返回序列s的长度 |
| min(s) | 返回序列s的最小元素,s中元素需要可比较 |
| max(s) | 返回序列s的最大元素,s中元素需要可比较 |
| s.index(x)或s.index(x,i, j) | 返回序列s从i开始到j位置中第一次出现元素x的位置 |
| s.count(x) | 返回序列s中出现x的总次数 |
方括号 [] 或者list() 真正创建一个列表,赋值仅传递引用
ls[i] = x 替换列表ls中的第i个元素为x
del ls[i] 删除列表ls中的第i个元素x
.index(x) 返回x的索引
字典类型:
字典类型是"映射"的体现,键值对:键是数据索引的扩展
字典是键值对的集合,键值对之间无序,采用大括 {} f和dict()创建,键值对用冒号:表示
{<键1>:<值1>,<键2>:<值2>,…,<键n>:<值n>}
空的 {} 用于生成空字典类型,空集合类型只能使用set()
| 函数或方法 | 描述 |
|---|---|
| d.get(k,)print | 键k存在,则返回相应值,不在则返回值 |
| d.pop(k,) | 键k存在,则取出相应值,不在则返回值 |
| d.popitem() | 随机从字典d中取出一个键值对,以元组形式返回 |
| d.clear() | 删除所有的键值对 |
jieba库
>>>jieba.lcut("中国是一个伟大的国家")
['中国','是','一个','伟大','的','国家']
文件和数据
文件
| 文件的打开模式 | 描述 |
|---|---|
| ‘r’ | 只读模式,默认值,如果文件不存在,返回FileNotFoundError |
| ‘w’ | 覆盖写模式,文件不存在则创建,存在则完全覆盖 |
| ‘x’ | 创建写模式,文件不存在则创建,存在则返回FileExistsError |
| ‘a’ | 追加写模式,文件不存在则创建,存在则在文件最后追加内容 |
| ‘b’ | 二进制文件模式 |
| ‘t’ | 文本文件模式,默认值 |
| ‘+’ | r/w/x/a一同使用,在原功能基础上增加同时读写功能 |
内嵌函数map():
将第一个参数的功能作用于第二个参数的每个元素
数据
列表:有序数据 集合:无序数据
#从特殊符号分隔的文件中读入数据 中国$美国$日本$德国$法国$英国$意大利
txt = open(fname).read()
ls =txt.split("$")
f.close()
#采用特殊分隔方式将数据写入文件
ls - ['中国",‘美国",'日本']
f = open(fname,'w')
f.write('$'.join(ls)) #在列表ls中每个元素之间插入$作为分隔
f.close()
程序设计方法
自顶向下:总问题-> 若干小问题 分而治之
自底向下:逐步组建复杂系统 模块化集成
计算机思维:模拟过程,计算机进行大量运算
模块化设计:
-引擎+配置:程序执行和配置分离,将可选参数配置化
-将程序开发变成配置文件编写,扩展功能而不修改程序
-关键在于接口设计,清晰明了、灵活可扩展
后记
编程不重要,思想才重要!
-认识自己∶明确自己的目标,有自己的思想(想法)
-方式方法:编程只是手段,熟练之,未雨绸缪为思想服务
中国
美
国
美国
美国日本
德
国
德国
德国法国
英
国
英国
英国意大利
txt = open(fname).read()
ls =txt.split("KaTeX parse error: Expected 'EOF', got '#' at position 14: ") f.close() #̲采用特殊分隔方式将数据写入文件…’.join(ls)) #在列表ls中每个元素之间插入$作为分隔
f.close()
### 程序设计方法
自顶向下:总问题-> 若干小问题 分而治之
自底向下:逐步组建复杂系统 模块化集成
计算机思维:模拟过程,计算机进行大量运算
模块化设计:
-引擎+配置:程序执行和配置分离,将可选参数配置化
-将程序开发变成配置文件编写,扩展功能而不修改程序
-关键在于接口设计,清晰明了、灵活可扩展
### 后记
编程不重要,思想才重要!
-认识自己∶明确自己的目标,有自己的思想(想法)
-方式方法:编程只是手段,熟练之,未雨绸缪为思想服务
-为谁编程:将自身发展与祖国发展相结合,创造真正价值
这篇博客是作者的Python自学笔记,涵盖了基本语法元素,如缩进和注释,以及基本图形绘制。文章详细讲解了字符串的使用、列表类型的操作,如切片和元素判断,并介绍了输入输出函数input()和print()。此外,还涉及到基本数据类型,如浮点数、复数和字符串,以及分支循环结构和函数的使用。博客内容还提到了Python的Turtle库和文件操作,强调了编程中的思想和方法的重要性。
4782

被折叠的 条评论
为什么被折叠?



