2016-12-02 2 views
0

呼び出されるたびに行列を作る関数を作ろうとしています。行列の関数を定義し、リストとして別々に行列の値を得るためのPythonプログラム

問題1:2x3または3x2を作成して、それを書き込もうとすると:IndexError: list index out of range。 Haminaa

def mtx(): 
    m=int(raw_input("Rows")) 
    n=int(raw_input("Col")) 
    a=[[0 for i in range(m)]for j in range(n)] 
    l=[] 
    for i in range(m): 
     for j in range(n): 
      s=a[i][j]=int(raw_input("Fill")) 
      l.append(s) 
    for i in range(m): 
     for j in range(j+1): 
      print a[i][j], '\t', 
     print 

が解決しようあなたが入力のリストを取得するためのコードでリストを、見ている必要があります。 それぞれの行列に対してmとnの値を別々に求めたいと思います。リストも。 Mが定義されていないことを示すエラー(SO Nであり、L):

は、例えば、私はこの

mtx() 
m1=m 
n1=n 
l1=l 
mtx() 
m2=m 
n2=n 
l2=l 

Problem2(A)を取得したいです。

また、mとnを定義から外してパラメータとして使用しようとしました。だから私はmとnを得ることができる。

def mtx(m,n): 
    a=[[0 for i in range(m)]for j in range(n)] 
    l=[] 
    for i in range(m): 
     for j in range(n): 
      s=a[i][j]=int(raw_input("Fill")) 
      l.append(s) 
    for i in range(m): 
     for j in range(j+1): 
      print a[i][j], '\t', 
     print 

m1=int(raw_input("Rows")) 
n1=int(raw_input("Col")) 
mtx(m1,n1) 
m2=int(raw_input("Rows")) 
n2=int(raw_input("Col")) 
mtx(m2,n2) 

Problem2(B):しかし、それはリストlを取得することは可能でしょうか?

問題2(a)を解くと、問題2(b)はありません。

+0

私はあなたの2番目の問題を理解していません。あなたのコードを(リストの理解を逆にして)試してみました。そして、 "Fill"入力として与えられた一連の値を表示しました。これはあなたが望むものではありませんか?どのようなエラーメッセージが表示されますか? – Haminaa

+0

@ハミナ私はmとnの値を得たいです。関数が呼び出されるときと同じように、mとnを入力するようにユーザーに求め、 "Fill"で入力のリストを作成します。したがって、これらのm、n、lの値が必要なので、将来、行列の加算や乗算などのアプリケーションで使用できます。たとえば、乗算では、最初の行列の列数= 2番目の行数(つまり、m1 = n2)にする必要があります。次に、リストを使用して回答行列を掛けて回答行列を作成します。 –

+0

あなたのコードでは、 'm'と' n'の値はすでに 'n1'、' m1'などに格納されているようです。しかし、あなたが定義する変数は関数内でのみ定義されています。関数の外側でそれらを定義するには、関数の最後に 'return'を使うことができます。私はこれを含めるために私の答えを更新しました。 – Haminaa

答えて

1

あなたはあなたのリストの理解を間違った方法で行います。あなたは列の数を示すために、行とnの数を示すためにmをしたい場合は、あなたが行う必要があります。

a=[[0 for i in range(n)]for j in range(m)] 

あなたの第二の問題について、あなたは最後にreturn文を使用して、関数の戻り値のリストlを作ることができますあなたの機能のまた、最後のprintはあなたの例では何もしませんので、私はそれを削除:

def mtx(m,n): 
    a=[[0 for i in range(n)]for j in range(m)] 
    l=[] 
    for i in range(m): 
     for j in range(n): 
      s=a[i][j]=int(raw_input("Fill")) 
      l.append(s) 
    for i in range(m): 
     for j in range(j+1): 
      print a[i][j], '\t', 
    return l 

あなたがあなたの関数を呼び出す場合:

my_list = mtx(m1,m2) 

リストlは今my_listに割り当てられます。

+0

ああ、ありがとう。これは問題1を解決します。:) –

+0

私はリターンを試みましたが、lを得るために変数を割り当てる必要があることを知らなかった。ありがとうございました。また、btw、私はまた行列として行列を印刷したいので、おそらくその印刷は役に立たないわけではありません。 –

関連する問題