作者apua (Apua)
看板Python
標題Re: [問題] 排除輸出重複數值的方法
時間Sat Nov 3 14:29:23 2012
其實要用世界奇觀來解決重複值的部份是可行的,而且幾乎不用變動您的結構
主要是進入下一層迴圈時就要求 大於等於 上一層迴圈的值
既然後面的值都不會比前面的值小 (遞增數列) 自然不會再有左右對稱而重複的問題。
以下是小修後的原po程式碼,重點只有 ``range(a,x)`` ,即上述;
而加入 break 的判斷,只是避免不必要的走到迴圈深處,因為走進去也求不到值。
x = 4
N = 9
for a in range(1,x):
if a*8 > N: break
N -= a
for b in range(
a,x):
if b*7 > N: break
N -= b
for c in range(
b,x):
if c*6 > N: break
N -= c
for d in range(
c,x):
if d*5 > N: break
N -= d
for e in range(
d,x):
if e*4 > N: break
N -= e
for f in range(
e,x):
if f*3 > N: break
N -= f
for g in range(
f,x):
if g*2 > N: break
N -= g
for h in range(
g,x):
if h*1 > N: break
if h == N: print (a,b,c,d,e,f,g,h)
N += g
N += f
N += e
N += d
N += c
N += b
N += a
pass
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.27.47
推 darkgerm:多層回圈建意用 DFS 做...暴力寫多層會讓程式不易讀 11/03 15:01
→ darkgerm:要維護或擴充也不方便 例如如果有 N 個變數就做不出來了 11/03 15:02
※ 編輯: apua 來自: 123.204.159.73 (11/03 15:45)
推 sofaly:小弟真的沒學過 所以才東拼西湊 XD 11/03 16:53
→ apua:回樓上,認真不開玩笑,推薦darkgerm的作法 11/03 17:36
→ apua:只要跟「生成一堆有規律的資料」有關的工具,找 itertools 11/03 17:37
推 sofaly:是的 了解 ^^" 11/03 17:37
→ apua:import itertools; help(itertools) 看一下,幫助很大 11/03 17:37
推 sofaly:謝謝^^ 11/03 18:09
推 cobrasgo:原po你太閒了吧,幫忙裝潢世界奇觀幹嘛啊XDDD 11/04 11:31
推 Conjuror:世界奇觀 XDD 11/05 11:22
推 keitheis:路過來世界奇觀觀光 11/05 18:07