JEPA4Japan · 教程

值、变量与类型

1,528字 5分钟阅读 #Python

学习使用名称、核心值类型、类型转换、算术运算和格式化输出。

课程进度 课程大纲 已发布 24/24 课

打开贴有标签的盒子

在第 1 章中,name 和 dream 记住了你为梦想卡片输入的答案。把每个名称想象成贴在盒子上的标签。标签指向的东西叫作值,而每个值都有一种类型。

  1. 值 Python 使用的东西
  2. 变量 指向它的名称
  3. 类型 它是哪一种东西
变量是标签,值是标签指向的东西,类型则告诉 Python 什么样的东西适合放进去。

让 Python 检查五个常用的值:

print(type("Python"))
print(type(30))
print(type(3.5))
print(type(True))
print(type(None))

输出:

<class 'str'>
<class 'int'>
<class 'float'>
<class 'bool'>
<class 'NoneType'>

这里可以把 class 理解为“类型”。str 是文本,int 是整数,float 是带小数形式的数,而 bool 只能是 True 或 False。None 的意思是“这里暂时还没有可用的值”。

引号会改变类型:"12" 是文本,而 12 是整数。同样,"False" 是普通文本,并不是布尔值 False。

标签可以移动

等号会把一个值赋给一个名称:

minutes = 30
print(minutes)

minutes = 45
print(minutes)

输出:

30
45

第二次赋值把标签 minutes 移到了一个新值上。它并不是在说 30 和 45 相等。

应使用能够说明用途的名称,例如 minutes_per_day 和 number_of_days。Python 名称通常由小写单词组成,单词之间用下划线连接。名称不能以数字开头,也不能包含空格或连字符。不要把 str、int、input 或 print 等内置名称用作变量名。

名称也可以指向计算得到的值:

minutes_per_day = 30
days = 7
total_minutes = minutes_per_day * days

print(total_minutes)
print(total_minutes / 60)

输出:

210
3.5

Python 认识 +、-、*、/,还用 // 表示向下取整除法,用 % 表示余数,用 ** 表示乘方。乘法和除法会先于加法和减法执行。括号可以清楚地表明你想要的运算顺序:(10 + 5) * 2 的结果是 30,而 10 + 5 * 2 的结果是 20。

键盘发送的是文本

input() 总是返回字符串,即使输入的是数字也一样。Python 无法猜出 30 表示分钟、门牌号,还是名称的一部分。

  1. 输入 30 键盘发送文本
  2. "30" input() 返回 str
  3. 转换 int("30") 变成 30
  4. 计算 现在可以使用数字的运算规则了
输入内容到达程序时是文本;当程序需要数字时,请进行转换。

看看其中的区别:

first = input("First number: ")
second = input("Second number: ")
print(first + second)

输入 20 和 5 会打印出 205,因为 + 会连接字符串。在输入进入程序时就进行转换:

first = int(input("First whole number: "))
second = int(input("Second whole number: "))
print(first + second)

现在输入同样的答案会打印出 25。整数形式的文本使用 int(),小数形式的文本使用 float(),而当你明确需要文本时,则使用 str()。

f-string 可以整洁地把标签和值混合在一起:

topic = "Python"
hours = 210 / 60
print(f"Study {topic} for {hours:.1f} hours.")

输出:

Study Python for 3.5 hours.

f 会把花括号中的表达式转换成文本。.1f 只会把显示结果改为保留一位小数,并不会改变存储的值。

制作一个学习时间计算器

这个完整的迷你项目只使用 Python 内置的标准库工具。将它保存为 study_time.py。

  1. 询问 主题、分钟数、天数
  2. 计算 每天的时间 × 天数
  3. 显示 一份友好的计划
文本进入程序,数字经过转换,带有清晰名称的结果从程序中输出。
topic = input("Topic: ")
minutes_per_day = int(input("Minutes per day: "))
days = int(input("Number of days: "))

total_minutes = minutes_per_day * days
total_hours = total_minutes / 60

print()
print(f"Topic: {topic}")
print(f"Daily practice: {minutes_per_day} minutes")
print(f"Plan: {total_minutes} minutes")
print(f"Total time: {total_hours:.1f} hours")

运行 python3 study_time.py,然后依次输入 Python、30 和 7。确认最后几行如下:

Topic: Python
Daily practice: 30 minutes
Plan: 210 minutes
Total time: 3.5 hours

第二次运行之前,先自己预测答案。试着输入每天 45 分钟、持续 4 天:程序应该显示 180 分钟和 3.0 小时。

三个小任务和一个容易踩的坑

  1. 类型侦探。 先预测,再打印 "7"、7、7.0、False 和 None 的类型。
  2. 温度卡片。 使用 float() 读取摄氏温度,计算 celsius * 9 / 5 + 32,并显示一位小数。输入 20 时,确认结果为 68.0。
  3. 更长的计划。 添加 weeks,计算 total_days,然后使用清晰的变量名重新计算总分钟数和总小时数。

容易踩的坑:int("thirty") 和 int("30.5") 会引发 ValueError。现在,请按照要求输入相应类型的数字。零在算术运算中是有效的,但负数的学习时间在现实中没有什么意义。第 10 章将教程序如何友好地拒绝无效输入。

准备好进行判断了吗?

  • 我能区分值、变量和类型。
  • 我能识别 str、int、float、bool 和 None。
  • 我能为清晰的变量名赋值和重新赋值。
  • 我能使用算术运算和括号。
  • 我知道 input() 总是返回文本。
  • 我能转换输入,并使用 f-string 设置结果的格式。
  • 当输入 30 × 7 时,我的计算器会得到 210 分钟和 3.5 小时。
  • 我完成了三个小任务。

接下来,你将创建布尔问题,并根据问题的答案选择一条路径或重复执行一项任务。