List indices must be integers or slices, not tuple

Herkese merhaba… pythonda 3x3 matriks yaparken…

print("*"*30,"criteria calculator","*"*30)

print("_"*60)

print("enter your matrix:","(for this program you can only enter 3x3 matrix)")

matrix=[[],[]]

for row in range(3):
    for column in range(3):
        matrix[[row],[column]]=[float(input("{} row,{} column:". format((row+1),(column+1))))]

bu kodu çalıştırdığımda şöyle bi hata ile karşılaşdım…

Traceback (most recent call last):
  File "C:/Users/vaqif/Desktop/systemli analiz lab.py", line 11, in <module>
    matrix[[row],[column]]=[float(input("{} row,{} column:". format((row+1),(column+1))))]
TypeError: list indices must be integers or slices, not tuple

bi yardım ede bilirmisiniz?

Merhaba, yazdığınız kodların biraz düzeltilmesi gerekiyor, aşağıdaki kodları bir inceleyin isterseniz.

#!/usr/bin/env/python3
# -*- coding: utf-8 -*-

matris = [[float(input("r{}c{} = ".format(row + 1, column + 1))) for column in range(3)] for row in range(3)]
print(matris)

Yukarıdaki liste üretecinin yaptığı işlem aşağıdaki kodların yaptığı işlemin birebir aynısıdır.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

d1 = []
for row in range(3):
    d2 = []
    for column in range(3):
        d2.append(float(input("r{}c{} = ".format(row + 1, column + 1))))
    d1.append(d2)
print(d1)

listelere yeni giriş yaptığım için append metodunun çalışmasından haberim yok :slightly_smiling_face::slightly_smiling_face::slightly_smiling_face:…ben önceden c++ öyrendiyim için 2 boyutlu matrisleri c++ daki kimi yapmaya çalışdım ama hem hata verdiç hem de bu gün arkadaşlarımdan biri de appendi kullanarak yapabileceğimi söyledi…ama yinede cevabınız üçün teşekkürlür)))…appendi öyrendikden sora kodu inceleyeceğim…

Rica ederim. append() metodu bir listeye eleman eklemeye yarar. Sizin yazdığınız yazım (yani matris[row],[column] = …) ancak listede o indekste eleman varsa kullanılabilir (Bir de arada virgül kullanmamak gerekiyor.). Aşağıdaki kodlara bir bakın isterseniz.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# Aşağıdaki matris bir tuple() nesnesidir.
matris = [[], [], []], [[], [], []], [[], [], []]
print(type(matris))
# Aşağıdaki matris de bir list() nesnesidir.
# matris = [[[], [], []], [[], [], []], [[], [], []]]
for row in range(3):
    for column in range(3):
        matris[row][column] = float(input("r{}c{} = ".format(row + 1, column + 1)))
        # Ayrıca yukarıda gördüğünüz gibi,
        # matris[[row],[column]] yerine matris[row][column] 
        # yazmak gerekiyor.
# Ekrana bastırılacak veriyi bir liste nesnesine dönüştürelim.
print(list(matris))
# Veya tuple() olan matrisi değil de list() olan matrisi list() veri tipinde 
# ekrana bastırmak  istersek, o zaman şöyle yazmamız yeterli olur:
# print(matris)

Gördüğünüz gibi, önce matrisin elemanlarının oluşturulmuş olması lazım ki belli bir indeksteki değer for döngüleri içinde değişikliğe uğratılabilsin yoksa program bir IndexError hatası yükseltir.

appendi bilmediğim için öbür kod biraz karışık geldi ama bu kod daha aydınlatıcı oldu…bu arada ingilizce bi forumdan(https://stackoverflow.com/questions/6667201/how-to-define-a-two-dimensional-array-in-python numpy metodu var onunla ilgili araşdırdım ama onun da modülünü sanırım indirmek lazım…isterseniz bi göz ata bilirsiniz)))yardımınız üçün çok teşekkür ederim :slightly_smiling_face::slightly_smiling_face::slightly_smiling_face:

Rica ederim.
Evet Numpy’yi pip ile indirmek gerekiyor. Dediğiniz gibi Numpy, çok boyutlu diziler oluşturmak için tasarlanmış, dizi oluşturmayı neredeyse C hızında yapan çok kullanışlı bir modüldür.