2016-07-13 10 views
0
class student(object): 

    def student(self): 
     self.name=input("enter name:") 
     self.stno=int(input("enter stno:")) 
     self.score=int(input("enter score:")) 
    def dis(self): 
     print("name:",self.name,"stno:",self.stno,"score:",self.score) 
    def stno(self): 
     return self.stno 
    def name(self): 
     return self.name 
    def score(self): 
     return self.score 


y=[] 
j=0 
while(j<3): 
    a=student() 
    a.student() 
    y.append(a) 
    j+=1 


for st in y: 
    st.dis() 

n=int(input("enter #:")) 
for c in y: 
    if c.stno==n: 
     y.remove(c.stno) 


for st in y: 
    st.dis() 

生徒番号とスコアの学生のうち1人を学生番号で削除します。私は書く:このコードではどのように削除することができますか?

n=int(input("enter #:")) 
for c in y: 
    if c.stno==n: 
     y.remove(c.stno) 

明らかにそこに問題がある。削除やdelまたはpopを使用するように変更することはできますか?私はpopやdelはインデックスがないので実行できないと思いますが?

+2

あなたの同級生も(別のものが)この割り当てに関する質問をしているように見えます:http://stackoverflow.com/q/38352723/189134 – Andy

答えて

2

はちょうどあなたがc.stnoを行う際にどのようなリストに実際にあることは、オブジェクト自体ではない、それはだが、それは変化に良いではありません

+0

あなたはもう少し説明できますか? – sam98

+0

'c.stno'は学生番号を返します。あなたが' y.remove(c.stno) 'を呼び出すと、リストに存在しない値(stno)を削除しようとしています。リストに追加した 'student'オブジェクト' student'オブジェクトにリストではない値が含まれている場合、リストの3つの要素は生徒オブジェクトです – danidee

1

属性れるので、それがリストに存在しません

y.remove(c)

を呼び出しますあなたは反復処理中の配列です。あなたはこれを試すことができます。

for item in [c for c in y if s.stdno==n]: 
    y.remove(item) 
関連する問題