master
/ 2.2 数值类型转换.ipynb

2.2 数值类型转换.ipynb @master

d487d71
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
{
 "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
}