| Day 2 | 数据类型:int / float / str / bool 与类型转换 |

1 数据类型:int / float / str / bool

是什么?为什么学?

数据类型(data type)就是「数据的种类」。同一个数字 18,是整数;"18" 带引号,就是字符串——看起来一样,性质完全不同。为什么零基础必学?因为类型决定了能对数据做什么:数字能算数,文本能拼接,搞混了程序立刻报错。学会「一眼分辨类型」,是写对代码的第一道门槛。

四种基本类型:

类型名称例子说明
整数int18-3100没有小数点的数字
小数float3.141.75有小数点的数字
字符串str"你好"'Python'用引号包起来的文本
布尔boolTrueFalse只有真和假两种

底层原理

电脑存储数据时,必须知道这块数据是「数字」还是「文本」,因为它们在内存里的存储方式完全不同:数字按二进制数值存,文本按编码表(每个字符对应一个编号)存。Python 是动态类型语言——你不用声明变量是什么类型,Python 会根据你给的值自动判断,并牢牢记住。

术语小词典:动态类型(dynamic typing)就是「Python 自己看人下菜碟」:你赋 18 它就是整数,你赋 "18" 它就是字符串,不需要你提前声明。

生活类比

类型就像快递箱上的分类标签:标着「易碎品」的箱子(数字)要小心搬运,标着「书籍」的箱子(字符串)要按书名整理。标签不同,处理方式就不同。Python 看到 18"18",就像看到两个标签不同的箱子——一个会算数,一个只能当文字看。

注意事项总结

1 字符串必须加引号"123" 是文本,只负责显示;123 是数字,能参与运算。不加引号会被当成变量或报错。

2 布尔值首字母大写True / False 首字母必须大写,写成 true 会报 NameError(Python 区分大小写)。

3 类型决定行为:同一个加号,字符串拼接、数字相加,结果完全不同。

print("3" + "5")    # 字符串拼接:35
print(3 + 5)        # 数字相加:8

易错点

  • 错误写法:age = 18岁 → 问题:18岁 既不是合法数字也不是合法变量,报 SyntaxError → 正确写法:数字和文字分开存:age = 18unit = "岁"
  • 错误写法:is_student = true → 问题:Python 只认 True/False,报 NameError → 正确写法:is_student = True
  • 错误写法:print("123" + 1) → 问题:字符串和数字不能直接相加,报 TypeError → 正确写法:先转换类型,或 print(123 + 1)
  • 错误写法:把小数赋给变量就以为它是「整数」 → 问题:1.75 是 float,1 是 int,类型不同 → 正确写法:有小数点就是 float。

记忆口诀:整数字符布尔浮,四种类型要记住;带引号的是文本,不带引号是数字。

2 type() —— 查看数据类型的「身份证」

是什么?为什么学?

type() 函数能告诉你一个数据是什么类型,返回值长得像 <class 'int'>。为什么学?因为猜类型最容易出错——尤其是 input() 拿到的数据,看着像数字其实是字符串。遇到不确定的类型,随手 type() 一看便知,这是排查 bug 的「验钞机」。

底层原理

Python 里万物皆对象(object),每个对象都自带一个「类型标签」。type() 做的就是把这个标签拿出来给你看。<class 'int'> 的意思是「这是 int 这个类(类别)的实例」——class 在这里就是「类别」的意思。

术语小词典:对象(object)可以简单理解为「内存里的一坨有类型的数据」。(class)就是「类别」,是对象的模板。

生活类比

type()超市收银台的扫码器:把商品(数据)往上一扫,屏幕上立刻显示这是「饮料」还是「零食」(类型)。你不知道手里拿的是什么,扫一下就知道了。

注意事项总结

1 基本用法

print(type(18))        # <class 'int'>
print(type(3.14))      # <class 'float'>
print(type("Python"))  # <class 'str'>
print(type(True))      # <class 'bool'>

2 变量没有固定类型:类型由当前存的值决定。price = 9.9 是 float,重新赋 price = "9.9"(带引号)就变成 str——这就是「动态类型」。

3 类型决定行为"3" + "5" 是文本拼接得 353 + 5 是数学加法得 8。同一个符号,类型不同行为就不同——这是很多报错的根源。

易错点

  • 错误写法:print(type 18) → 问题:调用函数必须带括号,报 SyntaxError → 正确写法:print(type(18))
  • 错误写法:type(x) == "int" → 问题:type(x) 返回的是 <class 'int'> 对象,不等于字符串 "int",永远 False → 正确写法:type(x) == int(不带引号)。
  • 错误写法:print(type("18")) 却以为输出 int → 问题:带引号就是字符串 → 正确写法:有引号是 str,没引号才是数字。

记忆口诀:类型不明找 type,括号里面放数据;带引号是字符串,这是最容易记错的事。

3 类型转换 —— 让不同类型「打交道」

是什么?为什么学?

类型转换(type conversion)就是用一个函数把数据从一种类型变成另一种:int() 转整数、float() 转小数、str() 转字符串。为什么必学?因为程序里最常见的场景是——input() 拿到的是字符串,可你要做数学计算;print() 拼接又要求字符串。不会转换,程序寸步难行。

底层原理

转换不是「把标签撕了换一张」,而是真正地重新解释数据int("100") 会读取文本 100,按数字规则解析出数值 100,存成一个新的整数对象。如果文本内容不是合法数字(如 "abc"),解析失败,Python 就抛 ValueErrorstr(42) 则反过来:把数值 42 转换成文本 "42"

术语小词典:ValueError 是「值错误」——数据本身没问题,但内容不符合要求。比如让 Python 把 "abc" 当数字读,它读不出来就报这个错。

生活类比

类型转换像货币兑换:你有 100 美元(数字),想在中国花,得去银行换成人民币。兑换有汇率(转换规则),美元换人民币很顺利;但你拿着一张写着「abc」的纸条(不是钱)去兑换,银行(Python)只能拒绝——这就是 ValueError

注意事项总结

1 三种基本转换

print(int("100"))      # 字符串 → 整数:100
print(float("3.14"))   # 字符串 → 小数:3.14
print(str(42))         # 整数 → 字符串:"42"
print(int(3.9))        # 小数 → 整数:3(直接砍掉小数部分,不四舍五入)

2 转换后才能真正计算

a = "7"
b = "8"
print(a + b)            # 字符串拼接:"78"
print(int(a) + int(b))  # 转成整数再相加:15

3 转不动的数据会报错int("abc")float("1.2.3") 都不是合法数字写法,会报 ValueError。转换前先确认文本内容长得像数字。

易错点

  • 错误写法:int("3.14") → 问题:文本里有小数点,int() 不认,报 ValueError → 正确写法:先转 float:float("3.14"),需要整数再 int(3.14)
  • 错误写法:float("abc") → 问题:读不出数字,报 ValueError → 正确写法:转换前用 isdigit() 检查或 try 处理(Day 9 学)。
  • 错误写法:str(42) + 1 → 问题:转完的 "42" 是字符串,还是不能和数字相加 → 正确写法:想算就转数字:int("42") + 1

记忆口诀:转整数用 int,转小数用 float,转文本用 str;内容不像数,转换必报错。

4 input() —— 让程序「听」用户说话

是什么?为什么学?

input() 函数会在屏幕上显示提示文字,然后等待用户在终端里输入内容,回车后把输入的内容作为字符串返回。为什么必学?因为写死的程序只能运行一次,会「听」用户说话的程序才有真正的实用价值——计算器雏形就靠它实现人机对话。

底层原理

input() 做的事:① 把提示文字打印到屏幕(不换行);② 程序暂停,等待用户在终端输入;③ 用户按下回车后,把输入内容(永远作为字符串)返回给程序。注意:用户输入 10,它返回的是字符串 "10",不是数字 10——这是新手最经典的坑。

术语小词典:返回值(return value)就是「函数干完活后递给你的结果」。input() 的返回值就是用户输入的那段文本。

生活类比

input()自动售货机上的对讲机:机器先广播「请投币」(提示文字),然后静静等你操作(程序暂停);你投入硬币(输入内容),机器确认后给你商品(返回字符串)。对讲机收进去的永远是你的「语音」(字符串),不是硬币本身(数字)。

注意事项总结

1 最基本的输入输出

name = input("你叫什么名字?")
print("你好,", name)

2 input 拿到的永远是字符串

num = input("请输入一个数字:")
print(type(num))    # 不管输入什么,这里都显示 <class 'str'>

3 先转换再计算

num = input("请输入一个数字:")
num = int(num)      # 转成整数
print(num + 5)      # 现在能计算了

易错点

  • 错误写法:num = input("输入数字:") 后直接 print(num * 2) → 问题:num 是字符串,"10" * 2 输出 1010(字符串重复两遍),不是 20 → 正确写法:先 num = int(num) 再乘。
  • 错误写法:int(input("...")) 却输入了 3.5 → 问题:int("3.5")ValueError → 正确写法:用 float(input(...)) 转小数更通用。
  • 错误写法:运行含 input() 的程序后什么都不输入,干等着 → 问题:程序会一直暂停(阻塞) → 正确写法:在提示后输入内容再按回车。
  • 错误写法:在非交互环境(如某些在线运行器)直接跑 input 程序 → 问题:没有终端输入,可能报 EOFError → 正确写法:在本地终端 / VS Code 里运行。

记忆口诀:input 问一句,回车拿文本;要算先转换,不然就翻车。

5 动手实践:计算器雏形

写一个程序:输入两个数字,输出它们的和与平均值。

# calculator.py —— 计算器雏形
num1 = input("请输入第一个数字:")
num2 = input("请输入第二个数字:")

# input 返回的是字符串,先转成小数
num1 = float(num1)
num2 = float(num2)

total = num1 + num2
avg = total / 2

print("两数之和:", total)
print("两数平均值:", avg)

运行示例(交互:依次输入 10、20 回车):

请输入第一个数字:10
请输入第二个数字:20
两数之和: 30.0
两数平均值: 15.0

想一想:为什么用 float() 而不是 int()?因为用户可能输入 3.5 这样的小数,float() 更通用。

今日总结

四种基本类型:int / float / str / bool,能一眼分辨 带引号的是字符串,不带引号的是数字;True / False 首字母大写 type() 能查看数据类型,类型决定行为(同是 +,拼接与相加不同) int() 截断小数、float() 转小数、str() 转文本;内容不像数字转换就报 ValueError input() 返回的一定是字符串,要计算得先转换 完成「计算器雏形」,能用 float() 处理小数输入

报错原因修复
ValueError: invalid literal for int()把不能转数字的字符串转成 int,如 int("abc")检查输入内容,或先用 isdigit() 判断
TypeError: can only concatenate str字符串和数字用 + 拼接先把数字转成 str,或用 f-string
NameError: name 'x' is not defined变量名拼错或没定义检查拼写
数字前导 0 报错(如 int("010")新版 Python 不允许字符串前导 0 转 intint("10"),去掉前导 0
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇