Python 中的模运算符 (%)(真实示例)

2023-10-13

Python 模运算符,由百分号 (%) 表示,是用于各种算术运算的数学运算符。

当您使用模运算符时,它返回两个数字之间除法运算的余数。

模运算符的强大功能超出了简单算术的范围。它在 Python 编程中具有广泛的实际用途,我们将在本教程中深入探讨。

我们将探索如何将它与整数和浮点数一起使用,处理零和负数,执行各种计算,甚至在密码学、时间计算、字符串格式化、随机数生成和哈希函数等上下文中使用它。

 

 

计算余数

模运算符主要用于计算除法运算的余数:


dividend = 123456789
divisor = 98765
remainder = dividend % divisor
print(remainder)
  

Output:


539
  

在这个例子中,我们计算余数123456789除以98765。 Python 模运算符返回余数539正如预期的那样。

为了解释这一点,假设您执行 23 % 4,我们将 23 分为尽可能多的 4 组(即 5),之后剩下的 (3) 就是模运算的结果。


Thus, the Python modulo operator can handle large numbers and is a powerful operator in various mathematical operations.
This operation is especially useful when you need to check if a number is divisible by another without any remainder or if you need to calculate the remainder directly.

 

Python 模运算符和除运算符

Python 模运算符和除法运算符由于涉及类似的算术运算而经常混淆。

然而,它们有不同的目的。让我们举个例子来更好地理解这一点:


a = 10
b = 3
division_result = a / b
integer_division_result = a // b
remainder = a % b

print(f"Division Result: {division_result}")
print(f"Integer Division Result: {integer_division_result}")
print(f"Remainder: {remainder}")
  

Output:


Division Result: 3.3333333333333335
Integer Division Result: 3
Remainder: 1
  

在上面的代码中,我们执行了三种不同的运算:除法、整数除法和模运算。
The 除法运算 (a / b) 给出一个浮点数,表示精确除法结果a除以b.
The 整数除法运算 (a // b) 提供小于或等于除法结果的最大整数。在这里,是3, as 3是小于的最大整数3.33.
最后,模运算 (a % b) 返回两个数字相除的余数。在这里,当10除以3,余数为1.
因此,虽然所有这些运算符都涉及算术除法相关运算,但它们各自提供不同的结果。

 

Python 具有整数和浮点数的模运算符

Python 模运算符用途广泛,因为它可以对整数和浮点数进行运算。虽然操作相似,但返回的结果有些差异。


integer_a = 10
integer_b = 3
integer_remainder = integer_a % integer_b

float_a = 10.0
float_b = 3.0
float_remainder = float_a % float_b

print(f"Integer Remainder: {integer_remainder}")
print(f"Float Remainder: {float_remainder}")
  

Output:


Integer Remainder: 1
Float Remainder: 1.0
  

第一个运算对两个整数执行模运算。这里,10除以3留下剩余的1.
第二个运算对两个浮点数执行模运算。

结果与第一个运算类似,但余数是浮点数,1.0,不是整数。

当你这样做时5.5 % 2.0,我们可以将 2.0 完全拟合到 5.5 中两次,然后就得到 1.5 的余数。

这种行为差异展示了 Python 的模运算符如何处理不同的数据类型并仍然执行相同的数学运算。

 

Python 带零的模运算符

虽然模运算符适用于大多数数字,但一个重要的例外是除以零。如果您尝试使用 Python 模运算符以零作为除数,Python 将引发ZeroDivisionError.


a = 10
b = 0
try:
    remainder = a % b
except ZeroDivisionError:
    print("Error: Division by zero is not allowed!")
  

Output:


Error: Division by zero is not allowed!
  

在这个例子中,我们尝试计算余数10除以0。正如预期的那样,Python 提出了一个ZeroDivisionError,我们的异常处理代码会打印一条自定义错误消息。

 

处理负数

Python 模运算符还可以处理负数。有趣的是,Python 如何处理此类情况:


a = -10
b = 3
remainder = a % b
print(remainder)
  

Output:


2
  

在上面的代码中,我们试图找到剩余的-10除以3。 Python 返回2代替-1,这可能是意想不到的。
Python 的行为取决于它实现模运算的方式。它确保余数始终与除数具有相同的符号。如果除数为正,则余数也为正。
此功能使得 Python 的模运算符在某些情况下特别有用,例如在密码学中围绕范围内的值或模算术,我们将在本教程后面看到。

 

使用 math.fmod() 进行模运算

Python 提供了另一个函数来执行求模运算:math.fmod()。它是Python的一部分math模块并执行类似于的模运算%操作员。

然而,两者之间存在显着差异,尤其是在处理浮点数和负数时。

让我们看一些例子:


import math
print(10 % 3) # Output: 1
print(math.fmod(10, 3)) # Output: 1.0
print(-10 % 3) # Output: 2
print(math.fmod(-10, 3)) # Output: -1.0
print(10.5 % 3.5) # Output: 0.0
print(math.fmod(10.5, 3.5)) # Output: 0.0  

如您所见,对于正数,math.fmod() and %产生相同的结果,但是math.fmod()返回一个浮点数。

然而,当我们使用负数时,它们会产生不同的结果。

The %运算符总是返回与除数具有相同符号的结果,而math.fmod()返回与被除数具有相同符号的结果。

另外,两者math.fmod() and %运算符处理浮点数。

所以,两者之间的选择%运算符和math.fmod()取决于您的具体要求,尤其是在处理负数时。

 

使用 divmod() 进行模运算

Python 提供了一个内置函数,称为divmod()同时执行除法和模运算。

The divmod()函数接受两个参数:被除数和除数,并返回一个包含商和余数的元组。

使用方法如下:


print(divmod(10, 3)) # Output: (3, 1)
print(divmod(-10, 3)) # Output: (-4, 2)  

在第一个例子中,10除以3给出商3和剩余的1。在第二个例子中,-10除以3给出商-4和剩余的2.

这是因为 Python 将商向下舍入到最接近的整数,并且余数始终为正。

The divmod()当您需要除法的商和余数时,该函数特别方便。

 

模运算符和decimal.Decimal()

蟒蛇decimal模块提供对快速正确舍入的十进制浮点运算的支持。这在金融应用和其他需要精确的十进制表示和复杂算术的用途中特别有用。模运算也适用于decimal.Decimal() values.

让我们通过一些例子来探讨一下:


from decimal import Decimal
print(Decimal(10) % Decimal(3)) # Output: 1
print(Decimal(10.5) % Decimal(3.5)) # Output: 0.0
print(Decimal(-10) % Decimal(3)) # Output: -1
print(Decimal(-10.5) % Decimal(3.5)) # Output: -0.0  

上面的例子显示了Decimal类型的行为类似于带有模运算的浮点和整数类型。

需要注意的是decimal.Decimal()允许控制精度和算术上下文,这对于浮点和整数类型是不可能的。

 

Python 模运算符的实际应用

Python 模运算符不仅仅是一个数学工具。它的实用性扩展到许多实际应用中,使我们的编程任务变得更容易、更高效。

在本节中,我们将探讨模运算符的一些常见的实际用途。我们将研究素数识别、循环代码段、生成模式、密码学、时间计算、字符串格式化、随机数生成和哈希函数等领域。

让我们深入研究每个主题,以了解如何在这些不同的领域中使用模运算符。

 

寻找素数

在查找素数时,Python 模运算符是一个有用的工具。素数是大于一且只有两个约数的整数:一和它们本身。

我们可以使用模运算符来检查一个数字是否有其他约数。
让我们看看实际效果:


def is_prime(n):
    if n <= 1:
        return False
    for i in range(2, n):
        if n % i == 0:
            return False
    return True

print(is_prime(11))
print(is_prime(15))
  

Output:


True
False
  

在函数中is_prime,我们检查每个整数2 up to n-1看看是否n可以被这些数字中的任何一个整除。

If n可以被这些数字中的任何一个整除(即除法的余数为零),n不是素数。否则,它是素数。
所以在这里,11是素数,因为它只有两个约数,1 and 11。另一方面,15不是质数,因为它可以除以3 and 5除了1 and 15.

 

循环代码段中的模运算符

Python 模运算符还可以用于循环代码段,通常用于创建循环或重复模式。


for i in range(10):
    print(i % 3)
  

Output:


0
1
2
0
1
2
0
1
2
0
  

在上面的代码中,我们循环从0 to 9(10 个数字)。在循环内部,我们计算余数i除以3.

这导致了重复的模式0, 1, and 2因为任何数字除以3将留下剩余的任一0, 1, or 2.

 

生成交替模式

与循环代码段类似,Python 模运算符也可用于生成交替模式。

当处理图形中的颜色交替、模拟中的交替行为或只是简单的图案生成时,这变得特别有用。
这是一个例子:


for i in range(10):
    if i % 2 == 0:
        print("Even")
    else:
        print("Odd")
  

Output:


Even
Odd
Even
Odd
Even
Odd
Even
Odd
Even
Odd
  

在上面的代码中,我们循环从0 to 9(10 个数字)。对于每个数字,我们计算余数i除以2.

如果余数是0,我们打印"Even",表明该数是偶数。如果余数是1,我们打印"Odd",表示该数为奇数。

 

密码学中的模运算符

涉及模运算的模算术是密码学领域的基石。一个众所周知的例子是凯撒密码,一种替换密码,其中明文中的每个字母都在字母表中“移动”一定数量的位置。
这是演示凯撒密码的简化示例:


def caesar_encrypt_decrypt(text, shift):
    result = ""
    for char in text:
        ascii_offset = ord('a') if char.islower() else ord('A')
        cipher_char = chr((ord(char) - ascii_offset + shift) % 26 + ascii_offset)
        result += cipher_char
    return result

# Encrypt
plaintext = "hello"
encrypted = caesar_encrypt_decrypt(plaintext, 3)
print(f"Encrypted: {encrypted}")

# Decrypt
decrypted = caesar_encrypt_decrypt(encrypted, -3)
print(f"Decrypted: {decrypted}")
  

Output:


Encrypted: khoor
Decrypted: hello
  

在此示例中,我们通过将每个字母在字母表中向下移动 3 个位置来加密单词“hello”,并使用模运算来确保在必要时环绕字母表。为了解密,我们只需朝相反的方向移动即可。
请记住,虽然凯撒密码是了解基本密码学的优秀教育工具,但它不适合保护现实世界的敏感数据。

 

时间计算(将秒转换为 MM:SS 格式)

在处理时间计算时,尤其是当您需要环绕小时、分钟或秒时,模运算符也非常方便。

下面是使用它来计算特定持续时间后的时间的示例:


def add_time(hours, minutes, add_minutes):
    total_minutes = hours * 60 + minutes + add_minutes
    final_hours = (total_minutes // 60) % 24
    final_minutes = total_minutes % 60
    return final_hours, final_minutes

print(add_time(22, 30, 400))
  

Output:


(5, 10)
  

在此示例中,我们将 400 分钟添加到时间 22:30(晚上 10:30)。模运算符用于计算最终小时数(使用% 24以确保它保持在 24 小时范围内)和最后分钟(使用% 60使其保持在 60 分钟范围内)。

因此,22:30 之后的 400 分钟是 5:10。
这说明了 Python 模运算符如何帮助管理涉及环绕特定范围的计算。

 

格式化字符串中的模运算符

模运算符也可以在 Python 中用于格式化字符串。虽然.format()方法和 f 字符串现在更常用,模运算符仍然是格式化字符串的有效方法,特别是对于那些来自 C/C++ 背景的人来说,这种格式化风格很常见。
这是一个例子:


name = "John"
age = 28

formatted_string = "Hello, %s. You are %d years old." % (name, age)
print(formatted_string)
  

Output:


Hello, John. You are 28 years old.
  

在上面的代码中,%s是字符串的占位符,并且%d是整数的占位符。

变量name and age插入代替这些占位符以格式化字符串。
虽然这是模运算符的有效用法,但我们建议使用更现代的.format()Python 中的方法或 f 字符串可满足更复杂的格式化需求,因为它们更通用且更具可读性。

 

随机数生成

Python 的模运算符可以与随机数生成一起使用,以限制生成的数字的范围。
这是一个例子:


import random
random_number = random.randint(1, 1000)
bounded_random_number = random_number % 100
print(bounded_random_number)
  

在此代码中,我们首先生成一个介于1 and 1000使用Python的内置random.randint()功能。

然后我们使用模运算符将随机数限制在范围内0-99(包括)通过找到除以的余数100.
当您需要生成特定范围内的随机数时,此方法会很方便。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 中的模运算符 (%)(真实示例) 的相关文章

随机推荐

  • 关于约翰·斯特茨

    关于约翰 斯特茨 John 是一位狂热的 Python 爱好者 也是 Real Python 教程团队的成员 约翰的教程 Python 中的模字符串格式化 Python 中的递归 简介 Python 中的函数式编程 何时以及如何使用它 Py
  • pandas 排序方法入门

    有关这些视频中使用的 REPL 的更多信息 您可以查看蟒蛇以及真正的 Python 教程探索 bpython 具有类似 IDE 功能的 Python REPL
  • 漂亮的印花

    此外print Python 包括一个漂亮的印刷品方法 此方法对于以更易于阅读的格式输出有关对象的调试信息特别有用 gt gt gt gt gt gt from pprint import pprint gt gt gt data squa
  • Python 新闻:2021 年 12 月以来的新增内容

    目录 Python 指导委员会选举 Python 新版本 Python 3 6 生命周期结束 代码的出现 Python 的下一步是什么 In 2021 年 12 月 第四个Python指导委员会像往常一样 由新成员和回归成员组成 Pytho
  • 第 12 集:Python 中的网页抓取:工具、技术和合法性

    第 12 集 Python 中的网页抓取 工具 技术和合法性 真正的 Python 播客 2020年6月5日50公尺 RSS Apple Podcasts Google Podcasts Spotify More 播客瘾君子 灰蒙蒙 袖珍铸
  • 列表:有序和任意

    您已经了解了如何创建列表 在本课程中 您将了解到列表是有序的并且可以包含任意对象的集合 定义列表时使用的顺序在列表的生命周期内保持不变 包含相同元素但顺序不同的列表是不同的 gt gt gt gt gt gt a spam egg baco
  • 在“for”循环中使用 .append() 进行附加处理

    有关本课程所涵盖概念的更多信息 您可以查看 Python enumerate 简化需要计数器的循环 真正的Python文章 Python for 循环 确定迭代 真正的Python文章
  • 设计和指导:Python 中的 OOP(概述)

    编写优秀的面向对象代码不仅仅是如何编写 句法 知道何时和何时不使用它 以及指导原则 在后面面向对象设计将帮助您编写更好的代码 在本课程中 您将了解 中的面向对象方法Python 与其他语言 您的情况不应该使用Python 中的类 继承的替代
  • 使用 Sed 命令在 Linux 中追加文本

    Sed提供根据特定模式或条件将文本附加到文件中的行的能力 您可以使用a 命令输入sed在模式匹配后添加新行 让我们深入研究现实世界的示例 以了解如何有效地利用此功能 目录 hide 1 在匹配的模式后添加一行 2 在匹配的模式后追加多行 3
  • Linux Web 服务器 (Apache) 的安装、配置和故障排除

    在本教程中 我们将具体讨论 Linux Web 服务器或 Apache Web 服务器 以及如何安装和配置它以向其他人提供您的内容 Web 服务器是一个通过 HTTP 协议处理请求的系统 您向服务器请求一个文件 它会响应所请求的文件 这可能
  • 使用 Curl 命令的 RESTful API 交互

    主要用途之一curl与 RESTful API 进行交互 RESTful API 是许多现代 Web 应用程序和服务的支柱 在本教程中 您将学习如何使用 RESTful API 进行交互卷曲命令 获取数据 发布信息以及解析各种响应 目录 h
  • NumPy 数组重塑指南

    The NumPyPython 中的库提供了强大的功能来重塑数组的维度 这就是我们将在本教程中深入探讨的内容 在整个教程中 我们将介绍 NumPy 数组重塑的含义及其重要性 然后再深入研究如何重塑不同维度的数组的细节 在本教程结束时 您将熟
  • Python 分析(检测 CPU 和内存瓶颈)

    您是否一直在代码中处理包含大量数据的数据集 并且一旦执行代码 您就会发现代码需要很长时间才能产生最终输出 嗯 这可能会令人沮丧 您可能使用了正确的语法 并且逻辑也是正确的 然而 该代码会消耗大量 RAM 并且执行时间过长 这时您应该考虑优化
  • 使用 to_json 将 Python Pandas DataFrame 转换为 JSON

    The to json函数在转换时特别有用PandasDataFrame 到 JSON 文件 它允许您转换并返回可编写为 JSON 文件的可序列化对象 该函数具有多个参数 可提供 JSON JavaScript 对象表示法 输出的自定义 其
  • 使用 Pandas loc 按多个条件选择数据

    熊猫优惠洛克财产 一种基于标签的数据选择方法 允许您根据多个条件选择数据 本教程旨在指导您在多种条件下使用 Pandas loc 函数 目录 hide 1 了解多个条件的逻辑运算符 2 使用 AND 运算符 组合条件 3 使用 OR 运算符
  • 使用 Python NLTK 的自然语言处理 (NLP)(简单示例)

    自然语言工具包 NLTK 是一个为符号和自然语言处理任务创建的 Python 库 它有潜力让每个人都可以进行自然语言处理 从英语到任何自然人类语言 目录 hide 1 安装 Python NLTK 2 文本预处理 3 句子和单词标记化
  • 如何在Python中对数字进行四舍五入

    处理数字是编程的重要组成部分 尤其是在科学应用或处理货币价值时 在这里 Python 中对数字进行四舍五入的需求变得至关重要 它允许我们将数字调整到附近的值 通常是为了降低其复杂性或使其达到一定的精度 让我们深入探讨如何在 Python 中
  • 使用 Sed p 命令打印行:综合指南

    The p命令输入sed用于打印当前模式空间 即当前文本行 您可以使用sed命令与p从文件中打印文本行的选项如下 sed n p filename 在本教程中 您将了解使用sed p用于打印文件或数据流中的行的命令 目录 hide 1 打印
  • Python Pandas 教程(数据分析初学者指南)

    Pandas 是一个开源的高性能库 可用于数据分析 机器学习和特征工程等多种用途 Pandas 库是数据科学家武器库中的关键工具之一 它是一个用于数据分析和操作的强大 Python 包 目录 hide 1 Python 熊猫安装 2 Pan
  • Python 中的模运算符 (%)(真实示例)

    Python 模运算符 由百分号 表示 是用于各种算术运算的数学运算符 当您使用模运算符时 它返回两个数字之间除法运算的余数 模运算符的强大功能超出了简单算术的范围 它在 Python 编程中具有广泛的实际用途 我们将在本教程中深入探讨 我