目录
运算符
数字运算符
比较运算符
逻辑运算符
转义字符
变量使用
变量定义
变量类型
变量命名
变量函数
input函数
type函数
条件语句
If
格式
案例1,判断年龄
案例2,借钱
案例3,and、or应用
循环语句
for
格式
案例1,打印一个列表
案例2,判断数字是偶数还是奇数
案例3,查找列表中的最大值和最小值
While
格式
案例1,打印5遍字符串
案例2,计算1到10的 求和
案例3,计算1到10的偶数求和
案例4,验证用户密码
Break
Contiune
while循环嵌套
九九乘法表
函数
函数的基本使用格式
函数的作用
函数的命名规则
函数的格式
函数的参数
形参
实参
函数的返回值return
函数的嵌套调用
在模块中定义函数
PIP包管理器
基础命令
指定源下载
国内源
下载到本地
安装本地的包
文件操作
图片操作
打开图片
移动图片
下载图片(爬虫)
文件操作
打开文件
向文件追加内容
练习实例
九九乘法表
判断分数
判断验证次数
FAQ
调试打断点
编辑
常见报错
名字没有被定义
语法错误
缩进错误
每天更新一点点,今天计划学习章节:函数
运算符
数字运算符
运算符 | 描述 | 示例 |
+ | 加 | 4 + 2 = 6 |
- | 减 | 4 – 2 = 2 |
* | 乘 | 4 * 2 = 8 |
/ | 除 | 4 /2 = 2 |
// | 取整数,返回除法的整数部分 | 4 // 2 = 2; 9 // 2 = 4 |
% | 取余数 | 4 % 2 = 0;5 % 2 = 1 |
** | 幂,平方、次方 | 1 ** 2 = 2;4 ** 0.5 = 2 |
比较运算符
运算符 | 描述 | 示例 |
== | 检查两个操作的值是否相等,如果是,则条件成立,返回True | 1 == 1 “haha” == “haha” |
!= | 检查两个操作的值是否不相等,如果是,则条件成立,返回True | 2 != 1 “haha” != “heihei” |
> | 检查左边的数值是否大于右边的数值,如果是,则条件成立,返回True | 2 > 1 |
< | 检查左边的数值是否小于右边的数值,如果是,则条件成立,返回True | 1 < 2 |
>= | 检查左边的数值是否大于等于右边的数值,如果是,则条件成立,返回True | 1 >= 1 |
<= | 检查左边的数值是否小于等于右边的数值,如果是,则条件成立,返回True | 1 <= 1 |
逻辑运算符
运算符 | 描述 | 示例 |
and | 逻辑与运算,等价于数学中的“且” | a and b(成立条件:a与b都为真) |
or | 逻辑或运算,等价于数学中的“或” | a or b(成立条件:a或者b只有一个满足条件) |
not | 逻辑非运算,等价于数学中的“非” | not a(成立条件:对a取反) |
运算符 | 描述 | 示例 |
= | 最基本的赋值运算 | 1 = 1 |
+= | 加赋值 | x += 1等同于x = x + 1 |
-= | 减赋值 | x -= 1等同于x = x - 1 |
*= | 乘赋值 | x -= 1等同于x = x - 1 |
/= | 除赋值 | x /= 2等同于x = x / 2 |
%= | 取余数赋值 | x %= 2等同于x = x % 2 |
**= | 幂赋值 | x **= 2等同于x = x ** 2 |
//= | 取整数赋值 | x //= 2等同于x = x // 2 |
&= | 按位与赋值 | x &= y等同于 x = x & y |
|= | 按位或赋值 | x |= y等同于 x = x | y |
^= | 按位异或赋值 | x ^= y等同于 x = x ^ y |
<<= | 左移赋值 | x <<= 1等同于x = x << 1 |
>>= | 右移赋值 | x >>= 1等同于x = x >> 1 |
转义字符
运算符 | 描述 |
\(在行尾时) | 续行符 |
\\ | 反斜杠符号 |
\’ | 单引号 |
\” | 双引号 |
\a | 响铃 |
\b | 退格(Backspace) |
\e | 转义 |
\000 | 空 |
\n | 换行 |
\v | 纵向制表符 |
\t | 横向制表符 |
\r | 回车 |
\f | 换页 |
变量使用
变量定义
变量名 = 值
phone = '010-8869'
print(phone)
变量类型
# 1. 数字类型:
a = 1
print(a, "是", type(a), "类型")# 2. 字符串类型
a = "哈哈"
print(a, "是", type(a), "类型")# 3. 列表类型
a = ["大", "王"]
print(a, "是", type(a), "类型")# 4. 元组类型
a = (1, 2)
print(a, "是", type(a), "类型")# 5. 集合类型
a = {'red', 'green'}
print(a, "是", type(a), "类型")# 6. 字典类型
a = {'name': '王', 'age': '18'}
print(a, "是", type(a), "类型")# 7. 布尔类型
a = True
b = False
print(a, "是", type(a), "类型")
print(b, "是", type(b), "类型")
变量命名
Python中,变量名由字母、数字和下划线组成,且不能以数字开头。变量名大小写敏感,因此"myVariable"和"myvariable"是不同的变量名。为了提高代码的可读性,建议使用有意义的变量名。例如,可以用"age"代表一个人的年龄,用"name"代表一个人的姓名。此外,还可以使用驼峰命名法,将多个单词连接在一起,每个单词的首字母都大写,例如"myAge"和"myName"。
- 变量名不应过长,通常应该尽量简短且具有描述性
- Python有一些保留字,这些保留字被编程语言预先定义,不能用作变量名
- 根据PEP 8,变量名应该用小写字母,并且可以使用下划线来分隔单词
变量函数
input函数
用户输入的任何内容默认都为字符串类型,可以参考如下将Str转换成int
num = int(input('输入数字:'))
print(num)
print(type(num))
num = input('香蕉的单价:')
num2 = input('买几斤?买;')price = float(num) * float(num2)
print(price, '元')
type函数
查看该变量的类型,使用type()
num = float(input('输入数字:'))
print(num)
print(type(num))
条件语句
If
格式
if 要判断的条件1:
条件1成立时,要做的事情
......
elif 要判断的条件2:
条件2成立时,要做的事情
......
else:
条件不成立时,要做的事情
案例1,判断年龄
输入年龄,如果年龄小于18,不让入内,如果大于等于18可以入内
if age < 18:print("未成年人禁止入内")
elif age >= 18:print("正常票价")
案例2,借钱
发工资了:借钱超过100以上没钱,100以下可以借,没发工资直接退出
import sysinfo = input("你发工资了吗?")
if info == 'no':print("没发")print("好的,那算了吧,本来还想问你借点钱的")sys.exit()
if info == 'yes':number = int(input("借我点钱:"))if number >= 100:print("我没那么多钱")else:print("可以")
案例3,and、or应用
a = 1
b = 2
if a > 0 and b > 1: #a和b都满足条件时,成立print("条件表达式1成立")
if a > 4 or b > 3: #a或者b都满足条件时,成立,反之不成立print("条件表达式2成立")
else:print("未满足其中一项,条件表达式2不成立")
if not a < 0: #a结果取反,满足条件时,条件成立print("条件表达式3成立")
循环语句
for
格式
for 变量 in 可迭代对象:
执行语句1
......
else:
执行语句2
......
案例1,打印一个列表
list_info = ['哈哈', '呵呵', '嘿嘿']
for i in list_info:print(i, end=' ')
打印一个列表,不自动换行,结尾以空格显示
案例2,判断数字是偶数还是奇数
for i in range(1, 11):if i % 2 == 0:print(f"数字{i}是偶数")else:print(f"数字{i}是奇数")
打印数字1~~10,判断数字是否除以2的余数为0
案例3,查找列表中的最大值和最小值
list_info = [1, 2, 4, 10, 55, 100, 86]
max_info = list_info[0]
min_info = list_info[0]for i in list_info:if i > max_info:max_info = iif i < min_info:min_info = i
print(f"最大值是{max_info}")
print(f"最小值是{min_info}")
使用for循环依次去取列表的第一个值,第一次是1,第二次2......,这样每次找到的最小的或者是最大的数都会将当前变量更新为最大或最小数
While
格式
while 判断语句:
执行的代码
......
案例1,打印5遍字符串
用while循环打印5遍hello word
定义一个初始数值,记录循环次数。当循环次数的判断条件满足时,程序退出
count = 5
while count > 0:print("hello word")count = count - 1if count == 0:print("打印5遍完成,跳出循环")break
print("game over")
定义一个初始数值,记录循环次数。当循环次数的判断条件不满足时,程序退出
count = 0
while count < 5:print("hello word")count = count + 1
print("已打印了5遍")
案例2,计算1到10的 求和
i = 0
result = 0
while i <= 100:result += ii += 1
print(result)
案例3,计算1到10的偶数求和
i = 0
result = 0
while i <= 100:i += 1#判断i中的值除以2是否等于0,验证其是否是偶数if i % 2 == 0:result += i# print(result)print(result)
案例4,验证用户密码
count = 3
while count > 0:name = input("登陆用户名:")pwd = int(input("密码:"))if name == "admin" and pwd == 123 or name == "wyq" and pwd == 123:print("用户名密码正确,正在登陆...")print("登陆成功")breakelse:count = count - 1if count > 0:print(f"用户名或者密码错误,请重新尝试,您还有{count}次机会")else:print("次数用尽,登陆失败,程序退出!")
当用户名密码均正确时,直接退出程序
当用户密码错误的时候,每次验证次数递减1,当剩余次数为0时,提示退出
Break
break:跳出整个循环,不会再循环该循环内容
i = 0
while i < 5:i = i + 1if i == 3:breakprint(f"当前i的值是{i}")
print(f"当退出循环时,i的值是{i}")
当i等于3时,跳出终止整个循环,所以当前循环内i的值应该是1和2,因为当i等于3的时候,break终止整个循环了
Contiune
continue:跳出本次循环,continue后面的代码不再执行,但是循环依然继续
a = 0
while a < 3:a = a + 1if a == 2:continueprint(f"跳出本次循环后a的值是{a}")
print(f"当前a的值是{a}")
当a等于2时,跳出本次循环,后面的代码不执行,但是循环体依然进行,所以当前a的值是1和3。因为当a等于2的时候,contiune不执行后面的代码语句
while循环嵌套
九九乘法表
#定义一个行的循环,输出9行
row = 1
while row <= 9:#定义一个列的循环col = 1#当列小于行时while col <= row:result = row * colprint(f"{col} * {row} = {result}\t", end=" ")#print(row)col = col + 1print()row = row + 1
函数
函数的基本使用格式
函数的作用
所谓函数,就是把具有独立功能的代码块组织为一个小模块,在需要的时候的调用
函数使用包含两个步骤:
定义函数--封装独立的功能
调用函数--享受封装的成果
函数的命名规则
- 可以由字母、下划线和数字组成
- 不能以数字开头
- 不能与关键字重名
函数的格式
def 函数():
执行语句1
......
函数()
def print_hello():print("hello word")print_hello()
函数的参数
在函数名的后面的小括号内部填写参数,多个参数用,分割
def get_sum(age1, age2):result = age1 + age2print(result)get_sum(18, 20)
形参
定义函数时,小括号中的参数是用来接收参数用的,在函数内部作为变量使用
实参
调用函数时,小括号的参数,是用来把数据传递给函数内部用的
函数的返回值return
在开发程序中,有时候希望一个函数执行结束后,攻速调用者一个结果,便于针对这个结果做后续的处理
在函数中可以使用return关键字来返回结果
调用函数一方,可以使用变量来接收函数的返回结果
注意:return表示返回,后续的代码都不会被执行
定义一个函数get_sum,定义形参age1和age2,使用return返回两个形参的总和,在调用函数时先定义实参get_sum(18, 20)后,通过变量赋值来获取结果
def get_sum(age1, age2):result = age1 + age2return resulta = get_sum(18, 20)
print(a)
观察下面示例,为什么 print("hahahaha") 没有执行?
def number(age):if age < 18:print("年龄小于18")return "未成年人禁止入内"print("hahahaha")else:return "已成年"print(number(15))
因为return后的语句不执行,所以没有执行 print("hahahaha")
函数的嵌套调用
一个函数里面又调用了另外一个函数,这就是函数嵌套
观察下面的示例
执行函数test2中,调用了另外一个函数test1,那么如何工作?
def test1():x = 5 * 2print(f"这是test1函数打印的x值:{x}")return xdef test2():y = 10 / 5print(f"y的值是{y}")z = test1() + yprint(f"这是test2函数打印的x + y = {z}")test2()
- 在执行test2函数的时候先打印了y的值
- 接着往下碰到了test1函数,会先执行test1函数的所有任务,打印了x的值,这时test1函数任务执行完毕
- 然后接着回来从调用test1函数的位置后继续执行代码,打印x + y的值
在模块中定义函数
一个模块其实就是一个包含 Python 代码的文件,它可以包含变量、函数、类等。其他的 Python 程序可以通过导入模块来使用其中定义的函数和其他内容。
观察下面的示例
test.py
def person(name, age, city):print(f"My name is {name}, {age} years old, I'm from {city}")
函数.py
import testtest.person('wang', '20', 'ShangHai')
- 定义一个自我介绍信息的函数的文件“test.py”,这时没有传递形参也没有获取结果
- 新建一个脚本“函数.py”使用import方法将定义好函数的文件“test”导入
- 使用函数方法传递实参获取结果,运行”函数.py“文件即可获取到"test.py"的代码结果
例如爬虫常见的requests库,使用import requests导入库之后使用requests.get(url)来获取内容,对于自身来说,requests库就是一个包含爬取目标url信息的代码文件,我们使用其定义好的get方法来获取内容
PIP包管理器
Pip是Python的包管理器,它允许你安装和管理额外的库和依赖,这些库和依赖未包含在Python标准库中。pip是递归的缩写,其全名是“Pip Installs Packages”或者“Pip Installs Python”。除了Python外,Pip还可以用于其他一些Python的变体,例如PyPy。
Pip的主要功能如下:
- 安装Python包
- 卸载Python包
- 升级Python包
- 查看已安装的Python包
基础命令
pip list
pip install <package_name>
pip uninstall <package_name>
pip install --upgrade <package_name>
指定源下载
pip3 install -i https://pypi.douban.com/simple/ <package_name>
国内源
清华:https://pypi.tuna.tsinghua.edu.cn/simple
阿里云:http://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
华中理工大学:http://pypi.hustunique.com/
山东理工大学:http://pypi.sdutlinux.org/
豆瓣:http://pypi.douban.com/simple/
下载到本地
pip3 download urlopen -d "/opt/py_packge" -i https://pypi.mirrors.ustc.edu.cn/simple/
安装本地的包
pip3 install /opt/py_packge/urlopen-1.0.0.zip
文件操作
图片操作
打开图片
Pillow是一个Python图像处理库
yum -y install libjpeg*pip3 install -i https://pypi.mirrors.ustc.edu.cn/simple/ pillow==8.4.0
from PIL import Imageimage_path = 'E:\工具\pycharm\object\jpg\p1597238857.jpg'
image = Image.open(image_path)
image.show()
移动图片
from PIL import Imageimport os#打开本地图片image_path = '/opt/pytest/file/1.jpeg'image = Image.open(image_path)#显示图片image.show()old_directory = '/opt/pytest/file'new_directory = '/opt/pytest/file/jpeg'#即使目录存在,也会正常完成创建目录操作os.makedirs(new_directory, exist_ok=True)#将目录路径和文件名拼接成一个完整的文件路径new_file_path = os.path.join(new_directory, '荒.jpeg')#移动文件到新目录os.rename(image_path,new_file_path)print(f"文件已保存到新目录:{new_file_path}")
下载图片(爬虫)
import reimport requests
from bs4 import BeautifulSoup
import os
from PIL import Image
url = 'https://movie.douban.com/'
header = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36'}response = requests.get(url, headers=header, verify=False)
response.encoding = 'utf-8'
#print(response.text)main_list = BeautifulSoup(response.text, "html.parser")
#print(main_list)info_list = main_list.find("div", class_="article").find_all('a')
#print(info_list)text = info_listtext = ''.join(str(tag) for tag in text)# 使用 BeautifulSoup 解析 HTML
soup = BeautifulSoup(text, 'html.parser')# 提取所有图片链接#遍历所有的<img>标签,并将每个标签的src属性的值添加到一个新的列表中
image_links = [img['src'] for img in soup.find_all('img')]# 输出提取到的图片链接
os.makedirs("jpg", exist_ok=True)
for link in image_links:jpg_name = link.split("/")[-1]img_data = requests.get(link).contentwith open(os.path.join("jpg", jpg_name), 'wb') as f:f.write(img_data)print(f"已下载: {jpg_name}")print("下载完成")
- 发送一个GET请求到豆瓣电影网站(https://movie.douban.com/),并获取响应内容。
- 使用BeautifulSoup对获取到的HTML进行解析,找到网页中class为"article"的div标签下所有的超链接(a标签)。
- 通过 img.find('img')['src'] 的方式直接从 img 标签中提取图片链接。遍历这些超链接,提取出每个超链接中的图片链接(img标签的src属性),并存储在一个列表中。
- 创建一个名为"jpg"的文件夹(如果该文件夹不存在的话)来存储下载的图片。
- 遍历图片链接列表,使用 requests.get(link).content 获取图片的二进制数据,然后将二进制数据使用 open 方法写入以图片链接中最后一部分命名的文件中,保存在"jpg"文件夹中。
文件操作
打开文件
file_path = '/opt/pytest/file/信息笔记.txt'#打开文件,只读模式with open(file_path,'r') as file:#读取文件内容file_content = file.read()print(file_content)
向文件追加内容
file_path = '/opt/pytest/file/信息笔记.txt'with open(file_path, 'a') as file:file.write('加入语句1:你好!\n')file.write('加入语句2:再见!\n')with open(file_path, 'r') as file:file_content = file.read()print(file_content)
练习实例
九九乘法表
# @Time : 2023/11/17 99乘法表
for i in range(1,10):for j in range(1, i+1):result = j * iprint(f"{j}*{i}={result}", end="\t")print()
判断分数
# @Time :2023/11/17 判断分数70
num = float(input('输入学生的分数:'))
if num >= 90:print("优秀")
elif 90 > num >= 80:print("良")
else:print("有待观察")
判断验证次数
# @Time :2023/11/17 判断验证次数
count = 3
while count > 0:number = 10num = int(input("输入数字:"))if num == number:print(f"输入数字{num}正确")breakelse:count = count - 1if count > 0:if num < 10:print(f"输入数字{num}小了,还剩{count}次机会")else:print(f"输入数字{num}大了,还剩{count}次机会")else:print("没机会了,游戏结束")
FAQ
调试打断点
F8单步走
常见报错
名字没有被定义
a = 1
print(b)
Traceback (most recent call last):
File "E:\工具\pycharm\object\基础学习.py", line 10, in <module>
print(b)
^
NameError: name 'b' is not defined
语法错误
a = 1
print(a'')
File "E:\工具\pycharm\object\基础学习.py", line 9
print(a'')
^^
SyntaxError: invalid syntax
缩进错误
a = 1print(a)
File "E:\工具\pycharm\object\基础学习.py", line 9
print(a)
IndentationError: unexpected indent