{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 数值类型转换"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<font size=\"4\">在程序设计过程中,我们经常需要对数值类型转换。 \n",
"不同数值类型的转换,可以将<font color=Red>__数据类型__</font>作为<font color=Red>__函数名__</font>,将要转换的<font color=Red>__数字__</font>做为函数的<font color=Red>__参数__</font>即可完成转换。</font>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 1. <font color=Red>__int(x, base=10)__</font>: 将浮点数或整数类型字符串x转换为一个整数"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<font size=\"4\">当x是一个浮点数且没有参数base时,<font color=Red>__int()函数__</font>可以将这个<font color=Red>__浮点数__</font>转换成<font color=Red>__十进制整数__</font>。 \n",
"当x不是数字或给定了参数base时,x必须是一个<font color=Red>__整型的字符串__</font>,此时int()函数将这个整型的字符串转成十进制整数,base为整形字符串的<font color=Red>__进制__</font>,如2、8、10、16分别代表二进制、八进制、十进制和十六进制。</font>"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"print(int(3.14)) # x为数字,无参数base,浮点数转整数,取整数部分,输出 3\n",
"print(int(6.98)) # x为数字,无参数base,浮点数转整数,取整数部分,输出 6"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<font color=Red>__若x为浮点数,则不能有base参数,否则报错。__</font>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"print(int(3.14, base=10)) "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"若x为整数形式的字符串,缺省情况下<font color=Red>__base=10__</font>,是将一个10进制的整数形式的字符串转成十进制的整数。base可以取有值包括:0、2-36中的整数字。"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"print(int(\"10\")) # x为整数类型的字符串,base缺省时默认其为十进制整数字符串,转为十进制整数10\n",
"print(int('11111111',base=2)) # 二进制整数字符串'11111111'转成十进制整数是255\n",
"print(int('11111111',2)) # base参数名可省略,二进制整数字符串'11111111'转成十进制整数是255\n",
"print(int('1111' + '1111',2)) # 字符串x可由多个字符串拼接而成,输出 255\n",
"print(int('107',base = 8)) # '0o'表示这是八进制的整数字符串,输出 71\n",
"print(int('107',base = 16)) # '0x'表示这是十六进制的整数字符串,输出 263\n",
"print(int('0o107',base = 8)) # '0o'表示这是八进制的整数字符串,输出 71\n",
"print(int('0x107',base = 16)) # '0x'表示这是十六进制的整数字符串,输出 263\n",
"print(int('0b1001',base = 2)) # '0b'表示这是二进制的整数字符串,输出 9\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<font size=\"4\">转换时,字符串开头和结尾的<font color=Red>__空白字符(空格、\\n、\\t 等)__</font>会被自动去除。</font>"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"print(int(' 10 ')) # 前后的空格将被去除,输出10\n",
"print(int('\\t11111111\\t',2)) # 前后的制表符(\\t)将被去除,输出255\n",
"print(int('\\n107\\n\\n',base = 8)) # 前后的换行符(\\n)将被去除,输出 71\n",
"print(int('\\t \\n0x107 \\n\\n\\t',base = 16)) # 前后的所有空白字符将被去除,输出 263"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<font size=\"4\">当base取值为0时,系统根据字符串前的进制引导符确定该数的进制。2、8、16 进制的数字可以在代码中用<font color=Red>__ 0b/0B 、 0o/0O 、 0x/0X __</font>前缀来表示。</font>"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"print(int('0o107',base = 0)) # '0o'表示这是八进制的整数字符串,输出 71\n",
"print(int('0x107',base = 0)) # '0x'表示这是十六进制的整数字符串,输出 263\n",
"print(int('0b1001',0)) # '0b'表示这是二进制的整数字符串,输出 9"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**若x字符串不满足base对应进制的整数构成规则,则抛出异常。**"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"print(int('3.14', base=8)) # 十进制整数不能包含小数点,抛异常"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"print(int('1a7', base=8)) # 八进制整数不能包含a,抛异常"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 例: 计算边为整数的矩形面积"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"矩形的面积等于其长与宽的乘积,用户分两行依次输入两个正整数作为长和宽的值,编程计算矩形的面积并输出整数形式的面积。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Python中任何输入都会被当作字符串进行处理,字符串无法参与数学运算,所以在程序中需要将输入的<font color=Red>__字符串转为数值类型__</font>。 \n",
"当用户的输入确定是整数时,程序中可以用int()函数将输入转为整数类型,计算结果也是整数。 用int()函数不加其他参数将输入转为整数时,输入仅可包括 “0123456789” 中的数字符号。 \n",
"当输入中包含小数点、字母等其他字符时,会触发ValueError异常。"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdin",
"output_type": "stream",
"text": [
" 4\n",
" 3\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"12\n"
]
}
],
"source": [
"# 输入整数表示的矩形的长和宽, 计算并输出矩形的面积\n",
"width = int(input()) # 用int()函数将输入转成整数,例如输入:3 \n",
"length = int(input()) # 用int()函数将输入转成整数,例如输入:4\n",
"area = width * length # 利用面积公式计算面积\n",
"print(area) # 输出:12"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 2. <font color=Red>__float(x)__</font>:将整数x或浮点数类型字符串x转换为一个浮点数"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"print(float(3)) # 整数转浮点数,增加小数位,小数部分为0,输出:3.0\n",
"print(float('3.14')) # 将字符串'3.14'转为浮点数3.14\n",
"print(float('0.456')) # 将字符串'0.456'转为浮点数0.456"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"字符串x可以为浮点数的科学计数法表示形式。"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"print(float('0.48e-5')) # 将字符串'0.48e-5'转为浮点数4.8e-06\n",
"print(float('2.53e3')) # 将字符串'2.53e3'转为浮点数2530.0"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"转换时,字符串开头和结尾的<font color=Red>__range__</font>空白字符(空格、\\n、\\t 等)会被自动去除。"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"print(float(' 0.678\\n')) # 前后的所有空白字符将被去除,输出0.678"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 例: 计算边为浮点数的矩形面积\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"矩形的面积等于其长与宽的乘积,用户分两行依次输入两个正浮点数作为长和宽的值,编程计算矩形的面积并输出浮点数形式的面积。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"当用户的输入确定是浮点数时,可以用float()函数将输入转为浮点数类型。当输入为整数时,也会被转为浮点数,计算结果也是浮点数。"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdin",
"output_type": "stream",
"text": [
" 3\n",
" 4\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"12.0\n",
"12.00\n",
"12.00\n",
"12.0\n"
]
}
],
"source": [
"# 输入浮点数表示的矩形的长和宽, 计算并输出矩形的面积\n",
"width = float(input()) # 用float()函数将输入转成浮点数,输入:2.456\n",
"length = float(input()) # 用float()函数将输入转成浮点数,输入:3.58\n",
"area = width * length\n",
"print(area) # 输出:8.79248\n",
"print(f'{area:.2f}') # 当小数位数多于2位时,保留2位小数,输出:8.79\n",
"print('{:.2f}'.format(area)) ## format的形式输出\n",
"print(round(area,2))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 3. <font color=Red>__eval(x)__</font>:将数值型的字符串对象x转换为其对应的数值"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<font size=\"4\">eval函数将根据字符串的构成,自动返回整形或浮点型。</font>"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"3\n",
"3.0\n",
"2530.0\n"
]
}
],
"source": [
"print(eval('3')) # 转换结果为整数3\n",
"print(eval('3.')) # 转换结果为浮点数3.0\n",
"print(eval('2.53e3')) # 转换结果为浮点数2530.0"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 例: 计算不确定边长是整数还是浮点数的矩形面积"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"矩形的面积等于其长与宽的乘积,用户分两行依次输入两个正数作为长和宽的值,编程计算矩形的面积并输出,要求输出的数据类型与输入的数据类型保持一致。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"当用户输入不确定是整数还是浮点数时,如果想保证计算结果与输入的数据类型一致,可以使用eval()函数,该函数在将输入转为可计算对象时,会保持数据类型与输入一致。输入整数时,转化后还是整数;输入浮点数时,转化后还是浮点数。"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# 输入正数表示的矩形的长和宽, 计算并输出矩形的面积\n",
"width = eval(input()) # 用eval()函数将输入转成数值型\n",
"length = eval(input()) # 用eval()函数将输入转成数值型\n",
"area = width * length # 利用面积公式计算面积\n",
"print(area) \n",
"# 输入3,4时,输出:12;输入3.0,4.0时,输出12.0"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<font size=\"4\">eval() 函数还可以把用<font color=Red>__半角逗号分隔__</font>的多个<font color=Red>__字符型数据__</font>转换为一个元素为<font color=Red>__数值类型__</font>的元组。</font>"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"print(type(eval('3.5,3,2.0')))\n",
"print(type(eval(\"3.5,3,2.0\")))\n",
"print(eval(\"3.5,3,2.0\"))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"利用这个特性,可以实现在一条语句中将用逗号分隔的多个输入分别命名,实现多变量的<font color=Red>__同步赋值__</font>。"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"m, n = eval(input()) # 可以把输入的用逗号分隔的2个数值型数据分别命名为 m,n\n",
"# 例如输入 3,5.0\n",
"print(f'm={m}, n={n}') # 输出 m、n的值"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" <font face='楷体' color='red' size=5> 练一练 </font><br>\n",
" 参考上面的例子,根据下面的注释编程计算矩形的面积并输出,要求在一行内输入逗号分隔的两个正数作为矩形的长与宽,输出的数据类型与输入的数据类型保持一致。"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"13\n",
"<class 'str'>\n"
]
}
],
"source": [
"# 使用eval实现一行输入两个数据同步赋值给变量width和length\n",
"\n",
"# 计算矩形面积area\n",
"a=13\n",
"b=str(a)\n",
"print(b)\n",
"print(type(b))\n",
"#输出面积area"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.5"
}
},
"nbformat": 4,
"nbformat_minor": 4
}