Python 中的百分号是什么意思[重复]

2025-02-21 08:50:00
admin
原创
8
摘要:问题描述:本教程中有一个查找素数的例子:>>> for n in range(2, 10): ... for x in range(2, n): ... if n % x == 0: ... print(n, 'equals', x, '*',...

问题描述:

本教程中有一个查找素数的例子:

>>> for n in range(2, 10):
...     for x in range(2, n):
...         if n % x == 0:
...             print(n, 'equals', x, '*', n//x)
...             break
...     else:
...         # loop fell through without finding a factor
...         print(n, 'is a prime number')
...

我知道 double==是相等性的测试,但我不明白这if n % x部分。比如我可以口头说明每个部分并说出该语句对示例的作用。但我不明白百分号是如何落入的。

究竟说了什么if n % x


解决方案 1:

% 会根据其参数执行两项操作。在本例中,它充当模运算符,这意味着当其参数为数字时,它会将第一个数字除以第二个数字并返回余数34 % 10 == 4因为 34 除以 10 等于 3,余数为 4。

如果第一个参数是字符串,则使用第二个参数对其进行格式化。这有点复杂,所以我将参考文档,但仅作为示例:

>>> "foo %d bar" % 5
'foo 5 bar'

然而,从Python 3.1开始,字符串格式化行为得到了补充,以支持字符串.format()机制:

这里描述的格式化操作表现出各种怪癖,导致了许多常见错误(例如无法正确显示元组和字典)。使用较新的str.format()界面有助于避免这些错误,并且还提供了一种更强大、更灵活、更可扩展的文本格式化方法。

值得庆幸的是,几乎所有新功能都可以从 Python 2.6 开始使用。

解决方案 2:

模数运算符;计算左侧值除以右侧值的余数。例如:

3 % 1等于零(因为 3 能被 1 整除)

3 % 2等于 1(因为 3 除以 2 的余数为 1)。

解决方案 3:

百分比符号代表什么意思?

它是 Python 中的一个运算符,根据上下文可以表示多种含义。后面的很多内容在其他答案中已经提到(或暗示过),但我认为提供更详尽的总结可能会有所帮助。

%对于数字:模运算/余数/其余

百分号是Python 中的一个运算符。它的描述如下:

x % y       remainder of x / y

因此,如果您用 y “整除” x,它会给出数 。通常(至少在 Python 中)给定一个数字和一个除数:x`y`

x == y * (x // y) + (x % y)

例如,如果将 5 除以 2:

>>> 5 // 2
2
>>> 5 % 2
1

>>> 2 * (5 // 2) + (5 % 2)
5

一般来说,你使用模运算来测试一个数字是否能被另一个数字整除,这是因为一个数字的倍数对该数字取模会返回 0:

>>> 15 % 5  # 15 is 3 * 5
0

>>> 81 % 9  # 81 is 9 * 9
0

这就是它在您的例子中的用法,如果它是另一个数字的倍数(除了它本身和一),它就不能是质数,这就是它的作用:

if n % x == 0:
    break

如果您觉得这n % x == 0不太具描述性,您可以将其放在另一个具有更具描述性名称的函数中:

def is_multiple(number, divisor):
    return number % divisor == 0

...

if is_multiple(n, x):
    break

is_multiple也可以用名称或类似名称来代替evenly_divides。这就是这里要测试的内容。

类似地,它通常用于判断一个数字是“奇数”还是“偶数”:

def is_odd(number):
    return number % 2 == 1

def is_even(number):
    return number % 2 == 0

在某些情况下,当需要环绕(循环)行为时,它还用于数组/列表索引,然后只需将“索引”除以“数组长度”即可实现:

>>> l = [0, 1, 2]
>>> length = len(l)
>>> for index in range(10):
...     print(l[index % length])
0
1
2
0
1
2
0
1
2
0

请注意,标准库中也有此运算符的函数operator.mod(及别名operator.__mod__):

>>> import operator
>>> operator.mod(5, 2)  # equivalent to 5 % 2
1

但还有增强赋值%=,将结果分配回变量:

>>> a = 5
>>> a %= 2  # identical to: a = a % 2
>>> a
1

%对于字符串:printf-style 字符串格式

对于字符串来说,含义完全不同,只有一种方法(在我看来是最有限和最丑陋的)进行字符串格式化:

>>> "%s is %s." % ("this", "good") 
'this is good'

这里%字符串中的 表示占位符,后面跟着格式规范。在本例中,我使用了%s,表示它需要一个字符串。然后字符串后面跟着 ,%表示左侧的字符串将被右侧格式化。在本例中,第一个%s被第一个参数替换this,第二个%s被第二个参数替换(good)。

请注意,有更好的(可能是基于观点的)方法来格式化字符串:

>>> "{} is {}.".format("this", "good")
'this is good.'

%在 Jupyter/IPython 中:魔法命令

引用文档:

对于 Jupyter 用户:Magics 是 IPython 内核特有的,由其提供。Magics 是否可在内核上使用由内核开发人员根据每个内核做出决定。要正常工作,Magics 必须使用在底层语言中无效的语法元素。例如,IPython 内核使用%magics 的语法元素,因为%它在 Python 中不是有效的一元运算符。而该语法元素在其他语言中是有意义的。

这在 Jupyter 笔记本和类似软件中经常使用:

In [1]:  a = 10
         b = 20
         %timeit a + b   # one % -> line-magic

54.6 ns ± 2.7 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)

In [2]:  %%timeit  # two %% -> cell magic 
         a ** b

362 ns ± 8.4 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

数组上的运算符%(在 NumPy / Pandas 生态系统中)

当应用于这些数组时,该%运算符仍然是模运算符,但它返回一个包含数组中每个元素余数的数组:

>>> import numpy as np
>>> a = np.arange(10)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

>>> a % 2
array([0, 1, 0, 1, 0, 1, 0, 1, 0, 1])

%为您自己的类定制运算符

当然,您可以自定义当%运算符应用于您自己的类时它们的工作方式。通常,您只使用它来实现模运算!但这只是一条指导原则,而不是硬性规定。

仅提供一个简单的例子来说明它是如何工作的:

class MyNumber(object):
    def __init__(self, value):
        self.value = value

    def __mod__(self, other):
        print("__mod__ called on '{!r}'".format(self))
        return self.value % other

    def __repr__(self):
        return "{self.__class__.__name__}({self.value!r})".format(self=self)

这个例子其实没什么用,它只是打印然后将运算符委托给存储的值,但它显示了当应用于实例__mod__时调用:%

>>> a = MyNumber(10)
>>> a % 2
__mod__ called on 'MyNumber(10)'
0

请注意,它也适用于%=无需明确实现的情况__imod__

>>> a = MyNumber(10)
>>> a %= 2
__mod__ called on 'MyNumber(10)'

>>> a
0

但是您也可以__imod__明确实施以覆盖增强分配:

class MyNumber(object):
    def __init__(self, value):
        self.value = value

    def __mod__(self, other):
        print("__mod__ called on '{!r}'".format(self))
        return self.value % other

    def __imod__(self, other):
        print("__imod__ called on '{!r}'".format(self))
        self.value %= other
        return self

    def __repr__(self):
        return "{self.__class__.__name__}({self.value!r})".format(self=self)

现在%=明确覆盖以就地工作:

>>> a = MyNumber(10)
>>> a %= 2
__imod__ called on 'MyNumber(10)'

>>> a
MyNumber(0)

解决方案 4:

虽然这有点偏离主题,因为人们会通过搜索“Python 中的百分号”找到它(就像我一样),但我想指出的是,% 符号也用于在 iPython 中为“魔术”函数添加前缀:https://ipython.org/ipython-doc/3/interactive/tutorial.html#magic-functions

解决方案 5:

在 Python 2.6 中,“%”运算符执行模数运算。我认为他们在 3.0.1 中没有改变它

模运算符告诉您两个数字相除的余数。

解决方案 6:

它检查除法的模数。例如,假设您要遍历从 2 到 n 的所有数字,并检查 n 是否可以被其间的任意数字整除。简而言之,您要检查给定数字 n 是否为素数。(提示:您可以检查到 n/2)。

解决方案 7:

模数运算符。两个数相除后的余数。

例如:

>>> 5 % 2 = 1 # remainder of 5 divided by 2 is 1
>>> 7 % 3 = 1 # remainer of 7 divided by 3 is 1
>>> 3 % 1 = 0 # because 1 divides evenly into 3

解决方案 8:

x % n == 0

这意味着 x/n 和提醒的值将作为结果并与零进行比较......

例如:4/5==0

4/5 提醒是 4

4==0(假)

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1267  
  IPD(Integrated Product Development)即集成产品开发,是一套先进的、成熟的产品开发管理理念、模式和方法。随着市场竞争的日益激烈,企业对于提升产品开发效率、降低成本、提高产品质量的需求愈发迫切,IPD 项目管理咨询市场也迎来了广阔的发展空间。深入探讨 IPD 项目管理咨询的市场需求与发展,...
IPD集成产品开发流程   27  
  IPD(Integrated Product Development)产品开发流程是一套先进的、被广泛应用的产品开发管理体系,它涵盖了从产品概念产生到产品推向市场并持续优化的全过程。通过将市场、研发、生产、销售等多个环节紧密整合,IPD旨在提高产品开发的效率、质量,降低成本,增强企业的市场竞争力。深入了解IPD产品开发...
IPD流程中TR   31  
  IPD(Integrated Product Development)测试流程是确保产品质量、提升研发效率的关键环节。它贯穿于产品从概念到上市的整个生命周期,对企业的成功至关重要。深入理解IPD测试流程的核心要点,有助于企业优化研发过程,打造更具竞争力的产品。以下将详细阐述IPD测试流程的三大核心要点。测试策略规划测试...
华为IPD   26  
  华为作为全球知名的科技企业,其成功背后的管理体系备受关注。IPD(集成产品开发)流程作为华为核心的产品开发管理模式,在创新管理与技术突破方面发挥了至关重要的作用。深入剖析华为 IPD 流程中的创新管理与技术突破,对于众多企业探索自身发展路径具有重要的借鉴意义。IPD 流程概述IPD 流程是一种先进的产品开发管理理念和方...
TR评审   26  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用