【发布时间】:2020-10-29 14:57:18
【问题描述】:
我在使用素因数分解的代码时遇到语法错误
这是代码
from sys import argv
from os import system, get_terminal_size
from math import sqrt
number = int(argv[1])
width = get_terminal_size().columns
prime_numbers = []
prime_factors = []
_ = system('clear')
print()
def is_prime(n):
for i in range(2, n):
if n % i == 0:
return False
return True
if is_prime(number):
print(f"It is a prime number \nIts only factors are 1 and itself \n1, {number}")
exit()
x = len(str(number))
for i in range(2, int(sqrt(number))):
if is_prime(i):
prime_numbers.append(i)
#print(f"found ")
#print(prime_numbers)
i = 0
while True:
if (number % prime_numbers[i] != 0):
i += 1
continue
prime_factors.append(prime_numbers[i])
print("%2d | %3d".center(width) % (prime_numbers[i], number))
print("_________".center(width))
number /= prime_numbers[i]
if number == 1:
break
print("1".center(width))
print("Answer ")
i = len(prime_factors)
j = 1
for k in prime_factors:
if j == i:
print(k)
break
print(f"{k}", end=" X ")
j += 1
这适用于小于 4 或 5 位的小数字,但对于较大的数字会产生索引错误。 如果我在第 24 行删除 sqrt 函数,它开始花费太长时间。
错误看起来像这样
Traceback (most recent call last):
File "prime-factor.py", line 33, in <module>
if (number % prime_numbers[i] != 0):
IndexError: list index out of range
real 0m0.049s
user 0m0.030s
sys 0m0.014s
(base) Souravs-MacBook-Pro-5:Fun-Math-Algorithms aahaans$ time python3 prime-factor.py 145647
我无法解决此问题,如果您能帮助我,我将不胜感激。
【问题讨论】:
-
我很惊讶您的代码在某些情况下有效。您的
prime_factors被初始化为一个空列表,然后直接在while 循环中的表达式if (number % prime_numbers[i] != 0):中使用。prime_numbers[0]肯定是索引超出范围错误,因为prime_numbers为空。 -
您发布的错误不是语法错误。您还可以无条件地增加
i的值,并期望prime_numbers[i]起作用。