【python基础】day1-变量、数据类型、判断

10 阅读14分钟

🖥 学习目标


目标: 能定义变量、使用基本数据类型、写if判断

学习任务:

  1. 变量命名规则、赋值
  2. 基本数据类型:int, float, str, bool、NoneType
  3. 类型转换:int(), str(), float(),bool()
  4. if / elif / else 结构
  5. 比较运算符:==, !=, >, <, >=, <=
  6. 逻辑运算符:and, or, not

📋 相关知识


  1. 变量命名规则、赋值

(1)变量命名(核心规则)

硬性规则:仅含字母 / 数字 / 下划线,不能以数字开头,禁用 Python 关键字(如 if/for/True),大小写敏感;

✅ 正确:user_agescore100_tempage18_name

❌ 错误:user age(含空格)、score@100(含特殊字符)、18age123_abc

软性规范:优先蛇形命名(如user_age)、见名知意,全大写表示常量(如PI = 3.14)。

✅ 推荐:student_score(学生成绩)、total_price(总价)、user_nameorder_number

❌ 不推荐:a1x2ytempuserName(小驼峰,Python 中仅用于类名)、UserName(大驼峰,仅类名用)

特殊命名约定

  • 单下划线开头(_var):表示 “私有变量”,提示他人尽量不要直接访问(仅规范);

  • 双下划线开头(__var):表示 “强私有变量”,Python 会对其做名称混淆(实际开发中少用);

  • 全大写(CONSTANT):表示常量(如 PI = 3.1415926),提示他人不要修改。

(2)赋值(核心语法)

基础写法变量名 = 值,无需声明类型,支持动态修改(如age=18age="十八");

实用技巧:支持多变量赋值(a,b=1,2)、交换赋值(x,y=y,x)、增量赋值(count += 1)。

🚨 避坑关键点

  • 不能用空格 / 特殊字符(如 @、#)命名,不能把值写在赋值号左边(如10=num);
  • 命名优先体现用途,拒绝a1/x2y这类无意义命名

A. 基础赋值

# 1. 基本类型赋值
age = 25                # 整数(int)
height = 1.75           # 浮点数(float)
name = "王小明"         # 字符串(str)
is_adult = True         # 布尔值(bool)
hobbies = ["篮球", "阅读"]  # 列表(list)

# 2. 变量重新赋值(类型可随意切换,动态类型特性)
age = "二十五"  # 从int变为str,Python允许
print(age)      # 输出:二十五

B. 进阶赋值技巧(高频使用)

# 1. 多变量同时赋值(解包赋值)
a, b, c = 1, 2, 3  # 一一对应赋值
print(a, b, c)     # 输出:1 2 3

# 交换两个变量的值(Python特有简洁写法)
x = 10
y = 20
x, y = y, x        # 无需临时变量,直接交换
print(x, y)        # 输出:20 10

# 2. 链式赋值
m = n = p = 0      # m、n、p都赋值为0
print(m, n, p)     # 输出:0 0 0

# 3. 增量赋值(简化运算赋值)
count = 5
count += 3  # 等价于 count = count + 3
print(count)  # 输出:8

count *= 2   # 等价于 count = count * 2
print(count)  # 输出:16

# 4. 解包可迭代对象(列表、元组等)
scores = [90, 85, 95]
chinese, math, english = scores
print(math)  # 输出:85
  1. 基本数据类型

类型名称说明示例
整数 (int)无小数部分的数字,可正可负,支持任意大小10, -5, 0, 1000000000000
浮点数 (float)带小数的数字,也支持科学计数法3.14, -0.5, 2e3(即 2000.0)
布尔值 (bool)只有两个值:True(真)/False(假),本质是 int 的子类(True=1,False=0)True, False
字符串 (str)字符的序列,用单引号、双引号或三引号包裹'hello', "Python", '''多行文本'''
空值 (NoneType)表示 “无” 或 “空”,只有一个值 NoneNone

(1)整数 ( int )

  • 定义:用来表示没有小数部分的数字,包括正整数、负整数和 0。就像我们日常生活中数个数、记年龄、表示数量的数字。
  • 常见用法:直接赋值、数学运算(加减乘除、取余、幂运算等)。
  • 代码示例
# 定义整数变量
age = 25       # 正整数
score = -5     # 负整数
zero = 0       # 0也是整数

# 整数运算
print(10 + 5)  # 加法,输出 15
print(10 - 3)  # 减法,输出 7
print(10 * 3)  # 乘法,输出 30
print(10 / 3)  # 除法,注意:结果是浮点数,输出 3.3333333333333335
print(10 // 3) # 整除,只保留整数部分,输出 3
print(10 % 3)  # 取余,输出 1
print(2 ** 3)  # 幂运算(2的3次方),输出 8

(2) 浮点数 ( float )

  • 定义:用来表示带有小数部分的数字,也可以表示科学计数法(如 1.23e4 表示 12300)。比如表示身高(1.75 米)、价格(99.9 元)、圆周率(3.14159)等。
  • 注意点:浮点数运算可能存在微小的精度误差(因为计算机二进制存储的特性),这是正常现象。
  • 代码示例
# 定义浮点数变量
height = 1.75   # 普通浮点数
price = 99.9    # 价格
sci_num = 1.23e4 # 科学计数法,等价于 12300.0

# 浮点数运算
print(0.1 + 0.2)  # 注意:输出不是 0.3,而是 0.30000000000000004(精度误差)
print(3.14 * 2)   # 输出 6.28
print(10.0 / 3)   # 输出 3.3333333333333335

(3)字符串 ( str )

  • 定义:用来表示文本信息,由字符(字母、数字、符号、中文等)组成,必须用引号包裹(单引号 '、双引号 "、三引号 '''/""" 都可以)。
  • 常见用法:赋值、拼接、索引(取单个字符)、切片(取部分字符)、常用方法(如去空格、转大小写)。
  • 代码示例
# 定义字符串变量
name = '小明'          # 单引号
message = "Hello World" # 双引号
long_text = '''这是一段
多行文本'''            # 三引号(支持换行)

# 字符串拼接
print('你好' + '小明')  # 输出 你好小明
print('年龄:' + str(25)) # 拼接不同类型需先转换,输出 年龄:25

# 索引(从 0 开始计数)
print(message[0])      # 取第1个字符,输出 H
print(message[-1])     # 取最后1个字符,输出 d

# 常用方法
print(message.upper()) # 转大写,输出 HELLO WORLD
print('  测试  '.strip()) # 去除首尾空格,输出 测试

(4) 布尔值 ( bool )

  • 定义:只有两个值:True(真)和 False(假),主要用于判断条件(比如判断是否满足某个条件、比较大小等)。
  • 注意点True 等价于 1,False 等价于 0;非 0 数字、非空字符串等会被判定为 True,0、空字符串 ''None 等会被判定为 False
  • 代码示例
# 直接定义布尔值
is_adult = True
is_empty = False

# 条件判断中使用
print(10 > 5)   # 输出 True
print(10 == 5)  # 输出 False
print('abc' == 'abc') # 输出 True

# 布尔值与其他类型转换
print(bool(0))  # 输出 False
print(bool('')) # 输出 False
print(bool(1))  # 输出 True
print(bool('a')) # 输出 True
  1. 类型转换

实际开发中经常需要在不同类型间转换,核心转换函数:

  • int():转整数(浮点数转整数会舍去小数,字符串需是纯数字)
  • float():转浮点数
  • str():转字符串
  • bool():转布尔值
# 类型转换示例
print(int(3.9))    # 输出 3(舍去小数)
print(float(10))   # 输出 10.0
print(str(100))    # 输出 '100'
print(bool(0))     # 输出 False
  1. if /elif/else条件判断

(1)核心概念: 什么是 if/elif/else 结构?

if/elif/else 是 Python 中用于条件判断的语句,作用是让程序根据不同的条件执行不同的代码块,就像生活中 “如果… 就…,否则如果… 就…,再否则… 就…” 的逻辑。其结构

  • if:必须有,用于判断第一个条件,条件为 True 时执行其代码块。
  • elif:可选,可多个,用于判断 “其他条件”,只有前面的 if/elif 条件都不满足时才会判断。
  • else:可选,只有一个,用于 “所有前面条件都不满足” 的情况,无需写条件。

(2)语法格式

基础语法

# 注意:条件后要加冒号 :,代码块要缩进(通常4个空格)
if 条件1:
    # 条件1为True时执行的代码
    代码块1
elif 条件2:
    # 条件1为False,且条件2为True时执行的代码
    代码块2
elif 条件3:
    # 前面条件都False,条件3为True时执行的代码
    代码块3
else:
    # 所有前面条件都False时执行的代码
    代码块4

实战示例(判断成绩等级)

这是最常见的应用场景,能直观体现分支逻辑:

score = 85  # 定义成绩变量

if score >= 90:
    print("优秀")  # 分数≥90时执行
elif score >= 80:
    print("良好")  # 分数<90但≥80时执行
elif score >= 60:
    print("及格")  # 分数<80但≥60时执行
else:
    print("不及格")  # 分数<60时执行

# 输出结果:良好

(3)关键细节说明

  • 缩进是核心:Python 不靠大括号 {} 区分代码块,而是靠缩进(4 个空格 / 1 个 Tab),缩进错误会直接报错。
  • 条件判断顺序:程序会从上到下依次判断条件,只要某个条件为 True,执行对应的代码块后就会跳过后面所有 elif/else
  • elif 和 else 不能单独使用:必须跟在 if 后面,且 else 必须在最后。
  • 简化写法(单条件) :如果只有一个条件,可只用 if,不用 elif/else
age = 18
if age >= 18:
    print("已成年")  # 输出:已成年
  1. 比较运算符

(1)核心概念: 什么是比较运算符?

比较运算符也叫关系运算符,用来判断两个值之间的 “关系”(相等、不等、大小等),运算结果永远是布尔值True 真 / False 假),这是它最核心的特点。

(2)比较运算符的具体说明

运算符名称作用示例结果
==等于判断左右两边值是否完全相等5 == 5TRUE
!=不等于判断左右两边值是否不相等5 != 3TRUE
大于判断左边值是否大于右边值7 > 9FALSE
<小于判断左边值是否小于右边值7 < 9TRUE
>=大于等于判断左边值是否≥右边值(满足其一即可)8 >= 8TRUE
<=小于等于判断左边值是否≤右边值(满足其一即可)8 <= 7FALSE
is身份运算符(是)判断两个对象是否指向同一个内存地址a=10; b=a; a is bTRUE
is not身份运算符(不是)判断两个对象是否指向不同内存地址a=10; b=10.0; a is not bTRUE
in成员运算符(存在)判断元素是否在可迭代对象(列表 / 字符串等)中'a' in 'abc' / 5 in [1,2,3]True / False
not in成员运算符(不存在)判断元素是否不在可迭代对象中6 not in [1,2,3]TRUE

(3)实际代码示例

# 定义两个测试变量
a = 10
b = 5

# 1. 等于 (==):判断a和b是否相等
print(f"a == b: {a == b}")  # 输出:a == b: False

# 2. 不等于 (!=):判断a和b是否不相等
print(f"a != b: {a != b}")  # 输出:a != b: True

# 3. 大于 (>):判断a是否大于b
print(f"a > b: {a > b}")    # 输出:a > b: True

# 4. 小于 (<):判断a是否小于b
print(f"a < b: {a < b}")    # 输出:a < b: False

# 5. 大于等于 (>=):判断a是否大于或等于b
print(f"a >= b: {a >= b}")  # 输出:a >= b: True
print(f"5 >= 5: {5 >= 5}")  # 输出:5 >= 5: True(等于的情况也返回True)

# 6. 小于等于 (<=):判断a是否小于或等于b
print(f"a <= b: {a <= b}")  # 输出:a <= b: False
print(f"5 <= 5: {5 <= 5}")  # 输出:5 <= 5: True(等于的情况也返回True)
  1. 逻辑运算符

(1)核心概念: 什么是逻辑运算符?

逻辑运算符(and、or、not)是用来组合或修改布尔条件的工具,最终返回布尔值(True/False)或特殊的 “短路求值” 结果,是实现复杂条件判断的基础,常与 if/elif/else、while 等语句结合使用。

(2) 逻辑运算符 的具体说明

运算符名称作用说明优先级示例结果
and逻辑与所有条件都为 True 时,结果才为 True; 只要有一个 False,结果为 FalseTrue and FalseFALSE
or逻辑或只要有一个条件为 True,结果就为 True; 所有条件都为 False 时,结果为 FalseTrue or FalseTRUE
not逻辑非取反,True 变 False,False 变 Truenot TrueFALSE

(3)具体细节说明

A. and:多条件需同时满足,一假则假,支持短路求值(遇 False 即停);

# 第一个条件10>20False,直接返回False,不会执行后面的print
result = (10>20) and print("不会执行")
print(result)  # 输出:False

# 所有条件都为True,才会执行全部判断并返回最后一个Trueresult = (5>3) and (8<10) and print("会执行")
print(result)  # 先输出"会执行",再输出:None(因为print返回None

B. or:多条件满足其一即可,一真则真,支持短路求值(遇 True 即停);

# 第一个条件5>3True,直接返回True,不会执行后面的print
result = (5>3) or print("不会执行")
print(result)  # 输出:True

# 所有条件都为False,才会执行全部判断并返回最后一个Falseresult = (10<0) or (8>20) or print("会执行")
print(result)  # 先输出"会执行",再输出:None

C. not:单条件取反,无短路求值,优先级最高;

is_login = False
# 未登录(not is_login为True)时,提示登录
if not is_login:
    print("请先登录后再操作")  # 输出:请先登录后再操作

content = ""
# 输入内容为空(not content为True)时,提示输入
if not content:
    print("请输入有效内容")  # 输出:请输入有效内容

score = 50
# 成绩不在60~100范围内(取反),提示不及格
if not (score >= 60 and score <= 100):
    print("成绩不及格")  # 输出:成绩不及格

D. 特殊情况:非布尔值的逻辑运算

非布尔值参与运算时,返回原始值而非布尔值,0 / 空值为 False,非 0 / 非空为 True;

  • 假值对象:0''[]{}NoneFalse等;
  • 真值对象:非空字符串 / 列表 / 字典、非 0 数字、True等。
# and:返回第一个假值对象;若全为真,返回最后一个真值对象
print(10 and 20)    # 20(全真,返回最后一个)
print(0 and 20)     # 0(第一个假值,返回)
print('a' and '')   # ''(第二个假值,返回)

# or:返回第一个真值对象;若全为假,返回最后一个假值对象
print(0 or 20)      # 20(第一个真值,返回)
print('' or 'b')    # 'b'(第一个真值,返回)
print([] or {})     # {}(全假,返回最后一个)

# not:始终返回布尔值
print(not 0)        # True
print(not 'abc')    # False

E. 逻辑运算符的优先级

使用多个逻辑运算符时,优先级从高到低为:not > and > or,建议用括号()明确优先级,避免出错

# 优先级:not > and > or
# 原逻辑:(not 5>3) and (8<10) or (10>20) → False and True or False → False
result = not 5>3 and 8<10 or 10>20
print(result)  # 输出:False

# 加括号明确优先级,逻辑更清晰
result = not ((5>3 and 8<10) or 10>20) → not (True or False) → False
print(result)  # 输出:False

🎨 课后练习


【考核问题】

  • 能说出 Python 有哪些基本数据类型

  • 能熟练写 if-elif-else 结构

  • 能处理简单的类型转换

  • 能熟练编写 if-elif-else 多分支结构,完成 “成绩等级判断”“闰年判断” 等经典场景

  • 能熟练使用比较运算符和逻辑运算符

【通关自测】

实操题1:基础版 - 成绩等级判断

需求

  1. 提示用户输入一个成绩(可能是整数 / 小数,如 85、92.5);

  2. 先校验输入是否为有效数字(非数字则提示 “输入错误,请输入有效成绩”);

  3. 再判断成绩范围:

    1. 90 ≤ 成绩 ≤ 100 → 输出 “优秀”;

    2. 80 ≤ 成绩 <90 → 输出 “良好”;

    3. 60 ≤ 成绩 <80 → 输出 “及格”;

    4. 0 ≤ 成绩 <60 → 输出 “不及格”;

    5. 成绩 <0 或 成绩> 100 → 输出 “成绩无效,需在 0-100 之间”。

实操题 2:进阶版 - 个人信息校验工具

需求

  1. 依次提示用户输入:姓名(字符串)、年龄(数字)、手机号(字符串);

  2. 完成以下校验逻辑(全部通过则输出 “信息校验通过”,否则输出对应错误):

    1. 姓名:非空且长度≥2 → 否则 “姓名无效,需至少 2 个字符”;
    2. 年龄:18 ≤ 年龄 ≤ 120 → 否则 “年龄无效,需在 18-120 之间”;
    3. 手机号:长度 = 11 且全部为数字 → 否则 “手机号无效,需为 11 位数字”;
  3. 额外要求:

    1. 年龄输入非数字时,提示 “年龄需输入数字”;

    2. 逻辑运算符必须使用 and/or/not 组合条件;

    3. 变量命名符合 Python 规范(如user_name/user_age)。

实操题 3:综合版 - 购物优惠计算器

需求

  1. 提示用户输入:消费金额(数字,如 199.9)、会员等级(1/2/3,数字)、是否有优惠券(y/n);

  2. 计算最终应付金额,优惠规则如下(需用逻辑运算符组合条件):

    1. 基础规则:消费金额≥0,否则提示 “金额无效”;

    2. 会员优惠:

      • 1 级会员:无优惠;
      • 2 级会员:消费≥100 减 10 元,消费 < 100 减 5 元;
      • 3 级会员:消费≥200 减 30 元,消费 < 200 减 15 元;
    3. 优惠券叠加:有优惠券(y)则在会员优惠后再减 8 元(最终金额≥0);

    4. 非数字金额 / 非 1-3 级会员 / 非 y/n 优惠券,均提示对应错误;

  3. 最终输出:“原价 XX 元,优惠后应付 XX 元”(金额保留 1 位小数)。