iT邦幫忙

0

使用python進行泡沫排序法卻出現 list index out of range

  • 分享至 

  • xImage

大家好,我想用泡沫排序法找出組裝時間和包裝時間最小的物品順序,使用雙層for迴圈時卻出現index out of range。請問有沒有人能幫幫我這個新手,謝謝~

kind=int(input()) #第一行

#第二行組裝時間輸入
aSTR = input() 
a = aSTR.split(',')
assemble = []
for i in range(len(a)):
  assemble.append(int(a[i]))

#第三行包裝時間輸入
bSTR = input()
b = bSTR.split(',')
packaging = []

for i in range(kind-1):
  for j in range(kind-i-1):
    if assemble[j]+packaging[j] > assemble[j+1]+packaging[j+1]:
      assemble[j],assemble[j+1]=assemble[j+1],assemble[j]
      packaging[j],packaging[j+1]=packaging[j+1],packaging[j]

    elif assemble[j]+packaging[j]==assemble[j+1]+packaging[j+1]:
      if assemble[j] > assemble[j+1]:
        assemble[j],assemble[j+1]=assemble[j+1],assemble[j]
        packaging[j],packaging[j+1]=packaging[j+1],packaging[j]

    
print(assemble,packaging) 

ccutmis iT邦高手 2 級 ‧ 2023-03-30 07:33:04 檢舉
是自學的 Python 還是學校教的?
froce iT邦大師 1 級 ‧ 2023-03-30 10:40:58 檢舉
index out of range 就是你在取list裡的值時,index超過範圍,譬如一個個數為3的list,你用了[5]去取。
所以遇到這種狀況,建議你學著自己去print()出來,或設斷點去檢查並分析自己的code哪裡有問題,畢竟這是你要學不是我們要學。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

3
海綿寶寶
iT邦大神 1 級 ‧ 2023-03-30 01:03:22
最佳解答

只解決 index out of range 的問題...

kind=int(input()) #第一行

#第二行組裝時間輸入
aSTR = input() 
a = aSTR.split(',')
assemble = []
for i in range(len(a)):
  assemble.append(int(a[i]))

#第三行包裝時間輸入
bSTR = input()
b = bSTR.split(',')
packaging = []
for i in range(len(b)):
  packaging.append(int(b[i]))

for i in range(kind-1):
  for j in range(kind-i-1):
    if assemble[j]+packaging[j] > assemble[j+1]+packaging[j+1]:
      assemble[j],assemble[j+1]=assemble[j+1],assemble[j]
      packaging[j],packaging[j+1]=packaging[j+1],packaging[j]

    elif assemble[j]+packaging[j]==assemble[j+1]+packaging[j+1]:
      if assemble[j] > assemble[j+1]:
        assemble[j],assemble[j+1]=assemble[j+1],assemble[j]
        packaging[j],packaging[j+1]=packaging[j+1],packaging[j]

print(assemble,packaging) 

不用麻煩另外註冊帳號
沒人知道這題跟那題是同一題
/images/emoticon/emoticon10.gif

0
programlin
iT邦新手 5 級 ‧ 2023-03-31 07:32:10

先說明我完全沒寫過python,這類簡單的問題其實以後可以先用ChatGPT獲得解答,確認還是有問題後再發文詢問會比較快.
底下為ChatGPT的答案

在這段程式碼中,我們可以看到你的包裝時間是沒有被加入到 packaging 這個list中的,因此當你在第二個for迴圈中嘗試使用 packaging[j] 或 packaging[j+1]時就會發生 IndexError。

為了解決這個問題,你需要在第三行包裝時間輸入的迴圈中加入一個將輸入轉換成整數並加入 packaging list中的步驟。以下是修改建議:

kind=int(input()) #第一行

#第二行組裝時間輸入
aSTR = input() 
a = aSTR.split(',')
assemble = []
for i in range(len(a)):
  assemble.append(int(a[i]))

#第三行包裝時間輸入
bSTR = input()
b = bSTR.split(',')
packaging = []
for i in range(len(b)):  # 加入一個新的迴圈,將輸入轉換成整數並加入 packaging 中
  packaging.append(int(b[i]))

for i in range(kind-1):
  for j in range(kind-i-1):
    if assemble[j]+packaging[j] > assemble[j+1]+packaging[j+1]:
      assemble[j],assemble[j+1]=assemble[j+1],assemble[j]
      packaging[j],packaging[j+1]=packaging[j+1],packaging[j]

    elif assemble[j]+packaging[j]==assemble[j+1]+packaging[j+1]:
      if assemble[j] > assemble[j+1]:
        assemble[j],assemble[j+1]=assemble[j+1],assemble[j]
        packaging[j],packaging[j+1]=packaging[j+1],packaging[j]

    
print(assemble,packaging)

我要發表回答

立即登入回答