iT邦幫忙

2

如何用if選擇for loop

我的迴圈一部分是這樣

for ii in page.select('a'),illustration.select("a"):
    for i in ii:

但是有的時候是沒有illustration這個參數的
有沒有用if或其他方法來避開這個迴圈做出新的迴圈
比如

if illustration:
  for ii in page.select('a'),illustration.select("a"):
    for i in ii:
else:
  for i in page.select('a'):

然後後面是迴圈內容這樣
不過我這方法不行
有甚麼方法嗎

1
froce
iT邦大師 1 級 ‧ 2020-09-19 08:00:10

你原本的迴圈也不會跑吧...根本就不合語法啊。

你可以把
page.select('a')
illustration.select("a")
先合併起來再做。

s4028600 iT邦新手 5 級 ‧ 2020-09-19 08:21:12 檢舉

原本的迴圈會跑喔,不會跑是怎麼說?

所以先合併如果沒有參數就用if避開
一開始還無法合併...看來我代碼太亂了
感謝

1
gjlmotea
iT邦新手 4 級 ‧ 2020-09-19 15:38:43

看起來是類似這樣,要在一開始先判斷能不能取到illustration.select

if illustration.select("a"):
  for ii in page.select('a'),illustration.select("a"):
    for i in ii:
else:
  for i in page.select('a'):
s4028600 iT邦新手 5 級 ‧ 2020-09-19 17:39:47 檢舉

我就是這樣想的
但是這樣的迴圈根本不會跑

gjlmotea iT邦新手 4 級 ‧ 2020-09-19 20:50:15 檢舉

不介意的話看你要不要貼完整一點的程式碼

s4028600 iT邦新手 5 級 ‧ 2020-09-19 20:57:56 檢舉
page=soup.select('#chapterList')[0]
illustration=soup.select("#illustration")[0]
for ii in page.select('a'),illustration.select("a"):
  for i in ii:
    attempts=0
    while (attempts<3):
      try:
        url=i['href']
        soup=url1(url)
        html=soup.select('.mt-3')[0]
        html=html.prettify()
        Chapter=i.text
        print(Chapter,time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
        attempts=5
      except Exception as e:
        attempts+=1
        print(e,('超時 %d 次 ' % attempts))

就這樣
很平常的迴圈

1
linyanbin
iT邦新手 5 級 ‧ 2020-09-20 01:31:17

拉出來寫個function讓邏輯處理更清楚如何?

def a(b):
    if b:
        for ii in b.select("a"):
            for i in ii:
                pass

a(illustration)
a(page)
s4028600 iT邦新手 5 級 ‧ 2020-09-21 00:42:53 檢舉

雖然我也有過這想法
但我迴圈下面的部分太多,要這樣做就要大改
手機排版實在太困難
所以才想找比較簡單的
不過如果能用電腦快速改的話
這樣是比較一勞永逸

我要發表回答

立即登入回答