Python 入门第二阶段:学会基本功 —— 数据与运算
·
第二阶段:学会基本功 —— 数据与运算
第4章:数据的"盒子" —— 变量
4.1 什么是变量?—— 给数据取个名字
想象你有一堆收纳盒,每个盒子上面都贴着标签:
- 📦 标签写着"姓名"的盒子里放着 →
"小明" - 📦 标签写着"年龄"的盒子里放着 →
18 - 📦 标签写着"身高"的盒子里放着 →
1.75
在 Python 中,变量就是这些"贴了标签的盒子",用来存放数据。
# 创建变量,就像给盒子贴标签并放入东西
name = "小明" # 盒子"name"里放了"小明"
age = 18 # 盒子"age"里放了 18
height = 1.75 # 盒子"height"里放了 1.75
# 使用变量,就是把盒子里的东西拿出来用
print(name) # 输出:小明
print(age) # 输出:18
print(height) # 输出:1.75
变量可以随时更换内容:
mood = "开心"
print(mood) # 输出:开心
mood = "困了" # 把盒子里的内容换掉
print(mood) # 输出:困了
变量之间可以互相赋值:
a = 10
b = a # 把 a 的值复制一份给 b
print(a) # 输出:10
print(b) # 输出:10
a = 20 # 改变 a 的值,不影响 b
print(a) # 输出:20
print(b) # 输出:10
4.2 变量命名规则
给变量起名字也有规矩,不是随便起的:
✅ 合法的变量名
name = "小明" # 纯字母
age2 = 18 # 字母 + 数字
my_name = "小明" # 用下划线连接(推荐!)
_private = "秘密" # 以下划线开头
MAX_VALUE = 100 # 全大写(通常表示常量)
❌ 不合法的变量名
2name = "小明" # ❌ 不能以数字开头
my-name = "小明" # ❌ 不能用减号(会被当成减法)
my name = "小明" # ❌ 不能有空格
class = "Python" # ❌ 不能用 Python 的关键字(保留字)
Python 关键字(保留字)—— 这些名字被 Python 自己占用了
# 查看所有关键字
import keyword
print(keyword.kwlist)
常见关键字:if、else、for、while、def、class、return、True、False、None 等。
命名最佳实践
| 风格 | 示例 | 使用场景 |
|---|---|---|
| 小写下划线 | my_name、total_score | 普通变量、函数名 |
| 全大写下划线 | MAX_SIZE、PI | 常量(不打算修改的值) |
| 大驼峰 | MyClass、StudentInfo | 类名(后面会学到) |
好名字 vs 坏名字:
# ❌ 坏名字——看不出是啥意思
a = 18
b = "小明"
x = 1.75
# ✅ 好名字——一看就懂
age = 18
student_name = "小明"
height = 1.75
4.3 变量的类型
Python 中的数据分为几种主要类型:
# 整数(int)—— 没有小数点的数字
age = 18
count = -5
big_number = 1000000
# 浮点数(float)—— 有小数点的数字
height = 1.75
price = 9.99
pi = 3.14159
# 字符串(str)—— 文字内容,要用引号包裹
name = "小明"
greeting = '你好啊' # 单引号也可以
address = "北京市朝阳区"
# 布尔值(bool)—— 只有两个值:True 和 False
is_student = True
is_adult = False
用 type() 函数查看数据类型
print(type(18)) # <class 'int'>
print(type(3.14)) # <class 'float'>
print(type("Hello")) # <class 'str'>
print(type(True)) # <class 'bool'>
age = 18
print(type(age)) # <class 'int'>
类型转换 —— 数据类型之间的"变身"
# 字符串 → 整数
num_str = "123"
num_int = int(num_str)
print(num_int + 1) # 输出:124
# 字符串 → 浮点数
price_str = "9.99"
price_float = float(price_str)
print(price_float * 2) # 输出:19.98
# 数字 → 字符串
age = 18
age_str = str(age)
print("我今年" + age_str + "岁") # 输出:我今年18岁
# 整数 → 浮点数
num = 10
print(float(num)) # 输出:10.0
# 浮点数 → 整数(会直接砍掉小数部分,不是四舍五入!)
price = 9.99
print(int(price)) # 输出:9(不是10!)
4.4 动手试试 —— 用变量存储你的个人信息
# 用变量存储你的个人信息
my_name = "小明"
my_age = 18
my_height = 1.75
my_weight = 65.5
my_city = "北京"
is_student = True
# 打印个人信息卡
print("=" * 30)
print(" 个人信息卡")
print("=" * 30)
print(f"姓名:{my_name}")
print(f"年龄:{my_age} 岁")
print(f"身高:{my_height} 米")
print(f"体重:{my_weight} 公斤")
print(f"城市:{my_city}")
print(f"是否学生:{'是' if is_student else '否'}")
print("=" * 30)
运行结果:
==============================
个人信息卡
==============================
姓名:小明
年龄:18 岁
身高:1.75 米
体重:65.5 公斤
城市:北京
是否学生:是
==============================
第5章:让电脑算数 —— 运算符
5.1 算术运算符
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(10 ÷ 3 = 3 余 1)
# 幂运算(乘方)
print(2 ** 3) # 输出:8(2的3次方 = 2×2×2)
print(3 ** 2) # 输出:9(3的2次方 = 3×3)
运算符总结表
| 运算符 | 含义 | 示例 | 结果 |
|---|---|---|---|
+ | 加法 | 5 + 3 | 8 |
- | 减法 | 5 - 3 | 2 |
* | 乘法 | 5 * 3 | 15 |
/ | 除法 | 5 / 3 | 1.6667 |
// | 整除 | 5 // 3 | 1 |
% | 取余 | 5 % 3 | 2 |
** | 幂运算 | 5 ** 3 | 125 |
运算优先级
和数学一样:先乘除,后加减。有括号先算括号。
# 先乘后加
print(2 + 3 * 4) # 输出:14(不是20!)
# 用括号改变优先级
print((2 + 3) * 4) # 输出:20
# 幂运算优先级最高
print(2 ** 3 + 1) # 输出:9(先算 2³=8,再 +1)
复合赋值运算符 —— 懒人写法
score = 100
# 这两种写法是等价的:
score = score + 10 # 普通写法
score += 10 # 懒人写法(推荐!)
# 类似的还有:
score -= 5 # 等价于 score = score - 5
score *= 2 # 等价于 score = score * 2
score /= 4 # 等价于 score = score / 4
print(score)
5.2 比较运算符
比较运算符用来"比较"两个值,结果是 True(真)或 False(假)。
print(5 > 3) # True 5 大于 3
print(5 < 3) # False 5 不小于 3
print(5 >= 5) # True 5 大于等于 5
print(5 <= 4) # False 5 不小于等于 4
print(5 == 5) # True 5 等于 5(注意是两个等号!)
print(5 != 3) # True 5 不等于 3
常见错误: 一个 = 是赋值,两个 == 才是比较!
x = 5 # 赋值:把 5 放进 x 这个盒子
x == 5 # 比较:x 是不是等于 5? → True
字符串也可以比较
print("apple" == "apple") # True
print("apple" == "Apple") # False(大小写敏感!)
print("apple" != "banana") # True
print("abc" < "abd") # True(按字典顺序比较)
5.3 逻辑运算符
逻辑运算符用来组合多个条件:
| 运算符 | 含义 | 说明 |
|---|---|---|
and | 而且 | 两个条件都满足才是 True |
or | 或者 | 至少一个条件满足就是 True |
not | 不是 | 把 True 变 False,False 变 True |
age = 20
has_id = True
# and:两个条件都要满足
print(age >= 18 and has_id) # True(年满18且有身份证)
# or:至少一个满足即可
score = 85
print(score >= 90 or score >= 80) # True(虽然不>=90,但>=80)
# not:取反
is_raining = False
print(not is_raining) # True(没在下雨 → 不是在下雨 → True)
实际例子:判断能不能进网吧
age = int(input("请输入你的年龄:"))
has_id = input("你带身份证了吗?(y/n) ") == "y"
if age >= 18 and has_id:
print("欢迎光临!")
elif age >= 18 and not has_id:
print("请带好身份证再来!")
else:
print("未成年人不能进入网吧哦!")
5.4 小项目:简易计算器
# ============================================
# 简易计算器 v1.0
# ============================================
print("=" * 30)
print(" 简易计算器")
print("=" * 30)
# 获取用户输入
num1 = float(input("请输入第一个数:"))
operator = input("请输入运算符(+ - * /):")
num2 = float(input("请输入第二个数:"))
# 根据运算符计算结果
if operator == "+":
result = num1 + num2
elif operator == "-":
result = num1 - num2
elif operator == "*":
result = num1 * num2
elif operator == "/":
if num2 == 0:
print("错误:除数不能为 0!")
result = None
else:
result = num1 / num2
else:
print(f"不支持的运算符:{operator}")
result = None
# 输出结果
if result is not None:
print(f"\n{num1} {operator} {num2} = {result}")
print("=" * 30)
运行效果:
==============================
简易计算器
==============================
请输入第一个数:12.5
请输入运算符(+ - * /):*
请输入第二个数:4
12.5 * 4.0 = 50.0
==============================
第6章:文字的魔法 —— 字符串
6.1 字符串是什么?
字符串就是一串文字,在 Python 中用引号包裹起来:
# 单引号和双引号都可以
name1 = '小明'
name2 = "小红"
# 字符串里面有引号怎么办?
sentence1 = "他说:'你好!'" # 外面用双引号,里面用单引号
sentence2 = '他说:"你好!"' # 外面用单引号,里面用双引号
sentence3 = "他说:\"你好!\"" # 用反斜杠转义
# 三引号:可以写多行文字
poem = """
床前明月光,
疑是地上霜。
举头望明月,
低头思故乡。
"""
print(poem)
6.2 字符串拼接与重复
# 字符串拼接:用 + 号把两个字符串连起来
first_name = "张"
last_name = "三"
full_name = first_name + last_name
print(full_name) # 输出:张三
# 字符串重复:用 * 号重复字符串
print("哈" * 5) # 输出:哈哈哈哈哈
print("-" * 30) # 输出:------------------------------
# 注意:字符串不能和数字直接拼接!
age = 18
# print("我今年" + age + "岁") # ❌ 报错!
print("我今年" + str(age) + "岁") # ✅ 先把数字转成字符串
6.3 字符串切片 —— 像切蛋糕一样截取文字
字符串中的每个字符都有一个编号(从 0 开始):
字符串: P y t h o n
正向编号:0 1 2 3 4 5
反向编号:-6 -5 -4 -3 -2 -1
text = "Python"
# 获取单个字符
print(text[0]) # P(第一个字符,编号从0开始!)
print(text[1]) # y
print(text[-1]) # n(最后一个字符)
print(text[-2]) # o(倒数第二个)
# 切片:获取一段字符 [开始:结束](包含开始,不包含结束)
print(text[0:3]) # Pyt(第0、1、2个字符)
print(text[2:5]) # tho(第2、3、4个字符)
# 省略开始或结束
print(text[:3]) # Pyt(从头开始到第3个之前)
print(text[3:]) # hon(从第3个到末尾)
# 步长:每隔几个取一个
print(text[::2]) # Pto(每隔一个取一个)
# 反转字符串
print(text[::-1]) # nohtyP(倒着来!)
实用示例:
phone = "13812345678"
# 隐藏手机号中间四位
hidden_phone = phone[:3] + "****" + phone[7:]
print(hidden_phone) # 输出:138****5678
# 获取文件扩展名
filename = "照片.jpg"
extension = filename[filename.index("."):]
print(extension) # 输出:.jpg
6.4 常用字符串方法
text = "Hello, Python World!"
# 大小写转换
print(text.upper()) # HELLO, PYTHON WORLD!(全大写)
print(text.lower()) # hello, python world!(全小写)
print(text.title()) # Hello, Python World!(每个单词首字母大写)
print(text.capitalize()) # Hello, python world!(仅第一个字母大写)
# 查找
print(text.find("Python")) # 7(找到了,返回开始位置)
print(text.find("Java")) # -1(没找到,返回-1)
print(text.count("l")) # 3(字母 l 出现了3次)
print("Python" in text) # True(判断是否包含)
# 替换
print(text.replace("Python", "Java")) # Hello, Java World!
print(text.replace("l", "L")) # HeLLo, Python WorLd!
# 去除空格
messy = " Hello "
print(messy.strip()) # "Hello"(去掉两端空格)
print(messy.lstrip()) # "Hello "(去掉左边空格)
print(messy.rstrip()) # " Hello"(去掉右边空格)
# 分割与合并
csv_line = "苹果,香蕉,橘子,西瓜"
fruits = csv_line.split(",") # 按逗号分割成列表
print(fruits) # ['苹果', '香蕉', '橘子', '西瓜']
fruits_str = " | ".join(fruits) # 用 " | " 合并
print(fruits_str) # 苹果 | 香蕉 | 橘子 | 西瓜
# 判断类型
print("123".isdigit()) # True(全是数字)
print("abc".isalpha()) # True(全是字母)
print("abc123".isalnum()) # True(全是字母或数字)
print(" ".isspace()) # True(全是空格)
6.5 f-string 格式化 —— 优雅地把变量塞进句子里
f-string 是 Python 3.6 引入的字符串格式化方式,超级好用!
name = "小明"
age = 18
score = 95.666
# 基本用法:在字符串前加 f,变量用 {} 包裹
print(f"我叫{name},今年{age}岁")
# 输出:我叫小明,今年18岁
# 在 {} 里可以写表达式
print(f"明年我就{age + 1}岁了")
# 输出:明年我就19岁了
# 格式化数字
print(f"分数:{score:.2f}") # 保留2位小数 → 95.67
print(f"分数:{score:.0f}") # 不要小数 → 96
# 对齐和填充
print(f"{'姓名':>10}") # 右对齐,宽度10
print(f"{'姓名':<10}") # 左对齐,宽度10
print(f"{'姓名':^10}") # 居中,宽度10
print(f"{'姓名':*^10}") # 居中,用 * 填充
# 千分位分隔符
big_num = 1234567890
print(f"金额:{big_num:,} 元") # 金额:1,234,567,890 元
# 百分比
rate = 0.856
print(f"正确率:{rate:.1%}") # 正确率:85.6%
对比三种格式化方式
name = "小明"
age = 18
# 方式1:+ 拼接(麻烦,容易出错)
print("我叫" + name + ",今年" + str(age) + "岁")
# 方式2:format() 方法(还行,但不够简洁)
print("我叫{},今年{}岁".format(name, age))
# 方式3:f-string(推荐!简洁又直观)
print(f"我叫{name},今年{age}岁")
6.6 小项目:文字加密器
用凯撒密码来加密文字——把每个字母往后移动指定位数。
# ============================================
# 文字加密器(凯撒密码)
# ============================================
print("=" * 35)
print(" 文字加密器(凯撒密码)")
print("=" * 35)
message = input("请输入要加密的英文消息:")
shift = int(input("请输入位移数(1-25):"))
encrypted = ""
for char in message:
if char.isalpha():
# 判断是大写还是小写
base = ord('A') if char.isupper() else ord('a')
# 加密:字母往后移动 shift 位,超过 z 就从 a 重新开始
encrypted_char = chr((ord(char) - base + shift) % 26 + base)
encrypted += encrypted_char
else:
# 非字母字符保持不变(空格、标点等)
encrypted += char
print(f"\n原始消息:{message}")
print(f"加密消息:{encrypted}")
print(f"密钥(位移数):{shift}")
# 解密演示
print(f"\n--- 解密验证 ---")
decrypted = ""
for char in encrypted:
if char.isalpha():
base = ord('A') if char.isupper() else ord('a')
decrypted_char = chr((ord(char) - base - shift) % 26 + base)
decrypted += decrypted_char
else:
decrypted += char
print(f"解密结果:{decrypted}")
运行效果:
===================================
文字加密器(凯撒密码)
===================================
请输入要加密的英文消息:Hello World
请输入位移数(1-25):3
原始消息:Hello World
加密消息:Khoor Zruog
密钥(位移数):3
--- 解密验证 ---
解密结果:Hello World
本章小结
| 知识点 | 说明 | 示例 |
|---|---|---|
| 变量 | 存放数据的"盒子" | name = "小明" |
| int | 整数类型 | age = 18 |
| float | 浮点数类型 | height = 1.75 |
| str | 字符串类型 | name = "小明" |
| bool | 布尔类型 | is_ok = True |
type() | 查看数据类型 | type(18) → int |
+ - * / | 四则运算 | 10 + 3 → 13 |
// % ** | 整除、取余、幂 | 10 // 3 → 3 |
== != > < | 比较运算符 | 5 == 5 → True |
and or not | 逻辑运算符 | True and False → False |
| 字符串切片 | 截取部分字符串 | "Python"[0:3] → “Pyt” |
| f-string | 格式化字符串 | f"我叫{name}" |
课后练习
- 交换两个变量的值:不用第三个变量,交换 a 和 b 的值(提示:Python 有个很酷的写法)
- 秒数转换器:输入一个秒数,转换成"X小时X分钟X秒"的格式
- 字符串反转检测器:判断一个单词是不是"回文"(正着读和反着读一样,比如 “racecar”)
参考答案:
# 1. 交换变量
a = 10
b = 20
a, b = b, a # Python 的骚操作!
print(a, b) # 输出:20 10
# 2. 秒数转换
total_seconds = int(input("请输入秒数:"))
hours = total_seconds // 3600
minutes = (total_seconds % 3600) // 60
seconds = total_seconds % 60
print(f"{total_seconds}秒 = {hours}小时{minutes}分钟{seconds}秒")
# 3. 回文检测
word = input("请输入一个单词:")
if word == word[::-1]:
print(f"'{word}' 是回文!")
else:
print(f"'{word}' 不是回文。")
📚 下一阶段预告:学会条件判断和循环,让你的程序变得更"聪明"!
更多推荐



所有评论(0)