大家好,我想用泡沫排序法找出組裝時間和包裝時間最小的物品順序,使用雙層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)
只解決 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)
不用麻煩另外註冊帳號
沒人知道這題跟那題是同一題
先說明我完全沒寫過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)