[파이썬] 특정단어가 포함된 것만 엑셀시트에 마킹하는 문제가 안풀려요

조회수 442회
  • 작성코드내 '원하는 결과' 와 같이
    • '내용'문자열에서 '배송'이란 단어가 포함되어 있으면 '배송' 필드에 O 마킹
    • '설치'가 포함되어 있으면 '설치' 필드에 O 마킹
    • '가격'이 포함되어 있으면 '가격' 필드에 O 마킹되도록 하고 싶은데
    • 아래 코드를 돌려보면 실제 테스트 결과는 다르게 나옵니다.
    • 이것저것해보니 테스트 결과가 나오는 이유는 이해가 되었는데
    • 원하는 결과를 얻는 방법을 모르겠습니다.
    • 처음에는 간단한 문제라고 쉽게 생각했는데 도무지 문제를 못 풀겠습니다.
    • 방법아시는 님들 도와주시면 정말 감사하겠습니다. 복많이받아서 대박나실꺼예요~ - ============ 작성코드 ==========
# 작성코드
from time import strftime
from openpyxl import Workbook

wb = Workbook()
ws = wb.create_sheet("테스트")
wb.remove_sheet(wb['Sheet'])
ws.append(["이름", "내용", "배송", "설치", "가격"])

contents = ["배송 만족", "배송설치 빠름", "설치기사 친절", "가격 비쌈", "배송설치가격 모두 만족"]

for content in contents:
    product_name = "AAA"
    delivery = ""
    installation = ""
    price = ""
    mark = "O"

    if "배송" in content:
        delivery = mark
        ws.append([product_name, content, delivery, installation, price])

    elif "설치" in content:
        installation = mark
        ws.append([product_name, content, delivery, installation, price])

    elif "가격" in content:
        price = mark
        ws.append([product_name, content, delivery, installation, price])

    else:
        ws.append([product_name, content, delivery, installation, price])

wb.save("테스트.xlsx")
print("완료")


## 원하는 결과
# 이름 내용                      배송   설치   가격
# AAA  배송 만족                   O
# AAA  배송설치 빠름               O     O
# AAA  설치기사 친절                     O
# AAA  가격 비쌈                               O
# AAA  배송설치가격 모두 만족       O     O     O


## 실제 테스트 결과
# 이름 내용                      배송   설치   가격
# AAA  배송 만족                   O
# AAA  배송설치 빠름               O
# AAA  설치기사 친절                     O
# AAA  가격 비쌈                               O
# AAA  배송설치가격 모두 만족       O

1 답변

  • 좋아요

    1

    싫어요
    채택 취소하기

    elif문을 사용하셔서 그런 것 같습니다.
    elif문은 해당 구문 위에 존재하는 if문이나 elif문의 조건이 거짓일때 실행됩니다.
    아래의 코드로 예를 들면

    if "배송" in content:
        delivery = mark
        ws.append([product_name, content, delivery, installation, price])
    
    elif "설치" in content:
        nstallation = mark
        ws.append([product_name, content, delivery, installation, price])
    
    elif "가격" in content:
        price = mark
        ws.append([product_name, content, delivery, installation, price])
    
    else:
        ws.append([product_name, content, delivery, installation, price])
    

    만약 content가 "설치 가격" 일 경우

    1. if "배송" in content 거짓이므로 실행하지 않고 통과
    2. elif "설치" in content 참이므로 실행하고 전체 if-elif-else문 종료

    로 끝이 나버립니다.

    가장 먼저 모든 상황에서

    ws.append([product_name, content, delivery, installation, price])
    

    코드는 사용되기 때문에 조건문 바깥으로 빼면 코드는 아래와 같이 변하게 됩니다.

    if "배송" in content:
        delivery = mark
    
    elif "설치" in content:
        nstallation = mark
    
    elif "가격" in content:
        price = mark
    
    ws.append([product_name, content, delivery, installation, price])
    

    그리고 content의 여러 값에 모두 대응해 줘야 하기 때문에 elif문을 if문으로 변경하면 결과적으로 아래의 코드로 바뀝니다.

    if "배송" in content:
        delivery = mark
    
    if "설치" in content:
        nstallation = mark
    
    if "가격" in content:
        price = mark
    
    ws.append([product_name, content, delivery, installation, price])
    

    이렇게 실행해 보시면 원하시는 결과를 얻으실 수 있을것 같습니다.

    • 와 제대로 실행되네요 정말 감사합니다~ 도시에빛 2022.9.2 01:11
    • 축하드립니다!! QbQi 2022.9.2 01:30

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)