Python数字编程 第一章 第三、四节
off999 2024-10-11 14:02 16 浏览 0 评论
第三节 不同类型的数字
刚刚的计算过程中,我们看到有两类数字,整数(int,称为整型)和小数(float,称为浮点型),不论对于什么数字,人们一眼即可看出数字的类型,那在程序中应该如何看出来呢?答案揭晓:使用type()函数即可进行查看,如
>>> type(3)
<class 'int'>
>>> type(3.0)
<class 'float'>
此处要理解关于数字的数据类型,整型(int),浮点型(float),比如3和3.0,虽然我们知道这两个数字是等价的,但是Python会对这两种数进行不同的处理,因为在Python看来他们他们是两种数。
并且我们要编写的一些程序也只有输入是整数或者小数才能够去正常工作。
但是,Python提供了内置函数,可以将两种数进行转换
首先,浮点数转成整数,使用int()函数,仅保留小数部分的整数
>>> int(3.8)
3
>>> int(3.0)
3
整数转成浮点数,使用float()函数,在整数后面添加小数点,转成浮点数
>>> float(3)
3.0
1.3.1 分数的操作
Python可以操作分数,但要借助Python的fractions模块。模块可以认为是他人编写的程序,但是我们可以在自己的程序中使用。模块可以是Python标准库的一部分,也可以从第三方位置分发,后一种情况下需要安装该模块才能使用。
fractions模块是标准库的一部分,也就是不需要再主动安装。他在其中定义了一个类,这是用来在程序中输入分数的。只需要使用import导入即可,即告诉Python我们要使用fractions里面的类Fraction,例子如下,创建一个新的标签f,f指代分数3/4
>>> from fractions import Fraction # ①
>>> f = Fraction(3, 4) # ②
>>> f # ③
Fraction(3, 4)
①:首先从fractions模块里面导入Fraction类
②:传递分子分母两个参数到Fraction类创建一个Fraction对象,这样就为3/4创建了一个Fraction对象
③:此时f为一个Fraction对象,输出f时,Python会以Fraction(分子,坟分母)的形式显示
那我们就可以把这个对象当作是一个分数来进行数学运算,如下
>>> Fraction(3, 4) + 1 + 1.5
3.25
注意:表达式中有浮点数,上述例子中为1.5,运算结果返回浮点数
当表达式中只有分数和整数时,返回结果为分数形式,即使分母为1,例子如下
>>> Fraction(1, 4) * 2 + Fracction(1/2)
Fraction(1, 1)
1.3.2 复数
上述我们看到的都是实数,Python还支持复数,其中虚数部分使用字母j或J来表示(这与数学中使用i来表示不同,但类似),如,复数2+3i可以表示为2+3j
>>> a = 2 + 3j
>>>type(a)
<class 'complex'>
我们依然可以使用type()函数来返回复数的类型,可以看到是<class 'complex'>
还可以使用complex()函数来定义一个复数,传入的参数为这个复数的实部和虚部,返回一个复数
a = complex(2, 3)
a
(2 + 3j)
我们可以用与实数相同的方式对复数进行加减运算
>>> b = 3 + 3j
>>> a + b
(5 + 6j)
>>> a - b
(-1 + 0j)
复数的乘法和除法也可以进行类似操作,首先我们来复习一下复数的乘法和除法计算方法
>>> a * b
(-3 + 15j)
>>> a / b
(0.83333333334 + 0.16666666666j)
取模(%)和向下取整(//)操作对复数无效
可以使用real和imag属性来提取复数的实部和虚部,可以看到复数的实部和虚部都是浮点数。
>>> z = 2 +3j
>>>z.real
2.0
z.imag
3.0
可以通过conjugate()函数来获得某个复数的共轭复数
共轭复数:两个复数实部相,虚部互为相反数,如2+3j 和 2 - 3j
>>> z.conjugate()
(2 -3j)
借助复数的实部和虚部可以计算复数的模
复数的模计算公式:
>>> (z.real ** 2 + z.imag ** 2) ** 0.5
3.605551275463989
当然,还有更直接的办法,abs()函数,当传入的参数为实数时,计算其绝对值,传入参数为复数时,计算复数的模
>>> abs(z)
3.605551275463989
第四节 获取用户输入
当编写程序时,经常使用input()函数来接收用户输入,我们它我们可以编写要求用户输入数字的程序,然后对数字执行特定的操作,例如
>>> a = input() # ①
1 # ②
在①处,调用input()函数,此时系统会暂停运行,等待用户输入
在②处,用户输入,按Enter键,输入的数字将存储在a中
我们打印输出a
>>> a
'1'
此处可以看到输出的1是带着引号的,input()函数返回的都是字符串,字符串是两个引号之间的任何一组字符,python中可以使用单引号或者双引号来定义字符串
值得注意的是,即使这个字符串是纯数字,Python也不会将其视为数字,这时候我们需要将其进行转换,只有字符串仅包含数字才能进行转换,可以使用int()或者float()函数
>>> a = '1'
>>> int(a) + 1
2
>>> float(a) + 1
2.0
此处的int()和float()函数与之前的数据类型转换有所不同,之前传入的参数为数字,而现在为字符串。必须说明一下,int()只能转换整数型字符串,如果传入的是浮点型字符串,就会报错。例如
>>> int('2.0')
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
int('2.0')
ValueError: invalid literal for int() with base 10: '2.0'
同样,当你输入一个分数如3/4时,Python不能将其转化为等价的整数或者浮点数,再次引发ValueError异常:
>>> a = float(input())
3/4
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
a = float(input())
ValueError: could not convert string to float: '3/4'
通常我们放在try...except块中来执行转换,提醒用户无效输入
1.4.1 处理异常和无效输入
try...except基本思想:在try...except程序块中执行一行或者多行代码时,如果程序发生错误,并不会立即停止,而是输出一个Traceback,然后,程序的执行会转到except后的块,我们可以继续一些适当操作,比如输出错误信息或者尝试其他操作等等,如
>>> try:
a = float(input('Enter a number: '))
except ValueError:
print("You entered an invalid number")
上述代码中指定了需要处理的错误类型,如ValueError。
现在给出一个无效输入,如下所示
Enter a number: 3/4
You entered an invalid number
你也可以使用intput()函数来输出一些提示信息,告诉用户需要输入什么样的数据
>>> a = input("Input a integer: ")
用户看到提示信息后输入
Input a integer: 1
本课程学习的内容中有许多程序会要求魱输入一个数字,所以必须确保在数字在使用之前已经做了适当的转换,我们可以在单个语句中组合输入函数和转换函数
>>> a = int(input())
1
>>> a + 1
2
此处,依然不能输入浮点型,不然会报ValueError类型异常
假设我们需要输入的数字为整数,此时我们可以像之前那样做一个ValueError异常捕获,这样一来,程序将会捕获浮点数,这些浮点数对于只针对整数的程序没有作用。然而,也需要标记像1.0,2.0这样的数字,他们的作用等同于整数,它们也可以作为整数程序的正确输入。
为了解决这个问题,我们可以使用is_integer()函数来过滤掉那些小数点后面还带有有效数字的浮点数,留下整数或等同于整数的浮点数(只适用于float数据,不适用以整数输入的数字)
>>> 1.1.is_integer()
False
>>> 1.0.in_integer()
True
通过上述例子,我们可以看到,is_integer()函数可以过滤掉非整数输入,同时保留等价于整数的浮点数,如1.0,稍后会将这种方法应用于更大的程序
1.4.2 将分数和复数作为输入
事实上,对于分数的接受操作我们之前已经有所接触了。那就是将一个分数使用Fraction类来转换成Fraction对象
>>> a = Fraction(input('Enter a fraction: '))
Enter a fraction: 3/4
>>> a
Fraction(3, 4)
尝试输入一个分数如:3/0
>>> a = Fraction(input('Enter a fraction: '))
Enter a fraction: 3/0
Traceback (most recent call last):
File "<pyshell#18>", line 1, in <module>
a = Fraction(input('Enter a fraction: '))
File "D:\User\Python\lib\fractions.py", line 178, in __new__
raise ZeroDivisionError('Fraction(%s, 0)' % numerator)
ZeroDivisionError: Fraction(3, 0)
ZeroDivisionError异常信息告诉我们,分母为0的分数无效,所以我们一个正常的程序需要始终取捕获此类异常,可以这样做:
>>> try:
a = Fraction(input('Enter a fraction: '))
except ZeroDivisionError:
print('Invalid fraction')
Enter a fraction: 3/0
Invalid fraction
此时对于分母为0的这种无效输入我们就可以捕获了,输出Invalid fraction信息。
类似,对于复数而言,complex()函数可以将一个如‘2+3j’字符串转化为复数
>>> z = complex(input('Enter a complex number: '))
Enter a complex number: 2+3j
>>> z
(2+3j)
此处复数加号两边如果加了空格,就会报错,
>>> z = complex(input('Enter a complex number: '))
Enter a complex number: 2 + 3j
Traceback (most recent call last):
File "<pyshell#21>", line 1, in <module>
z = complex(input('Enter a complex number: '))
ValueError: complex() arg is a malformed string
可以看出,它是一个ValueError异常,对于这类异常捕获刚刚已经说过了,只需要except 后指定异常类型即可,我们将字符串转换为复数时,最好捕获此类异常
相关推荐
- 面试官:来,讲一下枚举类型在开发时中实际应用场景!
-
一.基本介绍枚举是JDK1.5新增的数据类型,使用枚举我们可以很好的描述一些特定的业务场景,比如一年中的春、夏、秋、冬,还有每周的周一到周天,还有各种颜色,以及可以用它来描述一些状态信息,比如错...
- 一日一技:11个基本Python技巧和窍门
-
1.两个数字的交换.x,y=10,20print(x,y)x,y=y,xprint(x,y)输出:102020102.Python字符串取反a="Ge...
- Python Enum 技巧,让代码更简洁、更安全、更易维护
-
如果你是一名Python开发人员,你很可能使用过enum.Enum来创建可读性和可维护性代码。今天发现一个强大的技巧,可以让Enum的境界更进一层,这个技巧不仅能提高可读性,还能以最小的代价增...
- Python元组编程指导教程(python元组的概念)
-
1.元组基础概念1.1什么是元组元组(Tuple)是Python中一种不可变的序列类型,用于存储多个有序的元素。元组与列表(list)类似,但元组一旦创建就不能修改(不可变),这使得元组在某些场景...
- 你可能不知道的实用 Python 功能(python有哪些用)
-
1.超越文件处理的内容管理器大多数开发人员都熟悉使用with语句进行文件操作:withopen('file.txt','r')asfile:co...
- Python 2至3.13新特性总结(python 3.10新特性)
-
以下是Python2到Python3.13的主要新特性总结,按版本分类整理:Python2到Python3的重大变化Python3是一个不向后兼容的版本,主要改进包括:pri...
- Python中for循环访问索引值的方法
-
技术背景在Python编程中,我们经常需要在循环中访问元素的索引值。例如,在处理列表、元组等可迭代对象时,除了要获取元素本身,还需要知道元素的位置。Python提供了多种方式来实现这一需求,下面将详细...
- Python enumerate核心应用解析:索引遍历的高效实践方案
-
喜欢的条友记得关注、点赞、转发、收藏,你们的支持就是我最大的动力源泉。根据GitHub代码分析统计,使用enumerate替代range(len())写法可减少38%的索引错误概率。本文通过12个生产...
- Python入门到脱坑经典案例—列表去重
-
列表去重是Python编程中常见的操作,下面我将介绍多种实现列表去重的方法,从基础到进阶,帮助初学者全面掌握这一技能。方法一:使用集合(set)去重(最简单)pythondefremove_dupl...
- Python枚举类工程实践:常量管理的标准化解决方案
-
本文通过7个生产案例,系统解析枚举类在工程实践中的应用,覆盖状态管理、配置选项、错误代码等场景,适用于Web服务开发、自动化测试及系统集成领域。一、基础概念与语法演进1.1传统常量与枚举类对比#传...
- 让Python枚举更强大!教你玩转Enum扩展
-
为什么你需要关注Enum?在日常开发中,你是否经常遇到这样的代码?ifstatus==1:print("开始处理")elifstatus==2:pri...
- Python枚举(Enum)技巧,你值得了解
-
枚举(Enum)提供了更清晰、结构化的方式来定义常量。通过为枚举添加行为、自动分配值和存储额外数据,可以提升代码的可读性、可维护性,并与数据库结合使用时,使用字符串代替数字能简化调试和查询。Pytho...
- 78行Python代码帮你复现微信撤回消息!
-
来源:悟空智能科技本文约700字,建议阅读5分钟。本文基于python的微信开源库itchat,教你如何收集私聊撤回的信息。[导读]Python曾经对我说:"时日不多,赶紧用Python"。于是看...
- 登录人人都是产品经理即可获得以下权益
-
文章介绍如何利用Cursor自动开发Playwright网页自动化脚本,实现从选题、写文、生图的全流程自动化,并将其打包成API供工作流调用,提高工作效率。虽然我前面文章介绍了很多AI工作流,但它们...
- Python常用小知识-第二弹(python常用方法总结)
-
一、Python中使用JsonPath提取字典中的值JsonPath是解析Json字符串用的,如果有一个多层嵌套的复杂字典,想要根据key和下标来批量提取value,这是比较困难的,使用jsonpat...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python自定义函数 (53)
- python进度条 (67)
- python吧 (67)
- python字典遍历 (54)
- python的for循环 (65)
- python格式化字符串 (61)
- python串口编程 (60)
- python读取文件夹下所有文件 (59)
- java调用python脚本 (56)
- python操作mysql数据库 (66)
- python字典增加键值对 (53)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python人脸识别 (54)
- python多态 (60)
- python命令行参数 (53)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)