Python3 数据类型转换:让数据自由流动
我是陈默,一个正拼命上岸的码农。
你有没有遇到过这种情况?
从用户那里拿到一个数字,想用它做计算,结果程序报错。
为什么?
因为用户输入的是字符串 "25",不是数字 25。
它们看起来一样,但对计算机来说,完全是两回事。
今天我们来聊聊数据类型转换——让数据在不同类型之间自由切换。
1. 先认识几种基本类型
在开始转换之前,先快速回顾一下 Python 的几种基本数据类型:
# 整数 intage = 25print(type(age)) # 输出: <class 'int'># 浮点数 float(小数)price = 19.9print(type(price)) # 输出: <class 'float'># 字符串 strname = "陈默"print(type(name)) # 输出: <class 'str'># 布尔值 boolis_student = Trueprint(type(is_student)) # 输出: <class 'bool'>
type() 函数可以告诉你,一个变量是什么类型。
2. 字符串转数字:最常用的转换
这是最常见的场景:从用户输入或文件读取的数据,默认都是字符串。
字符串转整数:int()
# 正常转换num_str = "123"num_int = int(num_str)print(num_int) # 输出: 123print(type(num_int)) # 输出: <class 'int'># 可以做数学运算了print(num_int + 10) # 输出: 133
如果字符串不是纯数字呢?
# 包含小数点,转整数会报错# int("12.5") # 这行会报错!# 正确做法:先转浮点数,再转整数num = int(float("12.5"))print(num) # 输出: 12# 包含非数字字符,直接报错# int("abc") # 这行会报错!# int("12a") # 这行也会报错!
字符串转浮点数:float()
# 整数字符串num1 = float("100")print(num1) # 输出: 100.0print(type(num1)) # 输出: <class 'float'># 小数字符串num2 = float("3.14")print(num2) # 输出: 3.14# 科学计数法也行num3 = float("1.5e2") # 1.5 × 10²print(num3) # 输出: 150.0
3. 数字转字符串:拼接必备
当你需要把数字和文字拼在一起显示时,必须先转成字符串。
用 str()
age = 25score = 95.5# 直接拼接会报错# result = "年龄:" + age # 报错!# 先转成字符串result = "年龄:" + str(age)print(result) # 输出: 年龄:25result2 = "分数:" + str(score)print(result2) # 输出: 分数:95.5
另一个场景:获取数字的长度
num = 12345# 数字没有长度,会报错# print(len(num)) # 报错!# 转成字符串就可以print(len(str(num))) # 输出: 5
4. 整数和浮点数互转
浮点数转整数:int()
# 直接截断小数部分(不是四舍五入)print(int(3.7)) # 输出: 3print(int(3.2)) # 输出: 3print(int(-3.7)) # 输出: -3(往零的方向截断)# 从浮点数字符串转整数,要分两步print(int(float("3.14"))) # 输出: 3
注意:int() 是直接砍掉小数部分,不是四舍五入。
如果要四舍五入:
# 用 round() 函数print(round(3.4)) # 输出: 3print(round(3.5)) # 输出: 4print(round(3.6)) # 输出: 4# 保留小数位数print(round(3.14159, 2)) # 输出: 3.14
整数转浮点数:float()
num = 10result = float(num)print(result) # 输出: 10.0print(type(result)) # 输出: <class 'float'>
5. 转布尔值:bool()
任何数据都可以转成布尔值。这对条件判断很重要。
什么情况是 False?
# 这些都会转成 Falseprint(bool(0)) # 输出: Falseprint(bool(0.0)) # 输出: Falseprint(bool("")) # 输出: False(空字符串)print(bool(None)) # 输出: False(空值)# 其他都是 Trueprint(bool(1)) # 输出: Trueprint(bool(-1)) # 输出: True(负数也是 True)print(bool(0.1)) # 输出: Trueprint(bool(" ")) # 输出: True(空格也是字符)print(bool("False")) # 输出: True(字符串 "False" 是 True!)
记住: 只有 0、0.0、空字符串 ""、None 是 False,其他都是 True。
6. 实战场景:用户输入
这是最经典的应用场景。
用户输入的数字,默认是字符串
# 模拟用户输入user_input = "25"# 直接用字符串做运算# result = user_input + 5 # 报错!不能把字符串和数字相加# 正确做法:先转类型age = int(user_input)result = age + 5print(result) # 输出: 30
完整示例:计算器
# 模拟用户输入两个数字num1_str = "10"num2_str = "3"# 转换类型num1 = float(num1_str)num2 = float(num2_str)# 计算print(f"加法:{num1 + num2}") # 输出: 加法:13.0print(f"减法:{num1 - num2}") # 输出: 减法:7.0print(f"乘法:{num1 * num2}") # 输出: 乘法:30.0print(f"除法:{num1 / num2}") # 输出: 除法:3.333...
7. 常见错误和解决方法
错误 1:转换失败
# 字符串不是有效数字# int("hello") # ValueError!# float("12.5.6") # ValueError!
解决方法: 转换前先检查,或者用 try-except(后面会讲)。
错误 2:精度问题
# 浮点数计算可能有精度误差result = 0.1 + 0.2print(result) # 输出: 0.30000000000000004# 解决方法:四舍五入print(round(result, 1)) # 输出: 0.3
错误 3:类型混淆
# 字符串 "123" 和数字 123 不相等print("123" == 123) # 输出: False# 转换后才相等print(int("123") == 123) # 输出: True
8. 快速参考表
最后
数据类型转换看起来简单,但它是你写代码时每天都在用的技能。
记住三点:
我的建议:
把今天这些代码敲一遍,尝试自己构造一些转换场景。比如:把你的年龄转成字符串,再转回来。
编程这件事,动手就懂了。
今天就到这里。
我是陈默,我们下期再见。
如果你觉得这篇文章有帮助,欢迎关注我。我会持续分享 Python 学习的干货。