开始之前
前面的程序只能使用作者预先写好的数据。本课开始让程序在运行途中询问学习者,并根据对方输入的内容继续工作。
为了真正理解 input(),我们会先给已经使用过的 print() 补上两个名称:Function(函数)和 Argument(参数值),再学习输入与类型转换。
概念 01
Function 接收 Argument 完成具体任务
看懂函数名、括号和参数值之后,你就能先读懂 print() 和 input(),再把相同结构迁移到后面的转换工具。
Function 的英文全称是 Function,中文叫函数。它是一段可以重复使用、负责完成特定任务的代码。Python 已经提供了 print() 这样的内置函数(built-in function);这一课只调用 Python 已经提供好的函数,还不会创建自己的函数。
Python 调用函数时写出函数名和括号,例如 print("Hello")。这里 print() 的用途是显示内容,运行后会输出 Hello。括号表示现在要使用这个函数。
Argument 的英文全称是 Argument,本课称为参数值。Argument 是放在函数括号里的信息,用来告诉函数需要处理什么。print("Hello") 中的 "Hello" 就是传递给 print() 的 argument。
参数值让同一个函数处理不同内容:print("Hello") 显示 Hello,print("Welcome") 显示 Welcome。以后看到函数括号时,可以先问自己:这次交给函数的 argument 是什么?
- Function:完成特定任务的可重复代码
- 函数调用写成函数名加括号
- Argument:放进括号、交给函数处理的信息
- 本课只调用内置函数,不定义函数
用不同 argument 调用 print()
两行都调用 Function print()。"Hello" 和 "Welcome" 是不同的 Argument,所以同一个函数显示了不同内容。
点击“运行”后,程序输出会显示在这里。
概念 02
Input function 会等待用户输入
有了 input(),程序不再只能处理预先写死的数据,而能接收实验标签、旅行目的地或运动记录等真实信息。
Input function 的英文全称是 Input function,中文叫输入函数,Python 写成 input()。运行到 input() 时,程序会暂停、等待用户输入,然后把输入的数据返回给代码继续使用。
input("Activity: ") 中的 "Activity: " 是 Argument。它会先显示提示,告诉用户应该输入什么;用户输入后按回车,input() 才会返回结果。
input() 默认返回 String(字符串),Python 类型名称是 str。即使用户输入 18,得到的也是文字 "18",不是 Integer / int。文字输入可以直接保存和显示,但计算前通常需要转换。
- Input function / input():暂停并等待输入
- 括号里的 argument 是给用户看的提示
- input() 返回 String / str
- 先把返回结果保存到变量,再继续使用
在 Terminal 中输入活动名称
程序显示 Activity: 后进入等待输入状态。输入 Cycling 并按回车,input() 返回字符串,变量 activity 保存它,后面的 print() 再显示记录结果。
点击“运行”后,程序输出会显示在这里。
概念 03
Type conversion 让数据适合接下来的任务
用户输入的是文字,但年龄、身高和测量值经常需要计算;类型转换让同一份输入能够以正确的数据类型参与后续操作。
Type conversion 的英文全称是 Type conversion,中文叫类型转换,意思是根据一个已有的值产生另一种数据类型的新值。Python 使用 int()、float() 和 str():int() 尝试产生 Integer(整数),float() 尝试产生 Floating-point number(浮点数),str() 产生 String(字符串)。
Integer 的英文全称是 Integer,Python 类型名称是 int,表示没有小数部分的整数,例如 age = 18。Floating-point number 的英文全称是 Floating-point number,Python 类型名称是 float,表示带小数部分的数字,例如 height = 1.78。
String 的英文全称是 String,Python 类型名称是 str,表示引号中的文字,例如 label = "A-17"。str(18) 会把整数 18 转成字符串 "18",适合把数字当作文字保存或显示。
注意类型名称和转换写法的关系:int 是整数类型的名称,int(...) 表示让 Python 尝试把括号里的值转换成整数;同理,float 是浮点数类型的名称,float(...) 尝试产生 float;str 是字符串类型的名称,str(...) 产生 str。这里不需要研究更深的类型机制,只要先看清有没有括号。
把本课使用的内置函数放在一起比较:print(...) 接收数据并显示;input(...) 显示提示、等待输入并产生 str;int(...) 接收一个值并尝试产生 int;float(...) 接收一个值并尝试产生 float;str(...) 接收一个值并产生 str。括号里的 ... 表示这次交给函数处理的数据。
先把输入和转换拆成两步:age_text = input("Age: ") 让 input() 产生一个新的 str,变量 age_text 保存这个字符串;接着 age = int(age_text) 根据该字符串产生一个新的 int,变量 age 保存转换后的整数。类型转换不会自动修改 age_text,它仍然保存原来的 str。
理解两步数据流后,可以把它写成等价的简写 age = int(input("Age: "))。Python 仍然先执行里面的 input(),再把得到的 str 交给外面的 int(),最后才把整数保存到 age。转换后,age + 1 才表示数学加法;这里先把 + 理解成数字相加,下一课会系统学习 Operator 和 Expression。
转换要求原始内容适合目标类型:int("18") 可以产生整数 18,但 int("18.5") 和 int("hello") 不能产生整数。这里先记住要输入合适的内容,不正式展开异常处理;需要小数时可以使用 float()。
如果写成 age = input("Age: ") 后直接运行 age + 1,Python 会报告 TypeError。Type Error 的英文全称是 Type Error,Python 写成 TypeError,意思是这次操作收到了不能直接配合的数据类型;此处应检查 str 是否需要先转换成 int 或 float。
- Type conversion:把数据转换为另一种类型
- int() → Integer / int
- float() → Floating-point number / float
- str() → String / str
- TypeError:先检查参与操作的数据类型
把输入的年龄转换后再计算
age_text 始终保存 input() 产生的 str;int(age_text) 另外产生整数并交给 age。两个 type() 结果证明转换没有自动修改原变量。
点击“运行”后,程序输出会显示在这里。
常见错误
这些写法为什么不工作
错误不是失败,而是 Python 告诉你“这部分我无法理解”。先找到差异,再一次只改一个问题。
把仍是 str 的旧变量用于数字加法
distance_text 仍然是 str,即使另一个变量已经保存了转换后的 float。TypeError 提醒你检查 + 两边实际使用的是哪个变量;类型转换产生新值,不会自动改写原变量。
distance_text = "12.5" distance = float(distance_text) print(distance_text + 2.5)
distance_text = "12.5" distance = float(distance_text) print(distance + 2.5)
引导修改
把整数输入改成带小数的旅行距离
这不是正式练习。跟着步骤修改已有代码,观察每次改变如何影响程序。
- 1先运行代码,输入 12,观察 int() 如何得到整数。
- 2把提示文字改成 Distance:,把变量名从 days 改成 distance。
- 3把 int() 改成 float(),再输入 12.5,确认程序能够保存并显示小数。
完成后:输入 12.5 后,程序会显示 Recorded value: 和 12.5,说明 float() 已把输入转换成浮点数。
修改这段代码
先运行,再按左侧步骤逐项修改。你的草稿会保存在这个浏览器中。
点击“运行”后,程序输出会显示在这里。
正式练习
现在独立完成 2 道练习
先运行代码观察问题,再点击“检查答案”。检查只关心题目要求的结果,不要求你照抄参考写法。
正式练习
记录实验样本标签
编写一段实验登记程序:调用 input("Sample label: ") 接收样本标签,并把返回的字符串保存在变量 sample_label 中。然后先用 print() 输出一行 Recorded sample:,再用 print() 输出 sample_label。必须使用指定变量名,方便检查数据确实被保存;不要使用姓名场景。
点击“运行”后,程序输出会显示在这里。
需要一点提示?
先自己尝试一次;卡住时再逐级打开提示。
本课总结
本课小结
- 1Function 完成具体任务,Argument 是放进括号、交给函数处理的信息。
- 2input() 会等待用户输入,并默认返回 String / str。
- 3int(...) 和 float(...) 尝试产生可计算的数字,str(...) 产生字符串;转换会产生新值,不会自动修改原变量。
- 4遇到 TypeError 时,先检查参与操作的数据类型是否能够直接配合。