打开课程目录
Module 2预计 65 分钟

用户输入与类型转换

让程序等待输入,并把文字转换成可以计算的数据

学习目标

理解内置函数与参数值,能够使用 input() 获取输入,用 int() 和 float() 转换数值输入,并知道 str() 可以产生字符串。

开始之前

前面的程序只能使用作者预先写好的数据。本课开始让程序在运行途中询问学习者,并根据对方输入的内容继续工作。

为了真正理解 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,所以同一个函数显示了不同内容。

Python
代码编辑器将在滚动到这里时加载
点击运行时准备 Python
TERMINAL程序输出

点击“运行”后,程序输出会显示在这里。

预期结果:Hello / Welcome

概念 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() 再显示记录结果。

Python
代码编辑器将在滚动到这里时加载
点击运行时准备 Python
TERMINAL程序输出

点击“运行”后,程序输出会显示在这里。

预期结果:输入 Cycling 后:Recorded activity: / Cycling

概念 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
代码编辑器将在滚动到这里时加载
点击运行时准备 Python
TERMINAL程序输出

点击“运行”后,程序输出会显示在这里。

预期结果:输入 18 后,关键输出为:19 / <class 'str'> / <class 'int'>

常见错误

这些写法为什么不工作

错误不是失败,而是 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. 1先运行代码,输入 12,观察 int() 如何得到整数。
  2. 2把提示文字改成 Distance:,把变量名从 days 改成 distance。
  3. 3把 int() 改成 float(),再输入 12.5,确认程序能够保存并显示小数。

完成后:输入 12.5 后,程序会显示 Recorded value: 和 12.5,说明 float() 已把输入转换成浮点数。

修改这段代码

先运行,再按左侧步骤逐项修改。你的草稿会保存在这个浏览器中。

Python
代码编辑器将在滚动到这里时加载
点击运行时准备 Python
TERMINAL程序输出

点击“运行”后,程序输出会显示在这里。

正式练习

现在独立完成 2 道练习

先运行代码观察问题,再点击“检查答案”。检查只关心题目要求的结果,不要求你照抄参考写法。

正式练习

记录实验样本标签

练习 1/2

编写一段实验登记程序:调用 input("Sample label: ") 接收样本标签,并把返回的字符串保存在变量 sample_label 中。然后先用 print() 输出一行 Recorded sample:,再用 print() 输出 sample_label。必须使用指定变量名,方便检查数据确实被保存;不要使用姓名场景。

7 分钟难度 1/3编写代码
代码编辑器将在滚动到这里时加载
TERMINAL程序输出

点击“运行”后,程序输出会显示在这里。

需要一点提示?

先自己尝试一次;卡住时再逐级打开提示。

本课总结

本课小结

  • 1Function 完成具体任务,Argument 是放进括号、交给函数处理的信息。
  • 2input() 会等待用户输入,并默认返回 String / str。
  • 3int(...) 和 float(...) 尝试产生可计算的数字,str(...) 产生字符串;转换会产生新值,不会自动修改原变量。
  • 4遇到 TypeError 时,先检查参与操作的数据类型是否能够直接配合。