:: 게시판
:: 이전 게시판
|
- PGR21 관련된 질문 및 건의는 [건의 게시판]을 이용바랍니다.
- (2013년 3월 이전) 오래된 질문글은 [이전 질문 게시판]에 있습니다. 통합 규정을 준수해 주십시오. (2015.12.25.)
통합규정 1.3 이용안내 인용"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
21/09/26 12:32
1번문제는 print(trump_tweet(text)) 위치가 문제입니다
t = input() trump_tweet(t) 아래로 내려두사면 해결될거에요 print(trump_tweet(t)) <- t 로 이름통일
21/09/26 12:42
result = []
for result in corpus : <---- result 이름도 바꾸셔야할거에요 if word.startswith(text): result.append(text)
21/09/26 13:02
답변 감사합니다. for result2 in corpus로 변경하였는데
if word.startswith(text): result.append(text) 의 괄호 안에 text가 들어가는게 맞는가라는 의문이.. 들기 시작하네요 ㅠㅠ 여전히 result2로 바꾸어도 코드가 정상 실행이 되진 않습니다 흑흐규흐..
21/09/26 13:04
for result2 in corpus :
if result2.startswith('text'): result.append(result2) 요게 맞을거에요
21/09/26 13:08
result = {}
for result2 in corpus: print(result2) if result2.startswith('text'): if result2 in result: result[result2] +=1 else: result[result2] =1 return [ i[0] for i in sorted(result.items(), key=(lambda x:x[1]), reverse=True)][:20] 요렇게 한번해보세요
21/09/26 13:46
제가 corpus 에 예시넣고했을땐 잘됐는데 안되는거시면 아마 위에 text파일 파싱이문제인데
제가 text 파일이 없어서 도움을드릴수가없네요. .혹시 도움필요하시면 쪽지주세요 5문제다 어려운건 아니라 도움드릴순있습니다
21/09/26 14:41
정말 감사합니다. 선생님.. corpus.txt 텍스트 파일은
zoo/881 zones/1827 yellow/5712 . . 이런 식으로 한줄씩 영어단어/빈도수 형태로 저장되어 있습니다.
21/09/26 14:15
파일을 열어보거나 할 수 있는 상황이 아니어서
본문에 올려주신 1~2번 문제 중에서 문제가 되는 부분만 찝어볼게요. (1) for result in corpus: -> 여기에서 [result]는 이 라인 이후의 for 블록에서 사용할 변수명을 정의하는건데, result를 위에서 이미 정하셔서 오류가 있을 것 같네요. for문 블록에서 사용할 corpus의 요소에 해당하는 변수명은 다른걸로 설정해보세요. ex) for tuple in corpus: (2) if word.startswith(text): -> word가 정의되지 않았네요. 이 word가 위에서 corpus 배열 안에 있는 튜플의 첫번째 요소를 말하는거라면 word를 정의한 후에 해보세요. ex) word = tuple[0] if word.startswith(text): (3) with open(text) as file: for line in file: -> 문제에 적혀있듯이 'corpus.txt'파일을 불러와야하는데, 이 함수에서 "filter_by_text(t)"를 통해 가져온 'text'는 문제에서 말하는 'text변수'를 말하는 것 같아요. 이건 단순한 변수인데 파일로 취급하고 한줄씩 불러오려고하니까 제대로 동작하지 않는 것 같아요. 아래와 같이 바꾸셔야할듯. ex) with open("corpus.txt파일의 경로") as file: for line in file: (4) split = line.split(',') -> 슬래시로 구분되어있다고 하니, 콤마가 아니라 슬래시로 split을 하셔야할것 같네요. (5) 지정된 형식으로 출력을 기능하는 함수를 만들으라했으니, print는 함수 안에서 해야하지 않을까 싶어요. 프로그램이 실행되는 순서로 보면 (1) print(trump_tweet(text)) -> (2) t=input() -> (3) filter_by_text함수 호출 -> (4) 함수 내의 내용들이 실행됨 이런 순서이기때문에, [X] def trump_tweet(text): # (여러가지 일거리) print(trump_tweet(text)) # 컴퓨터는 여기서 말하는 text가 뭔지 모름. 따라서 이 함수는 제대로 실행되지 않음 t = input() # 문제풀이 프로그램이 t에 text변수를 인풋 filter_by_text(t) # 변수가 제대로 들어온 t를 인수로 filter_by_text가 제대로 호출되지만, 함수 안에는 출력이 없으므로 값 반환만 되고 출력 없이 프로그램 종료. [O] def trump_tweet(text): # (여러가지 일거리) result = 여러가지 일거리 최종 결과를 출력 형식에 맞게 정의 print(result) t = input() # 문제풀이 프로그램이 t에 text변수를 인풋 filter_by_text(t) # 제대로 호출됨. 함수 안에 마지막에 print함수도 호출되므로 결과가 제대로 출력됨. ---- 대부분 간과하신 부분이 변수가 프로그램 안에서 살아있는 수명?부분인 것 같은데, "word랑 freq는 첫 반복문 안에서만 살아있던 거니까, 다른 반복문 블록에서 word를 다시 쓰고싶을땐 word를 다시 정의해야겠구나." 라거나, "함수 정의 블록(def function(): ~~)이 아닌 글로벌 영역에서 text가 정의되지 않았으니 print(trump_tweet(text))는 에러가 나겠구나. " 하는 부분을 생각해보시면서 풀어보시면 좀더 접근이 쉬워지지 않을까 합니다...! 화이팅입니다.
21/09/26 14:54
답변 정말 감사드립니다. 변수의 수명 부분을 말씀해주셨는데 그 부분을 많이 놓치고 있었던 것 같습니다!
def filter_by_text(text) : # 주어진 규칙에 맞추어 filter_by_text()함수를 구현해주세요. # corpus.txt에 있는 텍스트를 읽어와서 corpus라는 리스트에 추가한다. corpus = [] with open('corpus.txt') as file: for line in file: split = line.split('/') word = split[0] freq = split[1] new_tuple = (word, freq) corpus.append(new_tuple) # corpus에 있는 데이터 중, text로 시작하는 단어만을 추려서 result라는 리스트에 저장한다. result = [] for result2 in corpus : word = result2[0] if word.startswith(text): result.append(text) # 찾은 영어 단어를 빈도수를 기준으로 내림차순으로 정렬하여 20개만 출력한다. return sorted(corpus, key=itemgetter(1), reverse=True)[:20] # 아래 부분은 수정하지 마세요! # 입력과 출력을 수행하는 코드입니다. t = input() filter_by_text(t) 요렇게 수정을 해보았는데 아직 작동을 하지 않습니다 ㅜㅜ 함수 내에서 출력을 하라는 말씀이 return sorted~ 아래 부분에 동일한 들여쓰기로 작성해야 한다는 말씀이실까요? 그럴 때 print함수를 어떻게 적어야 할지 모르겠습니다. print(filter_by_text(text)) 요렇게인지 아닌지 ㅜㅜ 그리고 result = [] for result2 in corpus : word = result2[0] if word.startswith(text): result.append(text) 요부분이 맞게 됐는지 궁금합니다. 마지막줄의 result.append(text)에서 괄호 안에 text가 맞나.. 싶긴 한데.. word의 인자?를 result에 넣어야 하니 word를 적어야 하나 싶기도 합니다 ㅠ
21/09/26 20:00
def trump_tweet(text):
hashtags = [w for w in text.split() if w.startswith('#')] mentions = [w for w in text.split() if w.startswith('@')] others = [w for w in text.split() if w[0] not in '#@'] text가 정확히 어떤 형태로 들어오는지도 모르고, 원하는 출력형태도 모르니 더 이상 뭘 할 수가 없습니다. def filter_by_text(text): with open('corpus.txt', 'r') as f: corpus = [tuple(l.strip('\n').split('/')) for l in f] result = [(w, int(count)) for w, count in corpus if w.startswith(text)] print([(w, c) for w, c in sorted(result, key=lambda x: x[1])[::-1][:20]]) 이것도 글에 스펙이 자세하게 적혀있지 않기 때문에, 돌아가는거 보면서 고쳐야 할 수 있습니다.
|