Python 基础语法
Python 环境安装与介绍
参考教程:python 安装教程、pycharm 安装教程,超详细 - CSDN
按照流程安装即可,注意路径最好不要出现中文。
基础操作
注释
在对应位置标记代码意义,增加可读性
print('Hello World') # 输出“Hello World”也可以使用多行注释,用三个双引号或者单引号括起来,可以将注释内容包裹起来
"""
print('Hello World')
print('Hello World')
"""
print('Hello World') # 只会输出这一行标准输出
print()函数:输出到控制台,可以输出多个值,用逗号隔开
print('Hello World 1','Hello World 2','Hello World 3')
print()
print('Hello Python')常用参数:
sep:指定分隔符,默认是空格end:指定结尾符,默认是换行符file:指定输出文件,默认是控制台flush:立即输出,默认是 False
例如:
import time
print("Hello", "world", sep=", ", end="!\n")
fp = open('test.txt', 'w') # 打开文件
# 使用print()函数写入文件
print('Hello, world!', file=fp)
time.sleep(2) # 等待2秒
print('Goodbye, world!', file=fp,flush=True)
time.sleep(2) # 等待2秒
fp.close() # 关闭文件标准输入
input()
input('请输入用户名:')
print({ok:1})input()会等待用户输入,并返回输入的内容,可以用变量接收
age = input('请输入年龄:')
print(age)可以用type()函数判断输入的数据类型
print(type(age))变量
变量就是存储数据的容器,例如:求长方形面积,长 10,宽 5 变量 x、y、s
x = 10
y = 5
s = x*y
print(s)一个变量可以进行多次赋值,对应内存中改变的是指向
x=100
x=50
print(x)变量的名字是不固定的,我们可以自己定义,区分大小写。
在命名时需要注意:
- 不能以数字开头
- 不能包含空格、标点符号、特殊字符
- 尽量简短易懂
- 尽量避免与关键字冲突
例如:
fast_food = True # 快餐常见的关键字:
and、as、assert、break、class、continue、def、del、elif、else、except、False、finally、for、from、global、if、import、in、is、lambda、None、nonlocal、not、or、pass、raise、return、True、try、while、with、yield
变量可以连续赋值,需要保证变量的个数和值的个数一致
num1,num2=1,2
'''等同于:
num1=1
num2=2
'''
print(num1,num2)交换两个变量的值(swap()函数):
num1=10
num2=20
temp=num1
num1=num2
num2=temp
'''等同于:
num1,num2=num2,num1
print(num1,num2)
'''
print(num1,num2)数据类型
Python 中有五种基本数据类型:
- 整型(
int):整数,如1、2、3 - 浮点型(
float):小数,如3.14、2.5 - 字符串型(
str):字符串,如'Hello World'、'' - 布尔型(
bool):布尔值,如True、False - 空值(
None):空值,如None
Python 中还有一些复合数据类型:
- 列表(
list):有序集合,元素可以重复,如[1, 2, 3]、['apple', 'banana', 'orange'] - 元组(
tuple):有序集合,元素不可修改,如(1, 2, 3)、('apple', 'banana', 'orange') - 字典(
dict):无序集合,元素是键值对,如{'name': 'Alice', 'age': 25} - 集合(
set):无序集合,元素不可重复,如{1, 2, 3}、{'apple', 'banana', 'orange'}
注:分类方法可能与其他不同
数值类型也可以表示复数,由实部和虚部组成:
com = complex(1,2) # com=1+2i
print(com)可以使用 int()、float()、str()、bool() 等函数进行类型转换:
num = 123.1
print(num)
str_num = str(num)
print(str_num)
float_num = float(str_num)
print(float_num)
int_num = int(float_num)
print(int_num)
bool_num = bool(int_num) # 非0(0、0.0、’’、[]、{})即True
print(bool_num)运算符
Python 中有以下运算符:
- 算术运算符:
+、-、*、/、//、%,用于数值计算 - 赋值运算符:
=、+=、-=、*=、/=、//=、%=,用于变量赋值 - 比较运算符:
==、!=、>、>=、<=,用于比较两个值是否相等 - 逻辑运算符:
and、or、not,用于逻辑判断 - 位运算符:
&、|、^、~、<<、>>,用于按位操作 - 成员运算符:
in、not in,用于判断元素是否存在于集合中 - 身份运算符:
is、is not,用于判断两个变量是否指向同一个内存地址
运算符的优先级:
- 圆括号
()
- 圆括号
- 乘除法
*,/,//,%
- 乘除法
- 加减法
+,-
- 加减法
- 移位运算符
<<,>>
- 移位运算符
- 位运算符
&,^,|
- 位运算符
- 比较运算符
<,<=,>,>=
- 比较运算符
- 等于运算符
==,!=
- 等于运算符
- 赋值运算符
=,+=,-=,*=,/=,//=,%=
- 赋值运算符
- 逻辑运算符
not,and,or
- 逻辑运算符
- 成员运算符
in,not in
- 成员运算符
- 身份运算符
is,is not
- 身份运算符
例如:
a = 10
b = 5
b+=1
c = a + b * 2 / 3
print(c)
print(1>2 and 2>3)
print(1>2 and 3>2)控制语句
分支控制语句
1.if 语句:
if 条件表达式:
语句块2.if-else 语句:
if 条件表达式:
语句块1
else:
语句块23.if-elif-else 语句:
if 条件表达式1:
语句块1
elif 条件表达式2:
语句块2
elif 条件表达式3:
语句块3
else:
语句块4例如,我有 200 元。我去买玩具,我需要对比玩具的价格和兜里的钱的大小:
money = 10000
TV_money = int(input('请输入电视价格:'))
if 3000 <= TV_money < 6000:
print('直接购买')
elif TV_money < 3000:
print('太便宜,不买')
elif 6000 <= TV_money <= 10000:
print('我再考虑考虑')
else:
print('肯定不买')注意:与 C 不同的是,Python 不需要使用
{}来包裹语句块,而是使用缩进(Tab 键)来表示语句块的层次关系。
分支也可以嵌套:
if 条件表达式1:
符合条件表达式1执行的代码
if 条件表达式1.1:
符合条件表达式1并且符合条件表达式1.1执行的代码
elif 条件表达式1.2:
符合条件表达式1不符合条件表达式1.1并且符合条件表达式1.2执行的代码
elif 条件表达式2:
不符合条件表达式1符合条件表达式2执行的代码
else:
既不符合条件表达式1又不符合条件表达式2执行的代码循环控制语句
循环控制语句可以分为 for 循环和 while 循环。
for 循环:
for 临时变量 in 可迭代对象:
循环体可迭代对象包括range()函数、字符串、列表、字典等等
例如:
for i in range(1, 10, 2):
print(i)其中,range()函数的三个参数分别是起始值、结束值、步长:
range(start, stop, step)start:起始值,默认为 0stop:结束值,不包含该值step:步长,默认为 1
注意:
range()函数至少要传一个参数,如果传一个参数,代表此参数是stop
range()的参数可以为正,可以为负,步长的正负,可以理解成坐标轴的正负方向。
例如:
for i in range(1,3,-1):
print(i)
# 什么都不打印
for i in range(3,1,-1):
print(i)for-else 循环
- 如果循环正常退出(没有执行
break),会执行else代码 - 如果循环不正常退出(有执行
break),则不会执行else代码
控制循环的关键字:break(中止,强制退出循环) 和 continue(继续,退出本次循环)
break用于终止当前循环,并跳出循环体continue用于跳过当前循环,直接进入下一次循环
例如:
for i in range(1, 10):
if i == 5:
break
print(i)
else:
print('循环正常结束')
print('循环1结束')
for i in range(1, 10):
if i == 5:
continue
print(i)
else:
print('循环正常结束')for 循环的循环嵌套:先运行外层循环,在运行内层循环
for 临时变量1 in 可迭代对象:
循环体
for 临时变量2 in 可迭代对象:
循环体调试
- 在需要断点的地方打上断点,点击左侧的小圆点,会出现一个红点
- 点击右侧的调试按钮,会出现调试选项,选择 Python Debugging
- 点击绿色的开始调试按钮,程序会暂停在断点处,可以查看变量的值、调用堆栈、控制台输出等
- 点击红色的停止调试按钮,程序会继续运行
字符串
常用操作
只要被单引号或双引号或者三引号包裹起来的内容都是字符串。字符串属于不可变类型,字符串中的内容一旦被定义,则无法进行更改。
字符串不可于数字相加。
name = 'zhangsan'
name = "zhangsan"
name = """zhangsan""" # 如果三引号没有变量接收,那么是注释,如果有变量接收,则为字符串
print(name)字符串是一个有序的序列,可以用索引来访问字符串中的元素。索引从 0 开始,从左到右,从上到下。
str = 'hello world'
print(str[0]) # h
print(str[6]) # d
print(str[-1]) # d
print(str[-2]) # l字符串的常用操作有:
- 字符串的拼接:
+ - 字符串的重复:
* - 字符串的切片:
[start:end:step]
例如:
str1 = 'hello'
str2 = 'world'
str3 = str1 + str2
print(str3) # helloworld
str4 = 'hello' * 3
print(str4) # hellohellohello
str5 = 'hello world'
print(str5[0:5]) # hello
print(str5[6:11]) # world
print(str5[::2]) # hlowrd如果我们想要倒叙输出一个字符串(将“python”输出成“nohtyp”):
word = 'python'
A.word[-1:0:-1] # nohty
B.word[::-1] # nohtyp
C.word[-1::-1] # nohtyp
D.word[-1:-7:-1] # nohtyp正确答案:B C D
如果我们想遍历字符串:
for char in 'hello world':
print(char)常用方法
字符串的方法很多,但我们最常用的其实就那么几个:
len():获取字符串的长度find(str):查找子串的位置,如果不存在,返回 -1replace(old, new):替换子串split(str):以指定字符串分割字符串,返回列表join(list):以指定列表中的元素连接字符串,返回字符串isdigit():判断字符串是否为数字isalpha():判断字符串是否为字母isalnum():判断字符串是否为字母或数字lower():转换为小写upper():转换为大写capitalize():首字母大写title():每个单词首字母大写strip():去除两端空格lstrip():去除左侧空格rstrip():去除右侧空格startswith(str):判断字符串是否以指定字符串开头endswith(str):判断字符串是否以指定字符串结尾center(width):将字符串居中,并在两侧填充指定字符ljust(width):将字符串左对齐,并在右侧填充指定字符rjust(width):将字符串右对齐,并在左侧填充指定字符
看着很多,但实际上用到某个需求的时候直接查就行。
例如:
# 字符串切分
str = 'hello world'
print(len(str)) # 11
print(str.find('l')) # 2
print(str.replace('l', 'L')) # heLLo world
print(str.split('o')) # ['hell', ' w', 'rld']
print(' '.join(['hello', 'world'])) # hello world
# 字符串判断
str = '12345'
print(str.isdigit()) # True
print(str.isalpha()) # False
print(str.isalnum()) # True
# 字符串转换
str = 'HELLO WORLD'
print(str.lower()) # hello world
print(str.upper()) # HELLO WORLD
print(str.capitalize()) # Hello world
print(str.title()) # Hello World
# 去除空格
str = 'hello world '
print(str.strip()) # hello world
print(str.lstrip()) # hello world
print(str.rstrip()) # hello world
# 字符串判断
str = 'hello world'
print(str.startswith('he')) # True
print(str.endswith('ld')) # True
# 字符串对齐
str = 'hello'
print(str.center(10, '*')) # **hello**
print(str.ljust(10, '*')) # hello****
print(str.rjust(10, '*')) # ****hello如果一个方法返回的结果正好是下一步方法所需要的对象,那么可以使用链式调用,例如:
str = ' hello world '
new_str = str.strip().replace('l', 'w').upper()
print(new_str) # HEWWO WORWD字符串格式化
如果我们需要将多个参数按照指定格式输出,可以使用字符串格式化:
name = 'zhangsan'
age = 25
print('我的名字是%s,今年%d岁了' % (name, age))其中%为格式化符号,在字符串中使用 %s、%d、%f 等来表示字符串、整数、浮点数
也可以使用format()方法,在字符串中使用 {} 来表示需要输出的参数:
name = 'zhangsan'
age = 25
print('我的名字是{0},今年{1}岁了'.format(name, age))其中, {0}、{1} 等为参数的编号,在 format() 方法中使用 {} 来表示需要输出的参数。
列表
列表是 Python 中最常用的复合数据类型,它可以存储多个元素,元素可以是任意类型。
常用操作
列表的创建:
list1 = [1, 2, 3, 4, 5]
list2 = ['apple', 'banana', 'orange']
list3 = [1, 'apple', 3.14, True]
print(list1)
print(list2)
print(list3)索引与赋值:
list1 = [1, 2, 3, 4, 5]
print(list1[0]) # 1
list1[0] = 10
print(list1) # [10, 2, 3, 4, 5]列表支持序列解包操作:
list1 = [1, 2, 3, 4, 5]
a, b, *c, d, e = list1
print(a) # 1
print(b) # 2
print(c) # [3, 4]
print(d) # 5
print(e) # 5列表的切片操作与字符串的一样,但返回的是列表:
list1 = [1, 2, 3, 4, 5]
print(list1[1:3]) # [2, 3]
print(list1[::2]) # [1, 3, 5]列表方法
常用的列表方法有:
len():获取列表的长度append(obj):在列表末尾添加元素pop(index):删除指定位置的元素,并返回该元素extend(list):在列表末尾添加另一个列表index(obj):查找元素的位置,如果不存在,抛出ValueError异常count(obj):统计元素出现的次数sort():对列表进行排序reverse():对列表进行反转clear():清空列表insert(index, obj):在指定位置插入元素remove(obj):删除指定元素,如果不存在,抛出ValueError异常copy():复制列表
例如:
list1 = [1, 2, 3, 4, 5]
list2 = [6, 7, 8, 9, 10]
list1.append(6)
list1.pop(2)
list1.extend(list2)
print(list1) # [1, 2, 4, 5, 6, 7, 8, 9, 10]
print(list1.index(5)) # 3
print(list1.count(5)) # 1
list1.sort()
list1.reverse()
list1.clear()
print(list1) # []
list1.insert(0, 1)
list1.remove(1)
list1.append(2)
list1_copy = list1.copy()
print(list1_copy) # [2]列表推导式
列表推导式是一种创建列表的简洁方式,可以根据某种条件筛选出符合条件的元素,并将其转换为新的列表。
语法:
new_list = [expression for item in iterable if condition]其中:
expression:表达式,用于生成新元素item:可迭代对象中的元素iterable:可迭代对象,如列表、元组、字符串condition:可选,用于筛选元素的条件
例如:
list1 = [1, 2, 3, 4, 5]
list2 = [x**2 for x in list1 if x % 2 == 0]
print(list2) # [4, 16]列表嵌套
列表可以嵌套列表,即一个列表的元素可以是多个其他列表,一般用于表示多维数组。
例如:
list1 = [1, 2, 3]
list2 = [4, 5, 6]
list3 = [7, 8, 9]
list4 = [list1, list2, list3]
print(list4) # [[1, 2, 3], [4, 5, 6], [7, 8, 9]]字典
字典是 Python 中另一种常用的复合数据类型,它是无序的键值对集合,使用{"key":"value"},键值对来确定字典,以逗号分隔,以大括号去包裹的序列。
常用操作
字典的创建:
dict1 = {'name': 'zhangsan', 'age': 25}
dict2 = {'name': 'lisi', 'age': 26}
dict3 = {'name': 'wangwu', 'age': 27}
print(dict1)
print(dict2)
print(dict3)索引与赋值:
dict1 = {'name': 'zhangsan', 'age': 25}
print(dict1['name']) # zhangsan
dict1['age'] = 26
print(dict1) # {'name': 'zhangsan', 'age': 26}字典的键必须是不可变类型,如字符串、数字、元组等。
字典方法
常用的字典方法有:
len():获取字典的长度keys():获取字典的键列表values():获取字典的值列表items():获取字典的键值对列表get(key, default=None):获取指定键的值,如果不存在,返回默认值pop(key):删除指定键的值,并返回该值popitem():随机删除一个键值对,并返回该键值对update(dict):更新字典clear():清空字典dict():将序列转换为字典
例如:
dict1 = {'name': 'zhangsan', 'age': 25}
dict2 = {'name': 'lisi', 'age': 26}
dict1.update(dict2)
print(dict1) # {'name': 'lisi', 'age': 26}
print(dict1.keys()) # dict_keys(['name', 'age'])
print(dict1.values()) # dict_values(['lisi', 26])
print(dict1.items()) # dict_items([('name', 'lisi'), ('age', 26)])
print(dict1.get('name')) # lisi
print(dict1.get('gender', 'unknown')) # unknown
dict1.pop('age')
print(dict1) # {'name': 'lisi'}
dict1.popitem()
print(dict1) # {}
dict1.clear()
print(dict1) # {}
dict3 = dict([('name', 'zhangsan'), ('age', 25)])
print(dict3) # {'name': 'zhangsan', 'age': 25}元组
元组是 Python 中另一种不可变的复合数据类型,它是一系列不可变的元素组成的序列,使用()来表示。
常用操作
元组的创建:
tuple1 = (1, 2, 3, 4, 5)
tuple2 = ('apple', 'banana', 'orange')
tuple3 = (1, 'apple', 3.14, True)
print(tuple1)
print(tuple2)
print(tuple3)索引与赋值:
tuple1 = (1, 2, 3, 4, 5)
print(tuple1[0]) # 1
tuple1[0] = 10 # TypeError: 'tuple' object does not support item assignment元组的切片操作与字符串、列表的一样,但返回的是元组:
tuple1 = (1, 2, 3, 4, 5)
print(tuple1[1:3]) # (2, 3)
print(tuple1[::2]) # (1, 3, 5)常用方法
常用的元组方法有:
len():获取元组的长度count(obj):统计元素出现的次数index(obj):查找元素的位置,如果不存在,抛出ValueError异常tuple():将序列转换为元组map(func, iterable):将函数应用到序列的每个元素,并返回结果的元组zip(iterable1, iterable2):将两个序列的元素打包成一个元组列表del():删除元组
例如:
tuple1 = (1, 2, 3, 4, 5)
print(len(tuple1)) # 5
print(tuple1.count(3)) # 1
print(tuple1.index(3)) # 2
tuple2 = tuple(range(1, 6))
print(tuple2) # (1, 2, 3, 4, 5)
tuple3 = tuple(map(lambda x: x**2, range(1, 6)))
print(tuple3) # (1, 4, 9, 16, 25)
tuple4 = tuple(zip('abc', range(1, 4)))
print(tuple4) # (('a', 1), ('b', 2), ('c', 3))
del(tuple1) # TypeError: 'tuple' object doesn't support item deletion元组与列表的区别
- 元组的元素不能修改,不能添加或删除元素,只能读取元素。
- 元组的元素是不可变的,因此元组是不可变的,而列表是可变的。
- 元组的创建速度比列表快,因为元组是不可变的,因此不需要创建新的对象,而列表是可变的,因此需要创建新的对象。
- 元组的元素是有序的,列表的元素是无序的。
文件操作
open()函数
内置函数open()可以打开文件,并返回一个文件对象,可以对文件进行读写操作,其接收参数如下:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)其中:
file:文件名或文件描述符,如果是文件名,则打开文件,如果是文件描述符,则直接使用该文件。mode:打开文件的模式,默认为r,表示只读模式,其他可选模式有:r:只读模式,文件必须存在,否则抛出FileNotFoundError异常。w:写入模式,文件不存在则创建,存在则覆盖,如果文件不存在,则创建文件,如果文件存在,则清空文件内容。x:新建模式,文件必须不存在,否则抛出FileExistsError异常。a:追加模式,文件不存在则创建,存在则在文件末尾追加。+:读写模式,文件必须存在,否则抛出FileNotFoundError异常。U:文本模式,文件必须存在,否则抛出FileNotFoundError异常。
buffering:缓冲区大小,默认为-1,表示系统默认缓冲区大小。encoding:编码格式,默认为None,表示系统默认编码格式。errors:错误处理方案,默认为None,表示系统默认错误处理方案。newline:行结束符,默认为None,表示系统默认行结束符。closefd:是否关闭文件描述符,默认为True,表示关闭。opener:用于指定打开文件的函数,默认为None,表示系统默认打开函数。
一般我们只需要用到前三个参数。
当对文件进行读写操作时,需要先打开文件,然后使用文件对象的read()、write()、readline()等方法进行读写操作,最后需要使用close()方法关闭文件。
常用的方法包括:
read(size=-1):读取文件内容,如果size为-1,则读取整个文件,否则读取指定大小的内容。readline(size=-1):读取一行内容,如果size为-1,则读取一整行,否则读取指定大小的内容。readlines():读取所有行内容,并返回列表。write(string):写入内容到文件末尾。seek(offset, whence=0):移动文件读取指针到指定位置。tell():获取文件读取指针当前位置。close():关闭文件。
例如:
# 打开文件
f = open('test.txt', 'w')
# 写入内容
f.write('hello world\n')
f.write('hello python\n')
# 读取内容
f.seek(0)
print(f.read())
# 关闭文件
f.close()with 语句
Python 2.5 引入了with语句,可以自动帮我们调用open()和close()方法,简化代码。
例如:
with open('test.txt', 'w') as f:
f.write('hello world\n')
f.write('hello python\n')
f.seek(0)
print(f.read())使用 with 语句,可以自动帮我们调用open()和close()方法,并保证文件正确关闭。
os 模块
Python 的 os 模块提供了非常丰富的文件和目录操作函数,可以用来处理文件和目录。
os.name:获取操作系统类型,posix表示 Linux、Unix、Mac OS X 等,nt表示 Windows。os.getcwd():获取当前工作目录。os.chdir(path):改变当前工作目录。os.listdir(path):列出指定目录下的所有文件和目录。os.mkdir(path):创建目录。os.makedirs(path):递归创建目录。os.remove(path):删除文件。os.rename(src, dst):重命名文件或目录。os.stat(path):获取文件或目录的状态信息。os.path.join(path, *paths):拼接路径。os.path.exists(path):判断文件或目录是否存在。os.path.isfile(path):判断是否为文件。os.path.isdir(path):判断是否为目录。os.path.getsize(path):获取文件大小。os.path.splitext(path):分离文件名与扩展名。
例如:
import os
# 获取当前工作目录
print(os.getcwd())