跳到主要内容

变量与数据类型

理解Python中的数据存储方式

变量基础

什么是变量

变量 是用来存储数据的容器,可以理解为"贴了标签的盒子"。

# 创建变量
name = "张三" # 盒子里放了"张三",贴上name标签
age = 25 # 盒子里放了25,贴上age标签
is_student = True # 盒子里放了True,贴上is_student标签

变量赋值

# 基本赋值
x = 10

# 多变量赋值
a, b, c = 1, 2, 3

# 同值赋值
x = y = z = 0

# 变量交换
a, b = b, a # Python特有的交换方式

变量命名

# 命名规则
# 1. 只能包含字母、数字、下划线
# 2. 不能以数字开头
# 3. 区分大小写
# 4. 不能使用Python关键字

# 推荐命名风格(snake_case)
user_name = "张三"
total_count = 100
is_valid = True

# Python关键字(不能用作变量名)
# False, True, None, and, or, not, if, else, elif
# for, while, break, continue, return, def, class...

# 查看所有关键字
import keyword
print(keyword.kwlist)

数据类型

基本数据类型

# 整数 int
age = 25
count = -10
big_num = 1_000_000 # 可以用下划线分隔

# 浮点数 float
price = 19.99
pi = 3.14159
scientific = 1.5e10 # 科学计数法

# 字符串 str
name = "张三"
message = 'Hello, World!'
multi_line = """
这是
多行
字符串
"""

# 布尔值 bool
is_active = True
is_deleted = False

# 空值 None
result = None

查看数据类型

# type() 函数
print(type(25)) # <class 'int'>
print(type(3.14)) # <class 'float'>
print(type("Hello")) # <class 'str'>
print(type(True)) # <class 'bool'>
print(type(None)) # <class 'NoneType'>

# isinstance() 检查类型
print(isinstance(25, int)) # True
print(isinstance("Hi", str)) # True

数字类型

整数 int

# 整数运算
a = 10
b = 3

print(a + b) # 13 加法
print(a - b) # 7 减法
print(a * b) # 30 乘法
print(a / b) # 3.333... 除法(返回浮点数)
print(a // b) # 3 整除(取整)
print(a % b) # 1 取余(模运算)
print(a ** b) # 1000 幂运算

# 不同进制
decimal = 255 # 十进制
binary = 0b11111111 # 二进制
octal = 0o377 # 八进制
hexadecimal = 0xFF # 十六进制

浮点数 float

# 浮点数
pi = 3.14159
e = 2.71828

# 精度问题
print(0.1 + 0.2) # 0.30000000000000004

# 解决精度问题
from decimal import Decimal
print(Decimal('0.1') + Decimal('0.2')) # 0.3

# 四舍五入
print(round(3.14159, 2)) # 3.14

数学函数

import math

# 常用函数
print(abs(-5)) # 5 绝对值
print(max(1, 5, 3)) # 5 最大值
print(min(1, 5, 3)) # 1 最小值
print(sum([1,2,3])) # 6 求和
print(pow(2, 3)) # 8 幂运算

# math模块
print(math.sqrt(16)) # 4.0 平方根
print(math.ceil(3.2)) # 4 向上取整
print(math.floor(3.8)) # 3 向下取整
print(math.pi) # 3.14159... 圆周率

字符串类型

字符串创建

# 单引号和双引号
s1 = 'Hello'
s2 = "Hello"

# 包含引号
s3 = "He said 'Hi'"
s4 = 'He said "Hi"'
s5 = "He said \"Hi\"" # 转义

# 多行字符串
s6 = """
这是第一行
这是第二行
这是第三行
"""

# 原始字符串(不转义)
path = r"C:\Users\name" # 不转义\

字符串操作

s = "Hello, World!"

# 长度
print(len(s)) # 13

# 索引(从0开始)
print(s[0]) # H
print(s[-1]) # !(负索引从末尾开始)

# 切片
print(s[0:5]) # Hello
print(s[7:]) # World!
print(s[:5]) # Hello
print(s[::2]) # Hlo ol!(步长为2)
print(s[::-1]) # !dlroW ,olleH(反转)

# 查找
print(s.find("World")) # 7(返回索引)
print(s.find("Python")) # -1(未找到)
print("World" in s) # True

# 替换
print(s.replace("World", "Python")) # Hello, Python!

# 分割
print(s.split(",")) # ['Hello', ' World!']

# 连接
words = ["Hello", "World"]
print(" ".join(words)) # Hello World

字符串方法

s = "  Hello, World!  "

# 大小写转换
print(s.upper()) # " HELLO, WORLD! "
print(s.lower()) # " hello, world! "
print(s.title()) # " Hello, World! "
print(s.capitalize()) # " hello, world! "

# 去空格
print(s.strip()) # "Hello, World!"
print(s.lstrip()) # "Hello, World! "
print(s.rstrip()) # " Hello, World!"

# 判断
print(s.startswith(" H")) # True
print(s.endswith("! ")) # True
print("123".isdigit()) # True
print("abc".isalpha()) # True

字符串格式化

name = "小明"
age = 18
score = 95.5

# f-string(推荐)
print(f"姓名:{name},年龄:{age},分数:{score}")

# 格式化数字
print(f"分数:{score:.1f}") # 保留1位小数
print(f"年龄:{age:03d}") # 用0填充到3位

# 对齐
print(f"{'左对齐':<10}") # 左对齐,宽度10
print(f"{'右对齐':>10}") # 右对齐
print(f"{'居中':^10}") # 居中

布尔类型

布尔值

# True 和 False
is_active = True
is_deleted = False

# 布尔运算
print(True and False) # False
print(True or False) # True
print(not True) # False

# 比较运算返回布尔值
print(5 > 3) # True
print(5 == 5) # True
print(5 != 3) # True

布尔转换

# 转为布尔值
print(bool(1)) # True
print(bool(0)) # False
print(bool("Hello")) # True
print(bool("")) # False
print(bool([1, 2])) # True
print(bool([])) # False
print(bool(None)) # False

# 假值(False)
# 0, 0.0, "", [], {}, (), None, False
# 其他都是真值(True)

类型转换

显式转换

# 转整数
print(int("123")) # 123
print(int(3.7)) # 3(截断,不是四舍五入)
print(int(True)) # 1

# 转浮点数
print(float("3.14")) # 3.14
print(float(10)) # 10.0

# 转字符串
print(str(123)) # "123"
print(str(3.14)) # "3.14"
print(str(True)) # "True"

# 转布尔
print(bool(1)) # True
print(bool("")) # False

类型转换注意事项

# 字符串转数字必须是有效格式
int("123") # OK
# int("12.3") # ValueError
# int("abc") # ValueError

# 可以先检查
s = "123"
if s.isdigit():
num = int(s)

动态类型

Python是动态类型语言

# 变量可以改变类型
x = 10 # int
print(type(x))
x = "Hello" # str
print(type(x))
x = [1, 2, 3] # list
print(type(x))

类型提示(Type Hints)

# Python 3.5+ 支持类型提示
# 仅供参考,不强制执行

def greet(name: str) -> str:
return f"Hello, {name}!"

age: int = 25
price: float = 19.99
is_active: bool = True

练习

练习1:类型判断

# 打印以下变量的类型
a = 42
b = 3.14
c = "Python"
d = True
e = None

# 参考答案
print(type(a)) # <class 'int'>
print(type(b)) # <class 'float'>
print(type(c)) # <class 'str'>
print(type(d)) # <class 'bool'>
print(type(e)) # <class 'NoneType'>

练习2:字符串处理

# 给定字符串,完成以下操作
s = " Python Programming "
# 1. 去除首尾空格
# 2. 转为大写
# 3. 统计字符'o'出现次数
# 4. 将'Python'替换为'Java'

# 参考答案
print(s.strip()) # Python Programming
print(s.upper()) # PYTHON PROGRAMMING
print(s.count('o')) # 2
print(s.replace('Python', 'Java')) # Java Programming

练习3:类型转换

# 计算用户输入的两个数之和
num1 = input("请输入第一个数:")
num2 = input("请输入第二个数:")

# 参考答案
result = float(num1) + float(num2)
print(f"和为:{result}")

本章小结

  1. 变量:存储数据的容器,无需声明类型
  2. 数字类型:int(整数)、float(浮点数)
  3. 字符串:str,丰富的操作方法
  4. 布尔值:True / False
  5. 类型转换:int()、float()、str()、bool()
  6. 动态类型:变量类型可以改变

下一步

了解了数据类型,下一章学习运算符与表达式。

→ 继续阅读:15-运算符与表达式