2014-04-11 5 views
0

사용자에게 파일 이름을 묻는 메시지를 열고, 파일을 열어 을 열고, 알파벳의 각 문자가 파일. 당신은 단순히 편지의 주파수를 계산하려면ord()에서 사용할 목록에서 문자를 읽을 수 없습니다.

#!/usr/local/bin/python 

name=raw_input("Enter file name: ") 
input_file=open(name,"r") 
list=input_file.readlines() 
count = 0 
counter = 0 


for i in range(65,91): #from A to Z 
    for j in range(0,len(list)): 
     if(i == ord(j)): #problem: ord() takes j as an int here, I want it to get the char at j 
      count = count + 1 

    print i, count 
    count = 0 

for k in range(97,123): #from a to z 
    for l in range(0,len(list)): 
     if(k == ord(l)): #problem: ord() takes l as an int here, I want it to get the char at l 
      counter = counter + 1 

    print k, counter 
    count = 0 

답변

0

, 당신은 할 수 있습니다 :

in_text = input_file.read() 
frequencies = [] 

for i in range(65,91): #from A to Z 
    frequencies.append(in_text.count(chr(i))) 

print frequencies 
+0

그래 내가 그 일을 시도했지만 어떤 이유로 나는이 오류가 발생합니다 : 역 추적 (가장 최근 통화 최종) : 경우 (내가 == ORD에서, 파일 "prob9.py", 라인 10 (list [j])) : TypeError : ord() 예상 문자, 길이 11의 문자열 – user1836292

+0

@ user1836292, 내 대답을 업데이트했습니다. – sshashank124

+1

'' '.join (in_text)'를 쓰는 대신에 처음에는'input_file.read()'를 사용하십시오. –

0

당신은 문자의 시간을 계산하기 위해이 코드를 사용할 수 있습니다.

+0

'collections.Counter' 클래스에 문제가 있습니까? –

+0

으로 해결할 수 있습니다. – BlackMamba

0

차이점은 collections.Counter을 기반으로 한 또 다른 대답입니다.

from collections import Counter 

filename = raw_input("Enter file name: ") 
contents = open(filename, 'r').read() 

frequencies = Counter() 

for char in contents: 
    if char.isalpha(): 
     frequencies[char] += 1 

print frequencies.items() 
0

일 이러한 유형의 많은 대답은 누군가가 이미 대답을 생각하고 표준 라이브러리에 넣어 점이다.

from collections import Counter 

name=raw_input("Enter file name: ") 
input_file=open(name,"r") 
data = input_file.read() 

c = Counter(data) 

문자 수만이 아니라 모든 문자 수를 계산합니다. 당신이 다른 사람을 필터링해야합니다 문자 만하려는 경우 3 가장 일반적인

print(c.most_common(3)) 

를 얻으려면 문자

print(sorted(c)) 

를 얻으려면. 한 가지 방법은 생성자 표현식을 사용하는 것입니다.

import string 
gen = (ch for ch in data if ch in string.ascii_lowercase) 
c1 = Counter(gen) 
관련 문제