4: 类型

从这节课开始,示例和代码输入框将会有 打开控制台 可见化这两个按钮。使用它们来帮助你调试和探索代码。

Hello, World! 程序中 我们看到Python可以重复一句话并返还给我们。我们同样见到了几个数字运算的例子。数字和句子从根本上来说是不同的对象,当你试图把它们混淆在一起时,Python就会出错:

示例
试图比较一个字符串和一个数字。

你可以看到,我们收到了一个错误消息,max 的两个实参不是同一种类型。这个错误消息给我们接下来学习的内容做了一个很好的开头:

  • "Hello, World!"是一个字符串,在Python中是以str显示的。一个字符串是一个包含数字、字母和符号的序列;我们将会在7A课程中深入的了解它们。
  • 35是一个整数值,在Python中是以int显示的。一个整数就意味着整个的数字;例如,42,-12和0都是整数。

在编程中,使用不正确的对象 类型是导致错误的一个常见原因。这就像你试图喝一个三明治:你并不能做到,因为你只能喝液体,但三明治是一个固体。

你可以调用type函数来确定一个对象的类型。

示例
一些type函数的例子。

(class(类)和type(类型)的意义相似。) 上面的几个例子诠释了数字中的两种不同类型,我们前面提到的int和用来存储十进制数的float(浮点数)。你可以将float理解为不精确或近似值(我们将会在7B中详细解释)。你可以混合float值和int值,他们混合的结果会是一个新的float

示例
混合一个intfloat

事实上,Python在碰到混合一个floatint的情况时,会自动将int转换成float,然后用两个float值运行后面的程序。

选择题练习: 浮点
如果我们在上面的程序中将1.2改变为1.5,第一行输出会是什么?
正确!我们必须在这里解释两个因素,来看为什么z被打印为3.0
    • 计算x * y是混合了一个int和一个float,Python会把他们当成两个浮点数,并返还z 为一个浮点数
    • z的数学值是1.5乘以2,为3,但却被保存为不准确的小数形式——浮点数。当Python打印任何 浮点数时,即使它的值是一个整数,它也会被打印为以.0结尾来表明它是一个不准确的值。
同时,请记住y的值和类型从未被改变。

在编程中,你会经常需要改变数据的类型。就像你可以用搅拌机将三明治从固体转变成液体一样,你也可以使用类型转换函数将数据从一种类型转换到另一种类型。在写目标类型就像是写一个调用函数的方程一样,比如:

x = float("3.4")
print(x-1)
将字符串"3.4"变成浮点数3.4,然后打印出2.4。如果不使用类型转换程序就会崩溃, 因为字符串减去一个数字不符合逻辑。

有些时候,Python允许你使用数学运算符号混合一个字符串和数字。语句print("hots" * 2) 会打印出hotshots。Python的规则是如果让一个字符串乘以一个整数,那么它的实际意义就是在这个字符串后复制相应数量的拷贝。我们会在后面看到“两个字符串相加”在Python中也是可行的。

不同的类型转换会有不同的表现:

  • 浮点数转换成整数会使小数点后的信息丢失,例如int(1.234)会返还1int(-34.7)会返还-34
  • 如果字符串的格式和整数不一样, 那么字符串转换成整数会造成错误。例如int("1.234")会造成错误
  • 如果字符串不是一个数,那么将其转换成浮点数会造成错误。例如float("sandwich")会造成错误

类型转换的一个常见用处是我们将会看到的转换用户输入,从一个字符串转换到数字类型。这里是一个快速的演示。

示例
类型转换的例子。

下面是这节课最后一个练习。

因为现在有很多的编辑命令,有的已经搬进标记为更多动作的菜单中。

编程练习: Tasty Typecasting
编写一个程序来帮助在聚会上喂饱你的朋友们,你需要对一些方形披萨进行一些计算。假设打分软件会定义一个叫做inputStr的字符串给你,它是一个小数字符串,用来表示披萨的边长 L (cm)。披萨的面积A = L*L。接着假设每个人需要吃100cm2的披萨,请计算这个披萨可以喂饱多少人,请将结果四舍五入至最接近的整数Hint

例子:如果inputStr"17.5", the 面积会是306.25 cm2, 所以3是正确的输出。

完成后,请前往下一课。