2016-07-13 1 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() 

학생 번호와 점수가있는 학생 중 한 명을 학생 번호로 삭제하고 싶습니다. 나는 다음과 같이 씁니다 :이 코드에 대해 remove를 사용하려면 어떻게해야합니까?

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

분명히 거기에 문제가 있습니다. remove 나 del 또는 pop을 사용하도록 수정할 수 있습니까? pop이나 del은 인덱스가 없으므로 작동하지 않을 수 있다고 생각합니까?

+2

그것은 당신의 동급생과 같습니다 (다른 사람이하지만)이 과제에 대한 질문을한다 : http://stackoverflow.com/q/38352723/189134 – Andy

답변

2

는 당신이 c.stno을 수행 할 때 무엇을 목록에 실제로하는 개체 자체이기 때문에

y.remove(c)

이 목록에 존재하지 않습니다 부르지 그것은 변화에 좋지 않다

+0

당신이 더 많은 비트를 설명 할 수 있습니까? – sam98

+0

'c.stno'는 학생 번호를 반환하고,'y.remove (c.stno)'를 호출하면 목록에 존재하지 않는 값 (stno)을 제거하려고합니다. 목록에 추가 한'student' 객체'student' 객체는 목록이 아닌 값을 포함합니다. 목록의 세 요소는 학생 ​​객체입니다 – danidee

1

속성 있어요 당신이 반복하고있는 배열. 이 시도 할 수 있습니다 :

for item in [c for c in y if s.stdno==n]: 
    y.remove(item) 
관련 문제