[파이썬] 특정단어가 포함된 것만 엑셀시트에 마킹하는 문제가 안풀려요
조회수 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 답변
-
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
가 "설치 가격" 일 경우if "배송" in content
거짓이므로 실행하지 않고 통과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])
이렇게 실행해 보시면 원하시는 결과를 얻으실 수 있을것 같습니다.
댓글 입력