2014-12-01 3 views
2

마침내 내가 원하는 것을 출력하도록 스크립트를 필터링했습니다. 그리고 그것은 작동합니다 ... 반쪽!파이썬에서 텍스트 파일을 사용하지 않고 라인 계산하기

놀라운 사람들의 도움을 받아 스냅인에 대한 친구의 요청을 자동으로 수락하는 스크립트를 만들었지 만, 확인 된 친구의 수를 확인하는 카운터가 필요합니다.

하지만 그게 가장 큰 문제는 아니며 이미 수정했습니다. 다음 코드를 사용하십시오.

for friend in friends: 
    if friend['type'] == 0: 
     names = friend[u'name'] 
     print names 

가 멋지게 이름을 인쇄, 예를 들어 내 결과는 다음과 같습니다

test.account2 
test.account3 
test.account4 
etc... 

이 지금까지, 굉장합니다.

이제 얼마나 많은 친구가 실제로 그 번호를 인쇄하고 인쇄하고 싶습니다.

그래서이 경우, 수,

비록, 내가 시도 렌은, 계산, str.count 및 다른 많은 것들 (이하 "등"마음을 복용하지, 분명히) 3 것 그러나 그것은 단지 작동하지 않는 것 같습니다. 우선, 들여 쓰기 때문에 3 번 인쇄합니다.

13 
13 
13 

암 : 그러나 다시 들여 쓰기를 이동, 그것은 names

그리고 지금까지 내가 할 manged했던 유일한 인쇄 출력은 다음과 같은 방법으로 3 이름의 문자 수입니다 "를 잊지"수 나는 여기에서 무엇인가 내려다 보지 않거나, 단지 어리 석다.

도움주세요.

+0

"하지만 작동하지 않는 것 같습니까?" 내장 함수 len()은 유효한 배열 길이를 반환해야합니다. 친구 변수의 유형은 무엇입니까? – Ivan

+0

전체 코드를 붙여 넣을 수 있습니까? 네임 스페이스에 대해 알고 있습니까? 'if'에서'names'를 빼내는 것은 느슨한 가치를 만듭니다. 그래서'print'는'names'가 정의되지 않았기 때문에 에러를 발생시킵니다. – Netro

+0

정말로'names' 변수는'name'이라고 대신해야합니다. 그것은 당신이하고있는 일에 대해 생각하는 데 도움이 될 수 있습니다. –

답변

3

names 변수가 배열이 아닙니다. friends이 반복되면서 현재 친구 항목의 이름 만 저장됩니다. 그러므로 당신은 또한 13 번 길이를 3 번 ​​얻습니다. 왜냐하면 그것은 그 특정 이름 문자열의 문자 수이기 때문입니다.

names = [] 
for friend in friends: 
    if friend['type'] == 0: 
     names.append(friend[u'name']) 

또는 간단 :

names = [friend[u'name'] for friend in friends if friend['type'] == 0] 

그런 다음 len(names)이 이름 수를 제공 할 것입니다

은 당신이 할 수있는 이름의 배열을 얻으려면.

+0

고마워, 그것은 매력처럼 작동합니다! – Snowlav

3

즉 각 이름 test.account2의 길이는 당신이 당신이 원하는하지 않은이 len(names) 같은 nameslen라고 때문이다 등이기 때문에 당신은 13를보고있다.

는 당신을위한 루프 위의 목록을 초기화 : name_list = []이 목록에 이름을 추가합니다

name_list = [] 
for friend in friends: 
    if friend['type'] == 0: 
     names = friend[u'name'] 
     print names 
     name_list.append(names) 

print 'Added %d names' % (len(name_list)) 

마지막 print 이제 예를 당 3를 덤프합니다.

+0

입력 해 주셔서 감사합니다. 확실히 도움이되었습니다. :) – Snowlav

관련 문제