공유해 주신 파이썬 코드에서 발생하는 문제는 크게 두 가지입니다. 각각의 원인과 해결 방법을 살펴보겠습니다.
1. 들여쓰기(Indentation) 오류
첫 번째 문제는 if 문 바로 아래의 코드 블록이 들여쓰기 되어 있지 않아 발생합니다. 파이썬은 중괄호({}) 대신 들여쓰기로 코드 블록의 범위를 구분하는 언어입니다. 따라서 if, for, while 등의 문장 아래에 오는 실행 코드는 반드시 공백 4칸(또는 탭 1개)으로 들여쓰기를 해야 합니다.
들여쓰기가 없으면 IndentationError: expected an indented block 오류가 발생합니다.
2. 정의되지 않은 변수 오류 (NameError)
두 번째 문제는 name 변수가 선언되거나 값이 할당되기 전에 사용되었기 때문에 발생합니다. 파이썬에서 변수는 값을 먼저 할당한 후에만 사용할 수 있으며, 그렇지 않으면 NameError: name 'name' is not defined 오류가 나타납니다.
사용자의 이름을 입력받으려면 input() 함수를 통해 name 변수에 값을 저장해 주어야 합니다.
수정된 전체 코드
위의 두 가지 문제를 모두 해결하고, 조건문을 elif로 연결해 로직을 더 깔끔하게 정리했습니다.
print("Come-on in. Need help with any bags?")
bag = input('(1) Yes please (2) Nah, thanks (3) Ill get em later TYPE THE NUMBER ONLY')
if bag == '1':
print("Ok, ill be right there!")
elif bag == '2':
print("Okee, see ya inside. Heh, how rude of me? I'm Daniel by the way, ya?")
name = input("Daniel: Um, what's your name? ")
print("Dan: K, nice to meet ya " + name)
elif bag == '3':
print("Heh, ya remind me of someone I know... *cough* me *cough*")
print("Oh... nearly forgot. Names Daniel, ya?")
name = input("Daniel: Eh... and you are? ")
print("Dan: Cool, nice to meet you " + name)
추가 팁
- 괄호 제거:
bag == ('1')처럼 비교 대상을 괄호로 감싸는 것은 불필요합니다.bag == '1'처럼 간결하게 작성하는 것이 좋습니다. - elif 활용: 여러 개의 독립된
if문보다if - elif - else구조를 사용하면 조건이 하나만 실행되므로 논리가 더 명확해집니다. - 일관된 들여쓰기: 탭과 공백을 섞어 쓰면
TabError가 발생할 수 있으니, 공백 4칸으로 통일하는 것을 권장합니다.
이제 코드를 실행하면 사용자의 선택에 따라 대화가 자연스럽게 진행되고, 입력받은 이름이 정상적으로 출력될 것입니다.