Python While循环示例
这是一个理解while循环的例子,在我正在阅读的一本书中,我不太明白为什么要划分楼层,然后是y%x?谁能解释一下这段代码,它在做什么 谢谢 这是一个跛脚的人 %是的。它执行除法并返回余数,而不是除法的结果。例如,5//2==2和5%2==1 评论:Python While循环示例,python,while-loop,prime-factoring,Python,While Loop,Prime Factoring,这是一个理解while循环的例子,在我正在阅读的一本书中,我不太明白为什么要划分楼层,然后是y%x?谁能解释一下这段代码,它在做什么 谢谢 这是一个跛脚的人 %是的。它执行除法并返回余数,而不是除法的结果。例如,5//2==2和5%2==1 评论: x = y // 2 # For some y > 1 while x > 1: if y % x == 0: # Remainder print(y, 'has factor', x) break
x = y // 2 # For some y > 1
while x > 1:
if y % x == 0: # Remainder
print(y, 'has factor', x)
break # Skip else
x -= 1
else: # Normal exit
print(y, 'is prime')
逻辑是:
如果y模x为0,则意味着x是y的除数,因此y有一个因子。打印出来,然后打破循环
如果不是,请将x减小1,然后重试
但在这段代码中有些东西被破坏了:
else语句的位置
“print y is prime”在循环之后,它将始终打印它。
我认为该计划试图找出y的最大主要因素。 如果y是素数因子,它也会打印出来。x=y//2用于测试x:2..y/2范围内的数字。
更好的方法是只测试数字x:2..sqrty程序至少打印整数y的一个因子,或者如果它没有除自身和1以外的因子,则打印y为素数 它使用变量x来尝试所有大于1的可能因素。它从y除以2开始,因为任何大于y的一半的数字都不能成为因子。如果y是奇数,使用普通除法而不是楼层除法可以得到一个分数。更好的解决方案是从y的平方根开始——如果y不是素数,它的一个因子将小于或等于它的平方根 在循环内部,它测试y%x,这是y除以x后的余数。如果余数为零,这意味着x是y的一个因子,它会打印它 除非找到一个因子,否则else子句将在循环结束时执行,在这种情况下,break将跳出循环并跳出else子句。所以要么找到一个因子,要么就是素数 下面是修正缩进的改进代码:
x = y // 2 # For some y > 1 ##Reduce search space to half of y
while x > 1:
if y % x == 0: # Remainder ##If x divides y cleanly (4 / 2 == 2)
print(y, 'has factor', x) ##y is not prime
break # Skip else ##Exit the loop
x -= 1 # Normal exit ##Try the next value
else:
print(y, 'is prime')
代码只是检查是否已达到x的平方根。请注意,您可以通过检查从2到x的平方根的整数是否完全不带余数地除以x来检查数字的素性。表示一个模数,它给出除法的余数 这段代码检查素数Y,也检查Y是否是x的乘法器 x=y//2 x=y的除法或模,2 当x>1时:要检查这是除法结果还是模数 如果y%x==0:如果y是x的乘数
import math
def check_primality(y):
x = int(math.sqrt(y))
while x > 1:
if y % x == 0:
print y, 'has factor', x
break
x -= 1
else:
print y, 'is prime'
else:如果wihle达到x>1且未中断,则执行此行
普林蒂,“是质数”
因此,如果y是x的乘数,它将减小x,循环将继续
否则它将打印y为素数对于任何非素数的数字x,将有一个大于1小于x/2的因子。 9 = 3*3
逻辑是遍历编辑器注意到的所有数字,else子句应该与while语句内联,而不是if语句,这是C:-这个答案没有多大帮助,因为代码是错误的:它打印y是素数,即使它不是。x-=1 else://SyntaxError:无效语法,如果你想优化,你可以在x>1时将其改为s=sqrty,而x>sdmazzoni:else在错误的位置。这件事已经解决了。奥弗里·拉维夫:你说得对。这是一个糟糕的素性测试,这是它的正常优化。其他的则包括记忆或其他形式的缓存。如果y非常大,则需要比修改的sieve方法更聪明的方法。您可能需要注意,您的代码在2.*下无法工作。
print(y, 'has factor', x)
break # break the while loop
x -= 1 # decreament x