로그인 해주세요.

자유 게시판 *자유로운 대화공간입니다. 회원간 예의를 지켜주세요. #정치글 #친목 금지

Might

선생님들.. 파이썬 2문제만 질문드리옵니다 ㅠㅠ

  • Might
  • 조회 수 2852
  • 2021.09.26. 00:21

1.jpg

2.jpg

 

문제와 제가 작성한 코드입미다.. 독학으로 찔끔씩 하고 있는데 당장 풀어야할 과제라서

 

여태껏 배운 내용들 뒤져보며 복습해도 도저히 답이 안 나와서 질문드립니다 ㅜㅜ

 

각 요소들을 하나씩 함수로 만드는 과정은 과거에 배웠는데

 

저렇게 많은 요소들을 하나의 함수에 담으려니 뇌가 한계에 달했네요.. ㅜㅜ

 

이 두 문제로 3시간 넘게 머리 싸매다 도저히 효율적인 방법이 아닌 것 같아

 

질문 드리고 그 답을 통해 학습해보고자 합니다.. 도와주십쇼 ㅠㅠ

댓글
41
best 1등 ONNURI
2021.09.26. 01:11

나름대로 잘 필요한 기능을 구현하고 있는 것 같습니다.

다만, 두 문제 모두 정확하게는 확인이 어렵습니다만 문제의 요구사항이 원하는 대로 자료를 취합한 뒤 이를 출력하는 것인데 출력이 되고 있는지 잘 모르겠습니다(print 등의 함수를 이용). 이 부분 확인 부탁드립니다.

 

1번 문제

(가장 중요) strip은 단순히 인자를 전달하지 않을 때 whitespace를 기준으로 나누는 것으로 임의로 정할 뿐입니다. strip에 string을 인자로 전달할 경우, 해당 string을 기준으로 해서 나누게 됩니다! 이를 아셨다면 문제가 훨씬 수월해졌겠죠.(지금은 힘드시지만 나중에는 공식 문서를 보시는 게 좋습니다! 공식 문서는 이 모든 경우를 모두 기술해주거든요)

ex) "꿈은☆이루어진다".split("☆") # ["꿈은", "이루어진다"]

 

기타

filenames는 미리 정의되어 있나요?? corpus.txt 파일만을 확인해서 여는 프로그램인데, filenames는 마치 여러개의 파일이 있어서 그들을 모두 분석하는 듯한 느낌이 드네요. 미리 있을 수도 있으니 너무 심각하게 받아들이진 말아주세요

return이 실행되면 함수는 즉시 자신이 들고 있는 모든 변수의 값등을 버리고 바로 실행을 종료합니다. 즉, 함수 안에서 첫번째 return 아래에 있는 구문은 절대 실행되지 않습니다. 아래의 구문이 의미가 있는 구문이라면 return 실행하는 것을 조심해주세요

8번 라인에서 punctuation과 symbol이 나오는데, 이로 보아서는 쉼표를 없애는 것으로 보입니다(미니기기 코리아 => 미니기기코리아). 이후에 split()이 이루어지면 이 경우에는 아무것도 분리되지 않고 하나의 문장이 그대로 list에 담겨서 나오는 것으로 기억하는데요. 이게 적절한 처리일까요?

words는 어디서 쓰이나요? 이후에 함수 내에서 어디에서도 사용되지 않습니다. 전역변수일까요? 지금은 한창 배우시는 중이라 크게 신경쓰지 않으셔도 되지만 전역변수의 변경을 줄이는 게 좋다는 것만 알아두세요!

 

2번은 앞서 언급한 출력이 제대로 이루어지고 있는지? 문제만 해결되면 되지 않을까 싶습니다. 더 간단하게 쓸 수 있기는 한데.. 이 시점부터 프로그래밍이 아니라 야매꼼수 배우기가 됩니다 (   ..)

 

 

프로그래밍을 시작하신 것을 Hello, world합니다 ;)

[ONNURI]님의 댓글을 신고합니다. 취소 신고
Might
글쓴이
Might ONNURI 님께
2021.09.26. 01:42

선생님, 정성스러운 댓글 정말 감사드립니다. 사실 프로그래밍을 공부한다기보다는 아직은 과정 수료와 그를 위한 과제 풀이만으로도 너무 급급한 수준이라.. 사실 아주 기본적인 개념 설명과 그 예제 풀이 외에 저런 식으로 코드 짜는 것은 도저히 손이 가지를 않습니다.. ㅠㅠ 말씀 주신 부분을 참고해서 1번 문제를 조금 수정해보았는데.. 도저히 잘 모르겠네요 ㅠㅠ 정말 염치 없지만.. 혹시 여유가 되신다면 예제 코드 한번 짜주실 수도 있으실까요?..

 

def filter_by_text(text) :

    # 주어진 규칙에 맞추어 filter_by_text()함수를 구현해주세요.

    # corpus.txt에 있는 텍스트를 읽어와서 corpus라는 리스트에 추가한다.

    corpus = []

        with open('corpus.txt') as file:

            for corpus in file

    

    # corpus에 있는 데이터 중, text로 시작하는 단어만을 추려서 result라는 리스트에 저장한다.

    result = []

    for result in corpus if word.startswith(text)

    

    # 찾은 영어 단어를 빈도수를 기준으로 내림차순으로 정렬하여 20개만 출력한다.

    return sorted(corpus, key=itemgetter(1), reverse=True)[:20]

    

    

# 아래 부분은 수정하지 마세요!

# 입력과 출력을 수행하는 코드입니다.

t = input()

filter_by_text(t)

 

File "main.py", line 5 with open('corpus.txt') as file: ^ IndentationError: unexpected indent
코드 실행이 완료되었습니다.

이런 에러가 출력이 됩니다 ㅠㅠ

 

2번의 경우 

 

def trump_tweet(text) :

    # 주어진 규칙에 맞추어 trump_twit()함수를 구현해주세요.

    # pass는 지우고 코드를 작성해주세요.

    words = text.split()

    

    Hashtag, Mention, Others = [],[],[]

    for word in words:

        if word.startswith('#'):

            plain_word=word[1:]

            Hashtag.append(plain_word)

        elif word.startswith('@'):

            plain_word=word[1:]

            Mention.append(plain_word)

        else :

            Others.append(word)

    return Hashtag, Mention, Others

 

print(trump_tweet(text))

 

이렇게 print를 추가하였는데, 코드를 실행하면 

Traceback (most recent call last): File "main.py", line 18, in <module> print(trump_tweet(text)) NameError: name 'text' is not defined

 

이런 에러가 출력이 됩니다.. ㅠㅠ 저녁 먹고 이것만 붙잡고 있는데 진도가 1도 안 나가니 너무 답답하고

수료조차 못할까봐 공포스러운 마음마저 듭니다.. 살기 위해서는 꼭 해야하는데 ㅠㅠ

살려주십쇼.. ㅠㅠ

[Might]님의 댓글을 신고합니다. 취소 신고
ONNURI Might 님께
2021.09.26. 01:59

아예 실행이 안 되는 거였군요! 이 경우에는 에러 코드와 함께 첨부해주시면 더 도움이 됩니다

첫번째는 아마 indentation 오류라고 해서 띄어쓰기와 탭이 혼용되고 있다든가 하는 문제가 있을 가능성이 있습니다

두번째는 text가 정의되지 않은 상태에서 text를 사용했다는 것인데... 원래 코드에는 input으로 값을 받다가 현재 코드는 input()이 없이 그냥 text를 trump_tweet으로 넘겨주고 있습니댜. 혹시 위에서 text가 정의되는 상태인가요??

[ONNURI]님의 댓글을 신고합니다. 취소 신고
ONNURI ONNURI 님께
2021.09.26. 02:02

코드를 다시 보니 for 등의 구문 구분이 없이 indentation을 하고 계시네요! 파이썬은 별도의 {}와 같은 절을 구분하는 장치가 없기 때문에 indentation으로 구분합니다!

[ONNURI]님의 댓글을 신고합니다. 취소 신고
ONNURI ONNURI 님께
2021.09.26. 02:10

itemgetter는 무엇인지 알 수 있을까요...? 아마 import가 된 예시 코드에서 가져오시다가 정의가 안 된 것 같습니다.

프로그램은 어딘가에서 가져온 것이거나 아니면 자기가 정의한 것이 아니면 무엇인지 알 길이 없습니다

[ONNURI]님의 댓글을 신고합니다. 취소 신고
Might
글쓴이
Might ONNURI 님께
2021.09.26. 02:15

def filter_by_text(text) :

    # 주어진 규칙에 맞추어 filter_by_text()함수를 구현해주세요.

    # corpus.txt에 있는 텍스트를 읽어와서 corpus라는 리스트에 추가한다.

    corpus = []

    with open(text) as file:

        for corpus2 in file:

            corpus.append(corpus2)

            

    

    # corpus에 있는 데이터 중, text로 시작하는 단어만을 추려서 result라는 리스트에 저장한다.

    result = []

    for result in corpus if word.startswith(text)

    

    # 찾은 영어 단어를 빈도수를 기준으로 내림차순으로 정렬하여 20개만 출력한다.

    return sorted(corpus, key=itemgetter(1), reverse=True)[:20]

    

    

# 아래 부분은 수정하지 마세요!

# 입력과 출력을 수행하는 코드입니다.

t = input()

filter_by_text(t)

 

이렇게 수정한 상태인데, 

File "main.py", line 12 for result in corpus if word.startswith(text) ^ SyntaxError: invalid syntax

 

이렇게 오류가 출력이 됩니다 ㅜㅜ 파이썬이란 걸 하나도 모르다가 정말 기본적인 강의 내용을 3달에 걸쳐 겨우겨우 듣다 보니 사실 보는 건 이해가 되는데 혼자 코딩을 만들어내는 능력이 전무한 수준입니다 흑흑..

정말 친절하게 잘 알려주시는데도 어렵네요.. itemgetter는 저도 사실 뭔지 잘 모르겠습니다. 이전 강의에서 유사한 기능을 한 부분을 옮겨 온 코드인데.. 저건 상관 없이 지시 사항에 맞는 코드로 바꿔주면 될 것 같습니다 ㅠㅠ

[Might]님의 댓글을 신고합니다. 취소 신고
타조알
타조알 Might 님께
2021.09.26. 02:29

for result in corpus if word.startswith(text)

이부분을

for result in corpus:

    if word.startswith(text)

이렇게 수정해야되겠네요.

에러 뜨면 그대로 긁어서 구글링해보면 설명이 많이 나옵니다.

key=itemgetter(1)은 iterator로 이루어진 list를 sort할 때 특정 원소를 가져오기 위해서 쓰는 함수입니다.

itemgetter(1)이면 iterator의 index값이 1인 원소를 가져와서 sort할떄 사용한다고만 알아두시면 될 거 같아요. 자세한 건 파이썬 함수 paramerter에 대한 배경지식이 필요해서..

[타조알]님의 댓글을 신고합니다. 취소 신고
Might
글쓴이
Might 타조알 님께
2021.09.26. 02:41

111111.jpg

 

현재 요런 코드인 상태입니다.

 

실행하면 

File "main.py", line 16

for result in corpus: ^ IndentationError: unexpected indent

 

이런 에러가 나오구요.. 말씀하신 대로 구글 검색해보니 들여쓰기 에러라는데.. ㅠㅠ

 

들여쓰기는 맞는 거 같은데.. 뭐가 문제인지 전혀 모르겠습니다. 위쪽 for문이 무언가 종결이 안 되어서

 

이어지고 있는 것인지.. 정말 너무 답답하고 미쳐버릴 것 같습니다.. 죄송합니다 ㅠㅠ

[Might]님의 댓글을 신고합니다. 취소 신고
타조알
타조알 Might 님께
2021.09.26. 02:46

에러문에서 File "main.py", line 16 이 부분이 16번째 줄에 문제가 있다는 뜻입니다.

16, 17줄이 전체적ㅇ로 indentation이 하나 더 되어 있네요. 하나씩 땡기면 돌아갈 것 같습니다.

[타조알]님의 댓글을 신고합니다. 취소 신고
Might
글쓴이
Might 타조알 님께
2021.09.26. 02:53

111111.jpg

ㅜㅜ 한 칸씩 땡겼는데 이번엔 17번째 라인에서 에러가 나옵니다.. 정말 무슨 이유인지도 모르겠네요. 자꾸 질문드려서 송구합니다 ㅠㅠ

 

File "main.py", line 17 if word.startswith(text) ^ SyntaxError: invalid syntax
코드 실행이 완료되었습니다.
[Might]님의 댓글을 신고합니다. 취소 신고
타조알
타조알 Might 님께
2021.09.26. 03:04

아아 if절만 있고 안에 내용이 없네요.

if word.startswith(text):

    result.append(text)

[타조알]님의 댓글을 신고합니다. 취소 신고
Might
글쓴이
Might 타조알 님께
2021.09.26. 03:39

캡처2.JPG답변 감사드립니다. 이제 에러는 안 나는데.. 이렇게 실행하면 아무 값도 안 나오다가 10초 후에 이렇게 뜨네요 ㅠㅠㅠ 늦은 시간까지 친절한 답변 정말 감사드립니다. 혹 답변 주실 수 있으시다면 내일 주셔도 괜찮습니다. 편안한 밤 되세요! 정말 힘드네요.. 파이썬 ㅠㅠ 평생 실무에 쓰지도 않을 것 같은데 왜이리 힘들게 하는지 ㅠㅠ

[Might]님의 댓글을 신고합니다. 취소 신고
포인트봇
포인트봇 Might 님께
2021.09.26. 03:39
회원님 1포인트 채굴 성공!
[포인트봇]님의 댓글을 신고합니다. 취소 신고
타조알
타조알 Might 님께
2021.09.26. 10:52

일단 result라는 변수명이 두 번 쓰여서 문제가 있을 거 같아요. result=[]에서 리스트로 지정해주었는데 for result in corpus: 여기서 result를 다른 값으로 덮어씌워주게 되어서 둘 중 하나의 이름을 바꿔줘야 될 거 같습니다.

10초 걸리면 보통 무한루프가 돌아가는 건데 코드만 봐서는 왜 그런지는 잘 모르겠네요..

화이팅하세요 ㅎㅎ

[타조알]님의 댓글을 신고합니다. 취소 신고
Might
글쓴이
2등 Might
2021.09.26. 02:28

def filter_by_text(text) :

    # 주어진 규칙에 맞추어 filter_by_text()함수를 구현해주세요.

    # corpus.txt에 있는 텍스트를 읽어와서 corpus라는 리스트에 추가한다.

    corpus = []

    with open(text) 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 = []

    result = [result for result in corpus if word.startswith(text)]

    

    # 찾은 영어 단어를 빈도수를 기준으로 내림차순으로 정렬하여 20개만 출력한다.

    return sorted(corpus, key=itemgetter(1), reverse=True)[:20]

    

print(filter_by_text(text))

# 아래 부분은 수정하지 마세요!

# 입력과 출력을 수행하는 코드입니다.

t = input()

filter_by_text(t)

 

다시 조금 수정을 해보았는데..

 

Traceback (most recent call last): File "main.py", line 21, in <module> print(filter_by_text(text)) NameError: name 'text' is not defined
코드 실행이 완료되었습니다.
 
이런 오류가 뜹니다 흑흑 ㅠㅠ
[Might]님의 댓글을 신고합니다. 취소 신고
ONNURI Might 님께
2021.09.26. 02:33

우선 프로그래밍 문제를 해결하시는데 앞서, 문제가 무엇인지 정의를 정확히 파악하시는 것이 중요할 것 같습니다.

문제는 문자열을 text로 받아서, 그 문자열로 시작하는 파일을 읽어오도록 하고 있습니다.

그런데 Might님이 구현하신 코드에서 text는 어느새 open에 사용되어 문자열의 빈도수를 나타내는 파일의 이름인 것처럼 사용되고 있습니다.

조급한 마음은 알겠습니다만, 조금 더 차분히 문제를 해결하시는 것이 필요하지 않을까 생각합니다ㅏ.

또한, itemgetter가 무엇인지는 여전히 코드에서 드러나있지 않네요. 이러면 컴퓨터는 이게 무엇인지 전혀 모릅니다.

[ONNURI]님의 댓글을 신고합니다. 취소 신고
포인트봇
포인트봇 ONNURI 님께
2021.09.26. 02:33
회원님 1포인트 채굴 성공!
[포인트봇]님의 댓글을 신고합니다. 취소 신고
Might
글쓴이
Might ONNURI 님께
2021.09.26. 02:44

넵, 맞습니다. 사실 프로그래밍을 배우고 싶다는 마음은 갖고 있었는데.. 현재 회사에서 권유이지만 사실 절대 거절할 수 없는 분위기로 입교를 강요한 상태인데다.. 이 강의가 솔직히 초보자들이 기본 개념을 탄탄하게 익히고 요 정도 수준의 문제를 풀기에도 부실한 수준이라 따로 공부를 해야 하는데.. 갑자기 전달부터 바빠지고 이번달은 단 하루 빼고 추석연휴에도 하루도 못쉬고 출근하는 일정이 겹친 데다가 월말까지 과정을 완전히 수료해야 하다 보니 지금 머리가 하얗습니다 ㅠㅠ 오늘도 이거 단 2문제로 지금까지 하루 종일 씨름했는데 풀지도 못해서.. 너무너무 정신적으로 지치고 공포에 휩싸여서 조급함만 늘어가고 있는 상태입니다. 너무 힘들어서 횡설수설을 해버렸네요.. 친절하게 가르쳐 주셔서 감사합니다 ㅜㅜ 조각조각 개념들은 어느 정도 이해를 하였는데, 근본적인 뿌리자체가 내리지 못한 상태라 선생님께서 아주 친절히 설명해주시는 부분들도 흡수가 잘 안 되고 있답니다 흑흑..

[Might]님의 댓글을 신고합니다. 취소 신고
ONNURI
2021.09.26. 03:03

1번 관련해서 설명과 곁들여서 써드립니다.

그런데 우선은 프로그래밍 기초부터 다시 쌓으시는 게 좋지 않을까 싷습니다... 지금 이 코드를 복붙해서 통과하셔도 실력은 안 늘어서 악순환만 반복됩니다. 마지막에 마지막 순간에 봐주세요

 

## ## 표시를 한 것이 제가 설명드리는 부분입니다
 
## 이 문제의 핵심은 occurence를 기준으로 정렬을 하는 sorted에서 특정 값을 기준으로 정렬할 수 있는지에 대한 것입니다
## key로 들어가는 함수는 인자를 하나 받아서, return으로 정렬에 필요한 값을 가져옵니다. 이번에는 occurence를 가져와야합니다
## 조금 더 익숙해지시면 람다 함수라는 것을 이용해서 더 간단하게 짜실 수 있지만, 보기 편하시도록 따로 함수로 정의했습니다
def sort_by_occurence(word_occurence_dictionary):
    ## 나누어진 값 중 빈도수를 return하기 전에 int 함수를 통해서 int로 바꿔줍니다.
    ## 이렇게 하지 않으면 str, 스트링으로 비교하게 되는데, 이 경우 문제가 생깁니다
    ## ex) sorted(["20", "100"]) => ['100', '20'] 이렇게 정렬해줍니다. 변환해줘야겠죠?
    return int(word_occurence_dictionary['occurence'])
 
def filter_by_text(text) :
 
    # 주어진 규칙에 맞추어 filter_by_text()함수를 구현해주세요.
 
    # corpus.txt에 있는 텍스트를 읽어와서 corpus라는 리스트에 추가한다.    
    ## 우선 정렬할 내용물들을 넣는 리스트를 만듭니다
    corpus = []
 
    ## corpus 파일을 읽어옵니다
    with open('corpus.txt'as file:
        ## readlines 함수는 파일 내의 모든 줄을 읽은 다음에 이를 줄바꿈에 따라 list로 하나씩 넣어줍니다
        lines = file.readlines()
        for line in lines:
            ## split은 기본적으로 인자가 주어지지 않으면 split()으로 한 경우, 빈칸(탭, 스페이스 등)을 기준으로 나눠줍니다
            ## split은 안에 string이 주어지는 경우 이를 기준으로 나눕니다. 이번에는 "/"을 기준으로 한다 했으니, "/"을 넣습니다
            split_word_occurence = line.split("/")
            word = split_word_occurence[0]
            occurence = split_word_occurence[1]
 
            if word.startswith(text):
                ## 별 의미는 없지만, occurence를 확실히 하기 위해서 그냥 dictionary에 넣어줬습니다
                word_occurence_dictionary = {'word': word, 'occurence': occurence}
                corpus.append(word_occurence_dictionary)
 
    
 
    # 찾은 영어 단어를 빈도수를 기준으로 내림차순으로 정렬하여 20개만 출력한다.
 
    ## key에 함수를 넣어서 sort_by_occurence에 의해 정렬되도록 합니다
    for dict_item in sorted(corpus, key=sort_by_occurence, reverse=True)[:20]:
        ## 문제에서 출력을 하라 했으므로 이에 따라 출력을 합니다. 이전에 구현한 코드를 보면 출력하는 부분이 없더라고요.
        print(dict_item['word'])
        print(dict_item['occurence'])
 
    
 
    
 
# 아래 부분은 수정하지 마세요!
 
# 입력과 출력을 수행하는 코드입니다.
 
t = input()
 
filter_by_text(t)
[ONNURI]님의 댓글을 신고합니다. 취소 신고
Might
글쓴이
Might ONNURI 님께
2021.09.26. 03:33

캡처.JPG

선생님, 늦은 시간까지 정성스러운 답변 정말 감사드립니다.

 

요렇게 주신 대로 작성했는데.. 희한하게도 저렇게 나옵니다 ㅠㅠ

 

문제 의도 자체가 함수를 def filter_by_text(text) : 요거 하나만 써서 만들어라고 하는 것 같아서

 

그 부분 때문인지는 저도 잘 모르겠습니다.. 전혀 어떤 부분이 문제인지 감이 안 잡히는군요 ㅠㅠ

 

회사에서도 문과 방면 일을 하고, 파이썬은 아마 퇴사 전까지 건드릴 일도 없을 것 같은데 이렇게

 

과정을 수료하려고 하니.. 솔직히 너무 버겁긴 합니다. 그런데 누구한테 힘들다고 털어놓을 수도 없더라구요

 

ㅎㅎ.. 저만 이 과정을 듣고 있는데 동기부여도 생존 때문이라는 단 하나 외에는 없는데 이게 너무 스트레스가

 

크다 보니.. 이거 때문에 다 놓고 싶을 정도로 핀치에 몰려있네요 ㅠㅠ 널널한 상황에서도 꽤 압박이 될 텐데

 

한 달 동안 단 한 시간을 맘편히 쉬지 못한 상황에서 이러니 ㅠㅠ...

 

너무 늦은 시간이니 혹시 저를 불쌍히 여겨 추가 답변 해주실 부분이시라면 내일 해주셔도 괜찮습니다.

 

정말 감사합니다 ㅠㅠ

[Might]님의 댓글을 신고합니다. 취소 신고
ONNURI Might 님께
2021.09.26. 11:34

흠... 왜그럴까용

혹시 원래 return형태로 끝내라고 되어있으면 아래의 print 구문이 들어간 절을 지우고 리스트를 return해보는 걸 해보시면 될지도 모르겠습니다.

근데 자세한 것은 해당 플랫폼의 구동 방식과 관련된거라 정확하지 않을 수 있습니다.

[ONNURI]님의 댓글을 신고합니다. 취소 신고
Eomjunsik
Eomjunsik
2021.09.26. 12:27

해결 되셨나요?

해결이 안되셨다면 문제의 입출력 조건과 corpus.txt 파일 등 조건을 조금 더 상세히 제공해 주시면 도움이 될 것 같습니다. 

[Eomjunsik]님의 댓글을 신고합니다. 취소 신고
Might
글쓴이
Might Eomjunsik 님께
2021.09.26. 13:51

여전히 해결되지 않았습니다 ㅜㅜ

[Might]님의 댓글을 신고합니다. 취소 신고
Might
글쓴이
Might Eomjunsik 님께
2021.09.26. 13:52

corpus 파일은

zoo/771

zones/1168

yellow/2817

.

.

이런식으로 영어 단어와 빈도가 /로 구분되어져 있는 형태입니다.

[Might]님의 댓글을 신고합니다. 취소 신고
Might
글쓴이
Might Eomjunsik 님께
2021.09.26. 13:54

77.JPG

88.JPG

99.JPG

[Might]님의 댓글을 신고합니다. 취소 신고
포인트봇
포인트봇 Might 님께
2021.09.26. 13:54
회원님 1포인트 채굴 성공!
[포인트봇]님의 댓글을 신고합니다. 취소 신고
Might
글쓴이
Might Eomjunsik 님께
2021.09.26. 13:55

문제 전문과 초기 상태의 코드 입력창입니다 ㅠㅠ 정말 다른 업무들은 어떻게든 다 버티면서 힘들어도 하는데..  파이썬 과정 수료가 최고 관문이고 스트레스네요;; 아직도 문제들이 몇 개 더 있어서 흑흑 ㅠㅠㅠ 사람 한 명 살린다 생각하시고 조금만 도와주시면 정말 감사하겠습니다 ㅠㅠ 사례도 해드릴 수 있습니다 그만큼 살아남기 위해 절박한 심정입니다..

[Might]님의 댓글을 신고합니다. 취소 신고
Eomjunsik
Eomjunsik Might 님께
2021.09.26. 14:59

윗분의 답을 조금 수정했습니다. 거의 다 맞으셨는데 출력 형식을 원 글에 안적어주셔서 그 부분이 틀렸던 것 같네요.

 

def sort_by_occurence(word_occurence_tuple):
    return int(word_occurence_tuple[1])
 
def filter_by_text(text):
    corpus = []
 
    with open('corpus.txt'as file:
        lines = file.readlines()
        for line in lines:
            split_word_occurence = line.split("/")
            word = split_word_occurence[0]
            occurence = split_word_occurence[1].rstrip('\n')
 
            if word.startswith(text):
                word_occurence_tuple = (wordoccurence)
                corpus.append(word_occurence_tuple)
 
    print(sorted(corpuskey=sort_by_occurencereverse=True)[:20])
 
t = input()
filter_by_text(t)
 
윗 분 말대로 더 효율적인 방법은 널렸는데 굳이 효율을 따질 필요가 없는 문제이기도 하고.. 이 정도면 충분하실 것 같아요. 이 답이 틀리거나 해설이 필요하시면 답글 주시면 됩니다 ㅎㅎ.. 그리고 2번은 그럼 해결 되신거죠?
[Eomjunsik]님의 댓글을 신고합니다. 취소 신고
Might
글쓴이
Might Eomjunsik 님께
2021.09.26. 15:37

넵 2번은 해결을 했습니다.

def filter_by_text(text):
    corpus = []

 

    with open('corpus.txt'as file:
        lines = file.readlines()
        for line in lines:
            split_word_occurence = line.split("/")
            word = split_word_occurence[0]
            occurence = split_word_occurence[1].rstrip('\n')

 

            if word.startswith(text):
                word_occurence_tuple = (wordoccurence)
                corpus.append(word_occurence_tuple)

 

    print(sorted(corpuskey=sort_by_occurencereverse=True)[:20])

 

t = input()
filter_by_text(t)
요렇게 적어주신 대로 했는데 특별한 에러는 안 나는데.. 코드 실행 후 10초 후에 시간 초과로 강제 종료가 되고
채점에서도 점수가 안 올라가네용 ㅜㅜ 제가 너무 한심하고 도움주시는분들께도 죄송합니다 ㅠㅠㅠㅠ
맨 위에 추가해주신 함수를 넣기도, 빼기도 해봤는데 동일했습니다. 아마 제시문에서 단 하나의 함수만 준 걸 보니 굳이 없어도 되는 부분인 거같기는 한데.. 제가 잘 모르다 보니 ㅠㅠ
[Might]님의 댓글을 신고합니다. 취소 신고
Eomjunsik
Eomjunsik Might 님께
2021.09.26. 15:47

두 함수 모두 있어야지만 코드가 작동합니다. 제가 직접 돌려봤을때는 잘 작동하는데 뭐가 문제인지 모르겠네요. 문제의 입출력 조건에는 이제 완벽히 부합하는데..

 

그쪽 채점 플랫폼이 어떤 방식으로 채점을 하는지를 모르니 여기서 더 도와드릴 방법이 없는 것 같습니다. 코드에는 오류가 없어서요. 차라리 고객센터나 뭐 회사나 그쪽에 문의해보시는게 나을 것 같아요. 

 

마지막 가능성으로 문제에서 주석으로 준 것과 같이 corpus나 result 같은 내부 변수를 체크할 수도 있긴 한데.. 그럴 리가 없거든요. 문제에 나온 채점 조건은 출력만 하면 되니까. 그리고 시간 초과 오류가 나올 코드 자체가 아닙니다 연산 수준이.. 

[Eomjunsik]님의 댓글을 신고합니다. 취소 신고
Might
글쓴이
Might Eomjunsik 님께
2021.09.26. 15:51

크흑 ㅜㅜ 혹시 제가 들여쓰기 같은 걸 틀렸을 가능성은 없을까요? ㅜㅜ 도움 주시는 분들이 계시는데도 해결 못 하는 제가 너무 한심한 것 같습니다 ㅜㅜ

[Might]님의 댓글을 신고합니다. 취소 신고
Eomjunsik
Eomjunsik Might 님께
2021.09.26. 15:54

들여쓰기 문제라면 들여쓰기 문제가 있다고 오류가 나옵니다. 시간 초과 문제는 코드의 구조적 결함이 있거나 그냥 저 사이트가 맛이 간건데 코드가 제 로컬에서는 잘 돌아가거든요. 채점 시스템이 맛이 간 것 같습니다. 

[Eomjunsik]님의 댓글을 신고합니다. 취소 신고
ONNURI
2021.09.26. 14:31

혹시 컴퓨터에 파이썬 실행 환경이 세팅되어 있습니까?(=파이썬이 깔려있나요?)

제가 올린 코드를 그대로 붙여놓은 뒤 파이썬으로 실행하면 작동이 되나요?(같은 디렉토리에 corpus.txt가 존재해야 합니다. 얘도 복붙해서 넣으시면 됩니다) input()이 들어가있으니 실행을 한 뒤 원하시는 글자를 넣고서 엔터를 누르면 (출력 포맷을 보지 못해서 제대로 안 적었지만) 실행하는 걸 보실 수 있을겁니다.

출력 포맷의 경우, 해당 학습 플랫폼마다 방법이 달라서(예를 들어, 어떤 사이트는 화면 출력 함수를 이용해서 출력하라고 요구하고, 어떤 사이트는 함수로 return하라는 식으로 언급합니다) 이에 대한 차이일 수 있습니다. 핵심 로직은 제가 구현해놓았으니 사이트에서 요구하는 사항을 먼저 확인하시는 것이 급선무일 것 같습니다. 이후 적절히 이를 포맷에 맞춘 뒤 보내주시면 됩니다.

2번 로직은 거의 비슷하게 잘 짜신 것 같아 크게 말씀드리지는 않겠습니다.

[ONNURI]님의 댓글을 신고합니다. 취소 신고
Might
글쓴이
Might ONNURI 님께
2021.09.26. 14:39

선생님 이틀에 걸쳐 정말 감사드립니다. 제 컴퓨터에 파이썬은 세팅이 되어 있지 않습니다 ㅜㅜ 프로그래밍 실력을 올리는 건 추후에 꼭 해보고 싶은 일이긴 하나 일단 살아야 해서 어떻게든 통과만 하려고 발버둥 치고 있습니다 ㅜㅜ 선생님이 주신 코드를 복붙하니 앞 부분에 빨간 것들이 막 생겨서.. 지우고 제가 어떻게 들여쓰기 대충 맞춰봤는데 이런 에러가 뜨네요 ㅠㅠ 이렇게 하는 게 맞을까요? 출력까진 안 되더라도 정답만 맞으면 점수가 나오는 것 같기는 한데 ㅠㅠ

red.JPG

131313.JPG

[Might]님의 댓글을 신고합니다. 취소 신고
ONNURI Might 님께
2021.09.26. 14:47

for dict_item 구문을 지우고 그냥 그 뒤에 있는 sorted()[:20]을 return 해보시겠어요?

지금 오류 나는 건 print를 넣지 말아달라는 말씀 드려서 그냥 print구문만 지우니까... for문이 자기 뒤에 아무것도 없다고 그러는거거든요 (   ..)

[ONNURI]님의 댓글을 신고합니다. 취소 신고
ONNURI ONNURI 님께
2021.09.26. 14:48

그리고 이런 거 하시려면 자기 컴퓨터에 로컬로 실행할 수 있는 환경 하나 마련하시는 게 좋습니다. 어렵지도 않아요. 그냥 구글에 들어가서 파이썬이라고만 치면 설치하는 사이트 나옵니다.

저런 사이트는 채점을 하기 위해서 우리가 모르는 로직이 어딘가에서 돌아가기 때문에 결과값이 제대로 만든 게 맞는지 확인하는 게 어렵습니다

[ONNURI]님의 댓글을 신고합니다. 취소 신고
Might
글쓴이
Might ONNURI 님께
2021.09.26. 15:30

그렇군요.. 사실 진짜 어쩌다 보니 수료 과정에 올라탄 거라 강의 수강하고 이해하기에만 급급해서.. 파이썬 환경을 세팅할 생각조차 하지 못했습니다 ㅜㅜ 강의 사이트마다 로직이 다른 부분도 있을 수 있겠네요 ㅠㅠ

[Might]님의 댓글을 신고합니다. 취소 신고
ONNURI Might 님께
2021.09.26. 15:34

넵넵! 그리고 로컬에 환경을 설정해놔야 나중에 공부해본 거 써먹어보죠! :)

혹시 다시 안 되면 연락주세요

[ONNURI]님의 댓글을 신고합니다. 취소 신고
취소
번호 제목 글쓴이 날짜 조회 수
공지 사이트 이용 수칙 230228 수정 admin 19.11.25 7 58375
핫글 다른 거 떠나서 그 커뮤니티 여기 오면 걱정되는 점 [19] Alternative 24.03.28 27 382
핫글 오랜만에 글써봅니다. [6] file sjkoon 24.03.28 19 236
핫글 그... 타 커뮤발 엑소더스 너무 걱정하지 않으셔도 될 것 같은데요. [5] Aimer 00:42 14 222
87360 솔직히 스벅에 갤럭시북 들고가는건ㅋㅋ;; [21] Alternative 21.09.26 2 412
87359 스벅에 갤럭시북이 왜 입장할 수 없는거죠 [3] [성공]함께크는성장 21.09.26 2 265
87358 스벅 입장시 다들 주의좀 바랍니다 [26] file 사이렌오더 21.09.26 16 936
87357 "산 채로 자존심이 벗겨진 남자"(수정완료) [7] file 몽구스 21.09.26 1 398
87356 흰색 까마귀와 자주색 소 [10] Alternative 21.09.26 2 339
87355 죽은 자의 온기가 남아 있습니다 [3] file 연말정산 21.09.26 3 219
87354 세상에 맙소사.... [3] file 닉포토 21.09.26 1 142
87353 일요일 점심 간식 [12] file Fold3 21.09.26 5 147
87352 "야 꿀벌"(feat. 120fps 촬영) [4] file 이라세오날 21.09.26 8 353
87351 마스크 샀읍니다 [8] file Fold3 21.09.26 4 119
87350 5만원대 스마트워치 뭐가 좋을까요?? [15] 연말정산 21.09.26 0 273
87349 연휴 마지막에 착한 일 하나 했슴다 [1] Angry 21.09.26 7 125
87348 쿠팡발 미패드5 중고거래 가능한가요? [7] 성공예감 21.09.26 0 320
87347 유선 인터넷 다른거보다 [4] Memeko 21.09.26 2 176
87346 가방이 무거웠던 이유 [4] file Kanata 21.09.26 4 222
87345 병원을 가봐야 할까요? [4] 닉포토 21.09.26 2 792
87344 생각해보니 내년이면 2002 월드컵 열린지 20년이네요 [2] 응기잇 21.09.26 0 134
87343 한진택배 일요일에도 배송하시네요 ㅜㅜ [4] 연말정산 21.09.26 1 1040
선생님들.. 파이썬 2문제만 질문드리옵니다 ㅠㅠ [41] file Might 21.09.26 0 2852
87341 넷플릭스는 매월 풍년이네요. [4] 아재건달_보노뭘보노 21.09.25 1 493
87340 KT 인터넷 요금제 명칭 변경.jpg [18] file 존버합니다 21.09.25 5 657
87339 자유로에서 고라니 칠뻔했습니다 [14] Chrop 21.09.25 9 482
87338 내일이면 연휴 마지막이군요 [3] Angry 21.09.25 0 209
87337 미코 최고 똥손 [2] file Elsanna 21.09.25 1 126
87336 미코 최고 똥손 [2] file sands 21.09.25 1 174

추천 IT 소식 [1/]

스킨 기본정보

colorize02 board
2017-03-02
colorize02 게시판

사용자 정의

1. 게시판 기본 설정

게시판 타이틀 하단에 출력 됩니다.

일반 게시판, 리스트 게시판, 갤러리 게시판에만 해당

2. 글 목록

기본 게시판, 일반 게시판, 썸네일 게시판만 해당

썸네일 게시판만 해당

썸네일 게시판만 해당

썸네일 게시판만 해당

썸네일 게시판만 해당

3. 갤러리 설정

4. 글 읽기 화면

기본 10명 (11명 일 경우, XXXXX 외 1명으로 표시)

5. 댓글 설정

일정 수 이상의 추천을 받은 댓글에 표시를 합니다.

6. 글 쓰기 화면 설정

글 쓰기 폼에 미리 입력해 놓을 문구를 설정합니다.

서버에 요청 중입니다. 잠시만 기다려 주십시오...