Python变量和数据类型:int、str、bool,一篇文章把数据类型讲透
Python变量和数据类型:int、str、bool,一篇文章把数据类型讲透
上一篇文章我们写了一个猜数字游戏,用到了
input()和if判断。这篇文章专门讲 Python 的数据类型——你知道为什么1 + "2"会报错,而1 + int("2")就正常吗?看完这篇你就明白了。
一句话概括
这篇文章解决一个问题:搞清楚 Python 有哪些数据类型,以及它们之间怎么转换。
为什么需要数据类型?
计算机里的数据有很多种——数字、文字、真假判断。它们处理方式不同,存储占用的空间也不同。
Python 是动态类型语言,这意味着:
- 你不需要提前声明变量的类型
- Python 会根据你赋的值自动判断类型
- 同一个变量可以赋不同类型的值(但不建议这么做)
x = 10 # int
x = "hello" # 现在是 str
Python 内置的数据类型
Python 有很多内置数据类型,但最常用的就这几种:
| 类型 | 说明 | 示例 |
|---|---|---|
int |
整数 | 10, -3, 0 |
float |
小数 | 3.14, -0.5, 2.0 |
str |
字符串 | "hello", 'python' |
bool |
布尔值 | True, False |
list |
列表 | [1, 2, 3] |
dict |
字典 | {"name": "小明"} |
int:整数
整数就是没有小数点的数字。
a = 10 # 十进制
b = 0b1010 # 二进制,等于10
c = 0o12 # 八进制,等于10
d = 0xA # 十六进制,等于10
平时写代码直接用十进制就行,上面这些了解即可。
整数的大小: Python 3 的 int 是** arbitrary-precision** 的,意思是没有大小限制。不管多大的数,Python 都能存——只要你的内存够用。
big_number = 10 ** 100 # 10的100次方
print(big_number) # 可以正常打印
float:小数
小数在 Python 里叫 float(浮点数)。
pi = 3.14159
price = 19.9
negative = -0.5
注意事项:浮点数精度问题
a = 0.1 + 0.2
print(a) # 输出 0.30000000000000004,不是 0.3!
这是因为浮点数在计算机里是用二进制存储的,有些十进制小数无法精确表示。
解决方案:如果需要精确计算,用 decimal 模块:
from decimal import Decimal
a = Decimal('0.1') + Decimal('0.2')
print(a) # 输出 0.3
注意:字符串参数要加引号,不要写 Decimal(0.1),那样还是会引入浮点误差。
str:字符串
字符串就是用引号包起来的文本。
s1 = "Hello"
s2 = 'Python'
s3 = """这是
一个多行
字符串"""
字符串的基本操作
拼接:
first = "Hello"
second = "World"
print(first + " " + second) # Hello World
重复:
print("-" * 20) # --------------------
长度:
s = "Python"
print(len(s)) # 6
索引和切片:
s = "Python"
print(s[0]) # P(第一个字符)
print(s[-1]) # n(最后一个字符)
print(s[0:3]) # Pyt(从0到2,包括0不包括3)
print(s[::2]) # Pto(每隔一个取一个)
print(s[::-1]) # nohtyP(反转字符串)
注意:索引从 0 开始,不是从 1 开始。这是编程语言的惯例。
字符串常用方法
s = " Hello, Python! "
s.strip() # "Hello, Python!"(去首尾空格)
s.lower() # " hello, python! "(转小写)
s.upper() # " HELLO, PYTHON! "(转大写)
s.replace("Python", "World") # " Hello, World! "
s.split(",") # [" Hello", " Python! "]
s.count("o") # 2(统计某个字符出现次数)
s.find("Python") # 7(找位置,没找到返回-1)
判断类方法
s = "hello123"
s.isdigit() # False(是否全是数字)
s.isalpha() # False(是否全是字母)
s.isalnum() # True(是否全是字母或数字)
s.startswith("hello") # True(是否以某字符串开头)
s.endswith("3") # True(是否以某字符串结尾)
bool:布尔值
布尔值只有两个:True(真)和 False(假)。
布尔值的来源:
布尔值通常来自比较运算:
print(10 > 3) # True
print(10 == 3) # False(注意是两个等号)
print(10 != 3) # True(不等于)
print(3 <= 3) # True(小于等于)
布尔值参与运算:
print(True + True) # 2(True=1, False=0)
print(True + False) # 1
类型转换
这是最重要的部分。
为什么要类型转换?
因为不同类型之间不能直接运算:
print(1 + "2") # 报错!TypeError
print(str(1) + "2") # "12"(转成字符串再拼接)
print(1 + int("2")) # 3(转成整数再相加)
常用的类型转换
转整数 int():
int(3.14) # 3(直接截断小数部分,不是四舍五入)
int("123") # 123
int(True) # 1
int("hello") # 报错!ValueError
转小数 float():
float(3) # 3.0
float("3.14") # 3.14
float("123") # 123.0
float(True) # 1.0
转字符串 str():
str(123) # "123"
str(3.14) # "3.14"
str(True) # "True"
转布尔值 bool():
这个比较特殊,以下情况转成 False:
bool(0) # False
bool(0.0) # False
bool("") # False(空字符串)
bool([]) # False(空列表)
bool(None) # False
bool(False) # False
除此之外都是 True:
bool(1) # True
bool("hello") # True
bool([1, 2]) # True
实战:类型转换计算器
写一个综合性的计算器,展示类型转换的用法:
print("=" * 30)
print("简易计算器")
print("=" * 30)
# 获取用户输入
num1 = input("请输入第一个数字:")
num2 = input("请输入第二个数字:")
operator = input("请输入运算符(+、-、*、/):")
# 转换类型
num1 = float(num1) # 先转成小数,兼容整数和小数
num2 = float(num2)
# 根据运算符计算
if operator == "+":
result = num1 + num2
elif operator == "-":
result = num1 - num2
elif operator == "*":
result = num1 * num2
elif operator == "/":
if num2 == 0:
print("错误:除数不能为0!")
exit()
result = num1 / num2
else:
print("错误:不支持的运算符!")
exit()
# 输出结果,如果是整数就转成int显示
if result == int(result):
print(f"结果:{int(result)}")
else:
print(f"结果:{result}")
运行示例:
==============================
简易计算器
==============================
请输入第一个数字:10
请输入第二个数字:3
请输入运算符(+、-、*、/):/
结果:3.3333333333333335
类型查询
有时候需要检查一个变量的类型,用 type() 函数:
x = 10
y = 3.14
z = "hello"
b = True
print(type(x)) # <class 'int'>
print(type(y)) # <class 'float'>
print(type(z)) # <class 'str'>
print(type(b)) # <class 'bool'>
用 isinstance() 判断是否是某种类型:
x = 10
print(isinstance(x, int)) # True
print(isinstance(x, (int, float))) # True(int或float都行)
常见问题FAQ
Q1:"1 + 2" 和 1 + 2 有什么区别?
print("1 + 2") # 打印字符串 "1 + 2",原样输出
print(1 + 2) # 打印数字 3
前者是字符串,后者是数学运算。
Q2:为什么 10 / 3 结果是小数?
Python 3 里,/ 总是返回浮点数:
print(10 / 3) # 3.3333333333333335
print(10 // 3) # 3(整除,向下取整)
print(10 % 3) # 1(取余)
Q3:"hello"[10] 会报错吗?
会。索引超出范围会报 IndexError。
s = "hello"
print(s[10]) # IndexError: string index out of range
Q4:字符串和数字比较会怎样?
print("10" > "9") # False!字符串比较是按ASCII码比较的,"1"<"9"
print(10 > 9) # True!数字比较就是数值比较
教训:字符串和数字比较没有意义,要比较就先转类型。
写在最后
数据类型是编程的基础中的基础。这篇文章讲了:
- int / float:数字
- str:字符串及其操作
- bool:真假判断
- 类型转换:int() / float() / str() / bool()
下一篇文章讲运算符——算术运算、比较运算、逻辑运算,一个计算器全搞定。
参考资料:
更多推荐



所有评论(0)