第二阶段:学会基本功 —— 数据与运算


第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)

常见关键字:ifelseforwhiledefclassreturnTrueFalseNone 等。

命名最佳实践
风格示例使用场景
小写下划线my_nametotal_score普通变量、函数名
全大写下划线MAX_SIZEPI常量(不打算修改的值)
大驼峰MyClassStudentInfo类名(后面会学到)

好名字 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 + 38
-减法5 - 32
*乘法5 * 315
/除法5 / 31.6667
//整除5 // 31
%取余5 % 32
**幂运算5 ** 3125
运算优先级

和数学一样:先乘除,后加减。有括号先算括号。

# 先乘后加
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}"

课后练习

  1. 交换两个变量的值:不用第三个变量,交换 a 和 b 的值(提示:Python 有个很酷的写法)
  2. 秒数转换器:输入一个秒数,转换成"X小时X分钟X秒"的格式
  3. 字符串反转检测器:判断一个单词是不是"回文"(正着读和反着读一样,比如 “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}' 不是回文。")

📚 下一阶段预告:学会条件判断和循环,让你的程序变得更"聪明"!

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐