2016-07-12 13 views
-4
class s(object): 
    def vrod(self): 
     self.name=(input("enter name:")) 
     self.stno=int(input("enter stno:")) 
     self.score=int(input("enter score:")) 

    def dis(self): 
     j=0 
     while j<3: 
      print("enter name:",self.name,"enter stno:",self.stno,"enter score:",self.score) 
      j+=1 


y=[] 
j=0 
st=s() 

while j<3: 
    st.vrod() 
    y.append(st) 
    j+=1 

st.dis() 

私が入力した情報を表示したいが、できない。あなたはそれを実行し、名前、学生番号、スコアを入力すると仮定します。それから私は3倍の3人目の情報しか受け取らない。なぜ、どうすれば問題を排除できますか? おかげこのコードにデータを表示する際の問題点は何ですか?

+1

私はリストを示唆しています。 – Kevin

+1

あなただけS' 'の1つのインスタンスを作成し、それは'あなたが3つの異なるオブジェクトで終わる代わりに三つの異なるオブジェクトを作成する必要が.vrod(同じオブジェクトの)() 'メソッド3回の呼びかけ。 –

+0

ケビン、私はリストを使用しました。どういう意味ですか? – sasan

答えて

0

は、対処すべき課題がいくつかあります:

  1. stオブジェクトを一度作成し、whileループ内で複数回使用されます。同じオブジェクトの同じメソッドが複数回呼び出されるため、以前の情報は失われます。
  2. stオブジェクトがアレイに複数回追加されています。追加されるのは同じオブジェクトなので、オブジェクトが更新されている場合は、配列内の要素が同じ情報で更新される場合はすべて更新されます。
  3. disメソッドでは、配列に対して繰り返し処理を行い、受け取ったすべての入力を表示します。ただし、この関数はオブジェクトのメンバであり、オブジェクトは他のインスタンス化されたオブジェクトを認識していません。代わりにdisが行うべきことは、単一のオブジェクトに関連するデータを印刷してから、そのオブジェクトを外部コードで呼び出すことだけです。
  4. コードでは、以前の情報を格納するために使用しようとしている配列は実際には使用されません。これは、配列、オブジェクト、およびスコープがどのように機能するかをよく理解していないことを示しています。私はオブジェクト指向プログラミング(OOP)とPythonについて学ぶためにいくつかのリソースを見ていきます。例:ここではhttp://www.tutorialspoint.com/python/python_classes_objects.htm


は、あなたが探しているものを行いますいくつか更新されたコードです:

class s(object): 
    def vrod(self): 
     self.name=(input("enter name:")) 
     self.stno=int(input("enter stno:")) 
     self.score=int(input("enter score:")) 

    def dis(self): 
     print("enter name:",self.name,"enter stno:",self.stno,"enter score:",self.score) 


y=[] 
j=0 

while j<3: 
    st = s() 
    st.vrod() 
    y.append(st) 
    j+=1 

for st in y: 
    st.dis() 
関連する問題