1 数据类型:int / float / str / bool
是什么?为什么学?
数据类型(data type)就是「数据的种类」。同一个数字 18,是整数;"18" 带引号,就是字符串——看起来一样,性质完全不同。为什么零基础必学?因为类型决定了能对数据做什么:数字能算数,文本能拼接,搞混了程序立刻报错。学会「一眼分辨类型」,是写对代码的第一道门槛。
四种基本类型:
| 类型 | 名称 | 例子 | 说明 |
|---|---|---|---|
| 整数 | int | 18、-3、100 | 没有小数点的数字 |
| 小数 | float | 3.14、1.75 | 有小数点的数字 |
| 字符串 | str | "你好"、'Python' | 用引号包起来的文本 |
| 布尔 | bool | True、False | 只有真和假两种 |
底层原理
电脑存储数据时,必须知道这块数据是「数字」还是「文本」,因为它们在内存里的存储方式完全不同:数字按二进制数值存,文本按编码表(每个字符对应一个编号)存。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 = 18、unit = "岁"。 - 错误写法:
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" 是文本拼接得 35,3 + 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 就抛 ValueError。str(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 转 int | 用 int("10"),去掉前导 0 |