我的問題如下:我想創(chuàng)建一個(gè)程序,它接受大于 0 且小于 21 的整數(shù),并且這些整數(shù)之間用一個(gè)空格分隔。然后我想創(chuàng)建一個(gè)列表,其中素?cái)?shù)將被附加而不進(jìn)行任何更改,非素?cái)?shù)將被拆分為元素,這些元素將是素?cái)?shù)。輸入: 3 6 7 12輸出: [3,2,3,7,2,2,3]這就是我想出的。當(dāng)我嘗試使用上述輸入運(yùn)行程序時(shí),對(duì)于 12,它僅輸出 2 和 3,而沒有另一個(gè) 2。這里可能有什么問題?l_prime = [2,3,5,7,11,13,17,19]l = []disposable = Noneiterate = input().split()for i in iterate: a = int(i) for j in range (0,len(l_prime)): disposable = j if a == l_prime[j]: l.append(l_prime[j]) else: if a % l_prime[disposable] == 0: l.append(l_prime[disposable]) a = a / l_prime[disposable] else: if a <= 1: break else: disposable += 1l我將不勝感激任何幫助!提前致謝!
1 回答

翻閱古今
TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超5個(gè)贊
你基本上只需要改變這個(gè)if聲明
if a % l_prime[disposable] == 0:
到while循環(huán)中,以便您可以添加重復(fù)的質(zhì)因數(shù):
while a % l_prime[disposable] == 0:
但代碼還可以進(jìn)一步簡化。首先,您根本不必對(duì)素?cái)?shù)進(jìn)行特殊處理;它們只是具有單個(gè)素因數(shù)的數(shù)字。此外,您可以直接迭代 的元素,l_prime而不是使用索引,特別是該disposable變量根本沒有任何用途。鑒于要測試的素?cái)?shù)數(shù)量很少,您甚至可能會(huì)放棄break
for a in map(int, iterate):
for p in l_prime:
while a % p == 0:
l.append(p)
a //= p
添加回答
舉報(bào)
0/150
提交
取消