百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Python数字编程 第一章 第三、四节

off999 2024-10-11 14:02 20 浏览 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 后指定异常类型即可,我们将字符串转换为复数时,最好捕获此类异常

相关推荐

PYTHON-简易计算器的元素介绍

[烟花]了解模板代码的组成importPySimpleGUIassg#1)导入库layout=[[],[],[]]#2)定义布局,确定行数window=sg.Window(&#...

如何使用Python编写一个简单的计算器程序

Python是一种简单易学的编程语言,非常适合初学者入门。本文将教您如何使用Python编写一个简单易用的计算器程序,帮助您快速进行基本的数学运算。无需任何高深的数学知识,只需跟随本文的步骤,即可轻松...

用Python打造一个简洁美观的桌面计算器

最近在学习PythonGUI编程,顺手用Tkinter实现了一个简易桌面计算器,功能虽然不复杂,但非常适合新手练手。如果你正在学习Python,不妨一起来看看这个项目吧!项目背景Tkint...

用Python制作一个带图形界面的计算器

大家好,今天我要带大家使用Python制作一个具有图形界面的计算器应用程序。这个项目不仅可以帮助你巩固Python编程基础,还可以让你初步体验图形化编程的乐趣。我们将使用Python的tkinter库...

用python怎么做最简单的桌面计算器

有网友问,用python怎么做一个最简单的桌面计算器。如果只强调简单,在本机运行,不考虑安全性和容错等的话,你能想到的最简单的方案是什么呢?我觉得用tkinter加eval就够简单的。现在开整。首先创...

说好的《Think Python 2e》更新呢!

编程派微信号:codingpy本周三脱更了,不过发现好多朋友在那天去访问《ThinkPython2e》的在线版,感觉有点对不住呢(实在是没抽出时间来更新)。不过还好本周六的更新可以实现,要不就放一...

构建AI系统(三):使用Python设置您的第一个MCP服务器

是时候动手实践了!在这一部分中,我们将设置开发环境并创建我们的第一个MCP服务器。如果您从未编写过代码,也不用担心-我们将一步一步来。我们要构建什么还记得第1部分中Maria的咖啡馆吗?我们正在创...

函数还是类?90%程序员都踩过的Python认知误区

那个深夜,你在调试代码,一行行检查变量类型。突然,一个TypeError错误蹦出来,你盯着那句"strobjectisnotcallable",咖啡杯在桌上留下了一圈深色...

《Think Python 2e》中译版更新啦!

【回复“python”,送你十本电子书】又到了周三,一周快过去一半了。小编按计划更新《ThinkPython2e》最新版中译。今天更新的是第五章:条件和递归。具体内容请点击阅读原文查看。其他章节的...

Python mysql批量更新数据(兼容动态数据库字段、表名)

一、应用场景上篇文章我们学会了在pymysql事务中批量插入数据的复用代码,既然有了批量插入,那批量更新和批量删除的操作也少不了。二、解决思路为了解决批量删除和批量更新的问题,提出如下思路:所有更新语...

Python Pandas 库:解锁 combine、update 和compare函数的强大功能

在Python的数据处理领域,Pandas库提供了丰富且实用的函数,帮助我们高效地处理和分析数据。今天,咱们就来深入探索Pandas库中四个功能独特的函数:combine、combine_fi...

记录Python3.7.4更新到Python.3.7.8

Python官网Python安装包下载下载文件名称运行后选择升级选项等待安装安装完毕打开IDLE使用Python...

Python千叶网原图爬虫:界面化升级实践

该工具以Python爬虫技术为核心,实现千叶网原图的精准抓取,突破缩略图限制,直达高清资源。新增图形化界面(GUI)后,操作门槛大幅降低:-界面集成URL输入、存储路径选择、线程设置等核心功能,...

__future__模块:Python语言版本演进的桥梁

摘要Python作为一门持续演进的编程语言,在版本迭代过程中不可避免地引入了破坏性变更。__future__模块作为Python兼容性管理的核心机制,为开发者提供了在旧版本中体验新特性的能力。本文深入...

Python 集合隐藏技能:add 与 update 的致命区别,90% 开发者都踩过坑

add函数的使用场景及错误注意添加单一元素:正确示例:pythons={1,2}s.add(3)print(s)#{1,2,3}错误场景:试图添加可变对象(如列表)会报错(Pytho...

取消回复欢迎 发表评论: