Python 基础语法(一):常量、变量、输入输出与运算符

文章目录

    • [1. 认识 Python](#1. 认识 Python)
    • [2. 常量和变量](#2. 常量和变量)
      • [2.1 常量](#2.1 常量)
      • [2.2 变量](#2.2 变量)
      • [2.3 同时给多个变量赋值](#2.3 同时给多个变量赋值)
    • [3. 输入与输出](#3. 输入与输出)
      • [3.1 输出:print()](#3.1 输出:print())
      • [3.2 输入:input()](#3.2 输入:input())
    • [4. 常见运算符](#4. 常见运算符)
      • [4.1 算术运算符](#4.1 算术运算符)
      • [4.2 比较运算符](#4.2 比较运算符)
      • [4.3 逻辑运算符](#4.3 逻辑运算符)
      • [4.4 赋值运算符](#4.4 赋值运算符)
    • [5. 运算符的优先级](#5. 运算符的优先级)
    • [6. 综合实例](#6. 综合实例)
    • [7. 小结](#7. 小结)

1. 认识 Python

Python 是一门简洁、易读、适合入门的高级编程语言。它由荷兰程序员 Guido van Rossum 在 1989 年圣诞节期间开始设计,1991 年发布第一个公开版本,名字来源于英国喜剧团体「蒙提·派森」,和「蟒蛇」其实没有直接关系。

Python 使用缩进组织代码块,语法接近自然语言,非常适合用来学习编程的基本概念。它主要有以下几个特点:

  • 简单易学:语法干净,几乎没有多余的符号,阅读 Python 代码就像阅读一段描述过程的文字。
  • 开源免费:任何人都可以免费下载、使用和分发 Python。
  • 跨平台:同一份 Python 代码通常可以在 Windows、macOS、Linux 上直接运行。
  • 应用广泛:Python 在 Web 开发、数据分析、人工智能、自动化脚本、网络爬虫等领域都有非常成熟的生态。

需要特别说明的是,Python 曾经有两个不兼容的大版本:Python 2 和 Python 3。Python 2 已于 2020 年停止维护,目前学习都应该选择 Python 3,本文的所有示例也都基于 Python 3。

本篇文章是 Python 基础语法系列的第一篇,我们将从最基础的内容讲起:常量、变量、输入输出与运算符。

2. 常量和变量

2.1 常量

常量是指在程序运行过程中值不会改变的量。例如数学中的圆周率、光速、某系统的最大连接数等,它们在程序逻辑上应该保持固定。

Python 本身并没有提供类似 C 语言中 const 的「真正」常量定义机制。也就是说,没有任何语法层面的约束能阻止你把一个常量重新赋值。因此在 Python 社区,通常约定使用全大写字母加下划线来命名常量,以此提醒自己和他人:这个值不应该被修改。

python 复制代码
PI = 3.1415926
MAX_SIZE = 100
DEFAULT_NAME = "Python"

虽然从语法上说,PI = 3.14 之后依然可以再次给 PI 赋值,但按照社区惯例,全大写变量应当被视为常量,不要轻易修改。这样做的好处是:当其他人阅读你的代码时,一眼就能看出哪些值是「不应改变的约定常量」,哪些是「会变化的普通变量」。

提示:从 Python 3.8 开始,标准库提供了 typing.Final 可以做类型层面的常量标注,配合类型检查工具能在一定程度上提示开发者不要重新赋值,但它同样不阻止真正的运行时修改。初学者了解「全大写命名约定」即可。

2.2 变量

变量是计算机内存中一块命名区域,用于存储数据。在 Python 中创建变量非常简单:直接给变量名赋值即可,不需要事先声明类型。

python 复制代码
name = "小明"
age = 18
score = 95.5
is_student = True

Python 的变量是动态类型的:变量的类型由它现在指向的值决定,同一个变量可以先后保存不同类型的值。例如下面的写法是完全合法的:

python 复制代码
data = 100
print(type(data))  # <class 'int'>

data = "一百"
print(type(data))  # <class 'str'>

这里的 type() 函数可以用来查看一个变量的类型。

变量命名需要遵守以下规则:

  • 只能包含字母、数字和下划线,且不能以数字开头。例如 user1_count 合法,而 1user 非法。
  • 不能使用 Python 的关键字,例如 ifforwhileclassdefTrueFalseNone 等都不能作为变量名。
  • 区分大小写,Namename 是两个完全不同的变量。

下面是一些错误示例:

python 复制代码
2name = "错误"     # 不能以数字开头
if = 10            # 不能使用关键字
my-name = 3        # 不能包含连字符 -

推荐使用小写字母加下划线的命名风格,让变量名见名知意:

python 复制代码
user_name = "Alice"
total_count = 100
student_age = 20

2.3 同时给多个变量赋值

Python 允许在一行中同时为多个变量赋值,让代码更加简洁。这种写法本质上是「解包赋值」:右边的值会按顺序依次赋给左边的变量。

python 复制代码
x, y, z = 1, 2, 3
print(x, y, z)  # 输出:1 2 3

利用这个特性,我们可以非常优雅地实现两个变量值的交换,这在不少语言里通常需要借助临时变量才能完成:

python 复制代码
a = 10
b = 20

a, b = b, a
print(a, b)  # 输出:20 10

还可以使用同一个值同时初始化多个变量。需要注意的是,此时 abc 指向的是同一个值:

python 复制代码
a = b = c = 0
print(a, b, c)  # 输出:0 0 0

同时赋值时,左右两侧的变量个数必须一致,否则会抛出 ValueError

python 复制代码
x, y = 1, 2, 3  # 报错:too many values to unpack

3. 输入与输出

3.1 输出:print()

print() 是 Python 中最常用的输出函数,用于把内容打印到控制台。它可以输出字符串、数字、布尔值以及各种对象。

python 复制代码
print("Hello, World!")
print(2026)
print(3.14)
print(True)

print() 可以同时输出多个内容,默认使用空格分隔:

python 复制代码
name = "小红"
age = 20
print("名字:", name, "年龄:", age)
# 输出:名字: 小红 年龄: 20

我们可以使用 sep 参数自定义分隔符:

python 复制代码
print("Python", "Java", "C++", sep=" | ")
# 输出:Python | Java | C++

使用 end 参数可以控制输出结尾字符,默认是换行符 \n

python 复制代码
print("第一步", end=" -> ")
print("第二步")
# 输出:第一步 -> 第二步

除此之外,print() 还支持一种更现代、更灵活的格式化方式:f-string。在字符串前面加上字母 f,就可以用 {变量} 的形式把变量值嵌入字符串中:

python 复制代码
name = "小明"
age = 18
print(f"我叫{name},今年{age}岁")
# 输出:我叫小明,今年18岁

f-string 还可以在花括号里书写表达式:

python 复制代码
a = 10
b = 20
print(f"{a} + {b} = {a + b}")
# 输出:10 + 20 = 30

3.2 输入:input()

input() 函数用于接收用户在键盘上输入的内容。程序执行到 input() 时会暂停,等待用户输入并按下回车,然后把输入的内容作为字符串返回。

需要特别注意的是,input() 的返回值始终是字符串类型,即使用户输入的是数字。

python 复制代码
name = input("请输入你的名字:")
print("你好," + name)

如果希望把输入内容当作数字参与运算,需要使用类型转换函数进行转换:

python 复制代码
age = int(input("请输入你的年龄:"))
print("明年你将是", age + 1, "岁")

也可以使用 float() 将输入转换为浮点数:

python 复制代码
height = float(input("请输入你的身高(米):"))
print("你的身高是", height, "米")

使用 input() 时有两个非常容易犯的错误:

第一,忘记把字符串转换成数字就直接做加法,结果变成了字符串拼接:

python 复制代码
a = input("请输入一个数字:")  # 假设输入 10
b = input("请再输入一个数字:")  # 假设输入 20
print(a + b)
# 输出:1020,而不是 30

第二,把无法转换成数字的字符串交给 int()float() 转换,会触发 ValueError

python 复制代码
age = int(input("请输入年龄:"))  # 如果输入 abc,程序会报错

因此,在需要数字的场景中,务必使用 int()float() 进行转换;如果担心用户输入非法内容,后续学习了异常处理后还可以加上 try/except 来做容错。

4. 常见运算符

4.1 算术运算符

算术运算符用于执行基本的数学运算:

运算符 说明 示例 结果
+ 加法 5 + 2 7
- 减法 5 - 2 3
* 乘法 5 * 2 10
/ 除法 5 / 2 2.5
// 整除 5 // 2 2
% 取余 5 % 2 1
** 幂运算 5 ** 2 25

下面通过代码演示常用运算:

python 复制代码
print(10 + 3)   # 13
print(10 - 3)   # 7
print(10 * 3)   # 30
print(10 / 3)   # 3.3333333333333335
print(10 // 3)  # 3
print(10 % 3)   # 1
print(2 ** 10)  # 1024

这里有几个容易混淆的点需要特别说明:

第一,/真除法 ,无论参与运算的是否为整数,它总会返回浮点数 。例如 10 / 2 的结果是 5.0,而不是 5

第二,//整除 ,它向下取整。比如 10 // 3 的结果是 3,因为它等于 3.333... 向下取整。当操作数出现负数时尤其要注意:

python 复制代码
print(-10 // 3)  # -4,因为 -3.333... 向下取整为 -4
print(10 // -3)  # -4

第三,% 是取余运算,经常被用来判断一个数是奇数还是偶数:

python 复制代码
num = 7
if num % 2 == 0:
    print("偶数")
else:
    print("奇数")
# 输出:奇数

第四,** 表示幂运算,2 ** 10 就是 210 次方。

4.2 比较运算符

比较运算符用于比较两个值的大小关系,结果是布尔值 TrueFalse

运算符 说明
== 等于
!= 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于
python 复制代码
a = 10
b = 20

print(a == b)  # False
print(a != b)  # True
print(a < b)   # True
print(a >= b)  # False

请务必区分 ==== 是赋值,== 是比较是否相等。这是初学者犯错最多的地方之一。

比较运算符不仅能比较数字,也能比较字符串。字符串按字典序逐个字符比较其编码大小:

python 复制代码
print("apple" < "banana")  # True

Python 还支持链式比较,让代码更贴近数学写法:

python 复制代码
x = 15
print(10 < x < 20)  # True,等价于 10 < x and x < 20

4.3 逻辑运算符

逻辑运算符用于组合多个条件判断,主要有三种:andornot

运算符 说明 示例
and 两者都为 True 才为 True a and b
or 两者有一个为 True 即为 True a or b
not 取反 not a
python 复制代码
age = 22
has_ticket = True

# 两个条件都满足才为 True
print(age >= 18 and has_ticket)  # True

# 两个条件满足其一即为 True
print(age < 18 or has_ticket)    # True

# 取反
print(not has_ticket)            # False

逻辑运算符有一个重要特性:短路求值 。对于 and,如果左侧已经为 False,右侧不会再执行;对于 or,如果左侧已经为 True,右侧也不会再执行。这个特性在编写条件判断时非常有用。

此外,Python 中很多值都可以参与真值判断。00.0、空字符串 ""、空列表 []None 等都被视为 False,非零数字和非空容器则视为 True

4.4 赋值运算符

赋值运算符用于给变量赋值,其中复合赋值运算符可以让代码更简洁。

运算符 等价写法
= x = 5
+= x = x + 5
-= x = x - 5
*= x = x * 5
/= x = x / 5
//= x = x // 5
%= x = x % 5
**= x = x ** 5
python 复制代码
num = 10
num += 5    # 相当于 num = num + 5
print(num)  # 15

num *= 2    # 相当于 num = num * 2
print(num)  # 30

num -= 8    # 相当于 num = num - 8
print(num)  # 22

num //= 4   # 相当于 num = num // 4
print(num)  # 5

num **= 2   # 相当于 num = num ** 2
print(num)  # 25

复合赋值运算符只是普通赋值运算的简写,两者含义完全等价。注意 /= 同样遵守真除法的规则,运算结果会是浮点数:

python 复制代码
x = 7
x /= 2
print(x)  # 3.5

5. 运算符的优先级

当多个运算符同时出现在一个表达式中时,Python 会按照一定的优先级进行计算。优先级从高到低大致如下:

  1. 幂运算:**
  2. 正负号:+x-x
  3. 乘除取余整除:*///%
  4. 加减运算:+-
  5. 比较运算:><>=<===!=
  6. 逻辑非:not
  7. 逻辑与:and
  8. 逻辑或:or

例如下面的表达式:

python 复制代码
result = 2 + 3 * 4
print(result)  # 14,因为先算乘法再算加法

需要特别注意的是,幂运算 **右结合的,连续书写时从右向左计算:

python 复制代码
print(2 ** 3 ** 2)
# 等价于 2 ** (3 ** 2) = 2 ** 9 = 512
# 而不是 (2 ** 3) ** 2 = 64

如果优先级难以记忆,最推荐的做法是使用括号明确运算顺序。括号既能让代码更容易理解,也能避免很多隐藏的错误:

python 复制代码
result = (3 + 4) * 5
print(result)  # 35

# 括号让逻辑更清晰
a = 10
b = 3
flag = (a > 5) or (b < 5)
print(flag)  # True

团队协作时,即使有些括号从语法上说并不必要,多写一个括号往往也能显著提高代码的可读性。

6. 综合实例

下面通过一个综合示例,把本文学习到的知识串联起来:计算圆的面积和周长。

python 复制代码
# 定义常量
PI = 3.14159

# 接收输入
radius = float(input("请输入圆的半径:"))

# 进行计算
area = PI * radius ** 2
perimeter = 2 * PI * radius

# 输出结果
print("圆的面积是:", round(area, 2))
print("圆的周长是:", round(perimeter, 2))

运行后,如果输入 5,输出结果如下:

text 复制代码
请输入圆的半径:5
圆的面积是: 78.54
圆的周长是: 31.42

这个例子完整地涵盖了常量定义、变量赋值、input() 输入与类型转换、算术运算、幂运算以及 print() 输出。

我们再用一个例子巩固「输入 + 类型转换 + 复合赋值」的配合使用,实现一个简易的记账程序:

python 复制代码
# 每月零花钱
monthly_money = float(input("请输入每月零花钱:"))

# 记录本月支出
spent = float(input("请输入本月已花费金额:"))

# 使用复合赋值计算剩余金额
monthly_money -= spent
print(f"本月剩余零花钱:{monthly_money} 元")

7. 小结

本文介绍了 Python 最基础的语法知识:

  • 常量通常使用全大写字母命名,用于表示程序中不应被修改的值;
  • 变量通过赋值直接创建,无需声明类型,并且可以随时重新赋值为不同类型的值;
  • 变量命名遵循「字母、数字、下划线组成且不以数字开头」的规则,推荐使用小写加下划线的命名风格;
  • print() 负责输出,可通过 sepend 参数控制格式,结合 f-string 可以方便地格式化内容;
  • input() 负责输入,其返回值始终是字符串,参与运算前需用 int()float() 等进行类型转换;
  • 常用的运算符包括算术、比较、逻辑和赋值运算符,比较运算会返回布尔值,逻辑运算支持短路求值;
  • 当表达式较为复杂时,使用括号可以让运算顺序更加清晰。

掌握这些基础内容后,下一篇我们将继续学习 Python 的流程控制,包括条件判断和循环语句。

相关推荐
Warren2Lynch1 小时前
从提示词到架构:Visual Paradigm VPasCode AI 驱动更新完全指南
人工智能·架构
卷无止境1 小时前
Windows 上丝滑开发 Python,并稳定构建 Docker 镜像
后端·python·docker
ZGIAI1 小时前
ZGI 发布治理:同一个 Agent 服务多个入口
人工智能·架构
ZGIAI2 小时前
ZGI 批量测试:上线前验证 Agent
人工智能·架构
qq407855602 小时前
面向智能补货需求的进销存系统盘点
大数据·人工智能·低代码·制造
空堂与归2 小时前
用户分群找不到规律?用K-Means聚类算法自动发现数据模式
算法·机器学习·kmeans·聚类
TELL5212 小时前
selenium webdriver 第二次初始化的异常
开发语言·python
Web3_Daisy2 小时前
从流动性到执行:如何降低 MEV 对 Web3 市场
大数据·人工智能·web3·区块链
Csvn2 小时前
📊 SQL 入门 Day 22:视图与物化视图
后端·sql