一句话总结:后面的可以调用前面的,里面的可以调用外面的,反之不行。
与一些常用编程语言不同的是,Python使用缩进来区分代码块,缩进方式常用空格,示例如下:
代码块1 #前面有0个空格
代码块1 #前面有0个空格
代码块2 #前面有2个空格
代码块2 #前面有2个空格
代码块3 #前面有4个空格
代码块3 #前面有4个空格
代码块1 #前面有0个空格
Python对于缩进是高度敏感的,多一个空格或少一个空格都会严重影响到代码执行,在编写代码的时候需要特别注意,推荐每一级使用2或4个空格。
代码块可以理解为包含关系,同一级代码块内的代码内容,后面的代码可以调用前面的代码数据,次级代码块可以调用上级代码块内的数据,而次级代码块中定义的新数据,除返回值外上级代码块是无法获取和使用的,举例如下:
a = 0
if True:
print(a) #输出0
b = 1
print(b) #出错,无法获取c的值
a = 0
def add(n): #定义函数add,对传入参数执行+1 *** 作
b = n + 1
return b #使用关键字return将值返回给调用函数
print(add(a)) #输出1,a作为参数传入函数add(n)中
2.Python代码结构
Python文件后缀名为.py
,为防止莫名其妙的错误文件名请使用英文(拼音)。
demo.py
展示了Python常用的代码结构
# demo.py
import math # 导入math数学运算库
def abs(x): # 定义函数,有一个参数x
return math.fabs(x) # 函数返回参数x的绝对值
a = -3 # 新建变量a,赋值为-3
b = abs(-3.14) # 新建变量b,值为函数abs(-3.14)的返回值,-3.14为传入参数
a = 3 # 修改变量a的值(重新赋值)
print("a=", a, "\nb=", b) # 打印数据,\n为换行符
代码结构从上往下依次为:要导入的第三方包库、自定义的函数、执行的代码。
使用import
关键字导入第三方包,第三方包的作用是已经提供了大量可以重复利用的函数和方法,减少编写代码的工作量。
使用def
关键字定义一个函数,代码中一些需要重复使用的代码段,可以定义成一个函数重复调用使用,起到精简代码的作用。
Python语言使用符号#
进行注释,注释符后的内容不会被解释器识别为代码,可以使用注释来对代码功能进行解释说明,方便记忆和后续代码编写。
代码会从上往下依次执行,不同的代码块之间请添加一个空行,方便阅读代码。
二、常用数据类型的使用 本文内变量名仅做示范使用,编写代码时变量命名应尽可能易于理解,例如总和可以命名为totalSum
或total_sum
,六月一日可以命名为june1
或june_1
。
数组又叫列表,数据是有序的,索引序号从0开始。
数组使用英文中括号[]
标记,每个数据之间用英文逗号,
隔开。
a = ['a', 'b', 1, 2]
print(a) # ['a', 'b', 1, 2]
print(a[3]) # 2
print(a[:2]) # ['a', 'b'] 等价为a[0:2],从索引为0的数据开始,到索引为2的数据结束(不包含索引为2的数据)
print(a[1:]) # ['b', 1, 2] 从索引为1的数据开始,到最后一个数据结束
print(a[1:-1]) # ['b', 1] 从索引为1的数据开始,到倒数第一个数据结束(不包含最后一个数据)
print(a[-2:]) # [1, 2] 从倒数第二个数据开始,到最后一个数据结束
数组可以直接修改其中的某个数据,方法如下:
a = ['a', 'b', 1, 2]
a[1] = 0
print(a) # ['a', 0, 1, 2]
使用append()
方法往数组中增加数据:
a = ['a', 1]
a.append('b')
print(a) # ['a', 1, 'b']
使用del
删除数组中增加数据:
a = ['a', 'b', 1, 2]
del a[2]
print(a) # ['a', 'b', 2]
二维数组/矩阵:
a = [
['a', 1],
['b', 2],
['c', 3]
]
print(a[0][1]) # 1
print(a[2][0]) # c
2.字符串
(1)转义
转义的作用是替代某些特殊字符,比如某些无法输入的字符或在特定语境下需要转义才能正常输入的字符。
Python使用单引号''
和双引号""
来标记字符或字符串,二者使用无区别,但有以下特殊使用情况:
a = "这是一个带\"双引号\"的句子"
b = '这还是一个带"双引号"的句子'
c = "这是一个带'单引号'的句子"
d = '这还是一个带\'单引号\'的句子'
从示例中可以看出,字符串中如果包含单双引号,可以在符号前使用\
符进行转义,也可以使用不同的引号来进行区分。
(2)字符/字符串常用运算符
字符串可以理解为字符类型的数组,故可以使用与数组相同的索引方法
'a'*2 # 'aa'
'a'+'b' # 'ab'
a = 'abcde'
print(a[2]) # 'c' 显示字符串中索引为2的字符
print(a[:3]) # 'abc' 等价为a[0:3],从字符串索引为0的字符开始,到字符串索引为3的字符结束(不包含索引为3的字符)
print(a[1:]) # 'bcde' 从字符串索引为1的字符开始,到字符串结束
print(a[1:-1]) # 'bcd' 从字符串索引为1的字符开始,到字符串倒数第一个字符结束(不包含最后一个字符)
print(a[-2:]) # 'de' 从字符串倒数第二个字符开始,到字符串结束
print('cd' in a) # True 判断字符/字符串是否在另一个字符串中
print('f' not in a) # True 判断字符/字符串是否不存在于另一个字符串中
(3)字符串中查找另一个字符/字符串
a = "123abc456"
print(a.find('abc')) # 输出3,find()会输出查找内容在字符串中首次出现的首字母索引位置
print(a.find('def')) # 输出-1,如果找不到要查找的内容,会输出-1
(4)字符串分割
第一种方式,使用[:]来自定义分割字符串
a = "123abc456"
b = a[:3] # b = '123'
c = a[3:6] # c = 'abc'
d = a[6:] # d = '456'
第二种方式,针对有固定规律的字符串,可以使用split()
方法来分割
a = "123;abc;456"
b = a.split(';')
print(b[:]) # ['123', 'abc', '456']
# b[0] = '123', b[1] = 'abc', b[2] = '456'
三、流程控制
1.常用运算符
符号 | 说明 | 示例 |
---|---|---|
+ - * / | 加 减 乘 除 | (1+2*3) 返回7 |
% | 取模,获得除法的余数 | (7%5) 返回2 |
** | 幂运算 | (2**3) 2的3次方,返回8 |
// | 整除,除法取整数商 | (3//2) 返回1 |
== | 比较是否相等 | (1==2) 返回False |
!= | 比较是否不相等 | (1!=2) 返回True |
> | 比较左边是否比右边大 | (1>2) 返回False |
< | 比较左边是否比右边小 | (1<2) 返回True |
>= | 比较左边是否大于等于右边 | (1>=2) 返回False |
<= | 比较左边是否小于等于右边 | (1<=2) 返回True |
and | 与运算 | (True and False) 返回Flase |
or | 或运算 | (True or False) 返回True |
not | 非运算 | (not False) 返回True |
Python使用if
进行条件判断,以下几种形式均可,根据实际需求进行代码的编写。
a = 0
if a != 0:
print("非0")
a = 0
if a != 0:
print("非0")
else:
print("0")
if a > 0:
print("大于0")
elif a < 0:
print("小于0")
else:
print("0")
3.for循环
for
主要用来遍历序列/数组,示例如下:
a = [0, 1, 2, 3]
for i in a:
print(i) # 依次输出0, 1, 2, 3
可以使用range()
函数来生成数列,len()
函数来获取数组的长度(数据数量)
for i in range(3): # range(x) 生成区间为[0,x)的自然数列
print(i) #输出0 1 2
for i in range(3, 7): # range(x, y) 生成区间为[x,y)的自然数列
print(i) #输出3 4 5 6
# 若x > y,则必须有z参数且z必须为负数,即生成递减数列
for i in range(-1, -10, -2): # range(x, y, z) 生成区间为[x,y)的自然数列,步长为y
print(i) #输出-1 -3 -5 -7 -9
a = [0, 1, 2, 3]
for i in range(len(a)): # a有4个元素,则len(a)=4,故range(len(a))变为range(4)
print(a[i]) # 依次输出0, 1, 2, 3
4.while循环
while
循环容易出现无限循环的问题,如果不想要无限循环一定要设置结束循环的机制:
a = 0
while a < 5:
print(a) # 依次输出0, 1, 2, 3, 4
a += 1 # 等价于a=a+1
while
循环也可以使用else
:
a = 0
while a < 5:
print(a) # 依次输出0, 1, 2, 3, 4
a += 1 # 等价于a=a+1
else:
print(a) # 输出5
死循环写法 :
while True:
print("这是一个死循环")
5.1 continue
continue
可以用于跳入下一次for
/while
循环,而不执行continue
后的代码:
a = 0
while a < 5:
a += 1 # 如果写在continue后则会造成永远无法跳过(a==2)的判断
if a == 2 :
continue
print(a) # 依次输出1, 3, 4, 5
for i in range(5):
if i == 2 :
continue
print(i) # 依次输出0, 1, 3, 4
5.2 break
break
用于中断for
/while
循环:
a = 0
while a < 5:
a += 1
if a == 3 :
break
print(a) # 依次输出1, 2
# 结束while死循环
a = 1
while True:
a += 1
if a == 5 :
break
print(a) # 依次输出2, 3, 4
for i in range(5):
if i == 3 :
break
print(i) # 依次输出0, 1, 2
四、文件读写
1.文本文档
Python使用open(path, mode)
函数来读取文件,path
为文件路径,mode
为文件打开方式。
./
表示当前代码文件所在路径,./a.txt
表示与代码文件同目录下的a.txt
文件,./dir/a.txt
表示与代码文件同目录下的dir
文件夹中的a.txt
文件。
常用mode
参数说明如下:
mode | 说明 |
---|---|
r | 只读模式,无法写文件,从头开始读取 |
r+ | 读写模式,从头开始读写 |
w | 只写模式,无法读文件,文件已存在则删除原内容,不存在则新建文件,从头开始写入 |
w+ | 读写模式,文件已存在则删除原内容,不存在则新建文件,从头开始读写 |
a | 追加只写模式,无法读文件,文件已存在则从文件尾开始读写,不存在则新建文件 |
a+ | 追加读写模式,文件已存在则从文件尾开始读写,不存在则新建文件 |
假定已有与demo.py
同目录下的a.txt
文件,初始内容为123456
f = open("./a.txt", "r") # 只读模式
s = f.read(3) # 读取3个字符,现读取索引指向第4个字符
print(s) # 123
s = f.read() # 从第4个字符继续读取,读取尽可能多的内容,视系统环境和硬件情况能够读取的最大数据量有所不同
print(s) # 456
f.close() # 关闭打开的文件
f = open("./a.txt", "w") # 只写模式
f.write("abcde") #使用write(内容)写入内容到文件,删除原内容并写入abcde
f.close()
f = open("./a.txt", "r") # 只读模式
s = f.read()
print(s) # abcde
f.close()
f = open("./a.txt", "a") # 追加写模式
f.write("123456") # 追加写入123456
f.close()
f = open("./a.txt", "r") # 只读模式
s = f.read()
print(s) # abcde123456
f.close()
2.文本处理Demo
刚好帮朋友写了个文本处理的代码,就拿来当示例了。
原内容格式如下:
WIDTH=16;
DEPTH=10000;
ADDRESS_RADIX=UNS;
DATA_RADIX=HEX;
CONTENT BEGIN
0 : 1021;
1 : 1021;
2 : 1021;
3 : 1021;
4 : 1021;
5 : 1021;
......
9996 : 7ACC;
9997 : 7ACC;
9998 : 7ACC;
9999 : 72AB;
END;
需要处理成如下格式,即只保留CONTENT部分每一行的16进制数据,每2位数据之间用空格隔开。
10 21 10 21 10 21 10 21 10 21 10 21 ... 7A CC 7A CC 7A CC 72 AB
代码:
f = open("raw.mif","r") # 只读方式读取源文件raw.mif
raw = f.read() # 读取全部内容到变量raw中
f.close() # 关闭文件
raw = raw[raw.index("CONTENT BEGIN")+14:raw.index("END;")-1] # 使用字符串索引,删除无关内容,只保留CONTENT部分
raw = raw.split(";") # 分割字符串,使用split(";")分割会同时删除掉;
new = [] # 新建一个数组
for i in raw[:-1]:
new.append(i[i.index(":")+2:]) # 使用字符串索引,只保留:后的数据,并使用append()方法将处理后的数据添加到新的new数组里
for i in range(len(new)):
new[i]=new[i][:2]+" "+new[i][2:] # 使用字符串索引,每2位数据中间添加一个空格,因为单个数据最长只有4位,故可以这么写
content = ""
for i in range(len(new)):
content = content + new[i] + " " # 遍历new数组,将数据添加到字符串content中,并补充空格
content = content[:-1] # 删除结尾空格
f = open("hex.txt","w") # 打开要写入的文件hex.txt
f.write(content) # 写入文件
f.close() # 关闭文件
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)