파이썬 else 와 elif 차이 질문합니다
9번째 줄에 else가 아닌 elif를 써야 실행이 되던데
왜 else를 못쓰는건가요?
원래 elif 쓰다가 마지막 조건줄에서는 else 쓰는거 아닌가요?
else를 사용할 때는 elif 처럼 앞에 조건을 달면 안됩니다. else절을 마지막에 사용하는 이유는 else 전에 elif 의 조건을 모두 만족하지 않았을 경우에 실행이 되기 때문에 elif와 같이 조건을 붙여줄 필요가 없습니다. 또한 위와 같이 else를 꼭 사용하지 않아도 elif 만을 사용하여 각 조건을 만족할 때 해당 elif 절을 실행하도록 할 수 있기 때문에 elif만을 사용했을 때 실행이 되는 것입니다.
if oper == "+" : result = var1 + var2 elif oper == "*" : result = var1 * var2 elif oper == "-" : result = var1 - var2 elif oper == "/" : result = var1 / var2
만약 마지막 else를 쓰게되면 oper 가 + * - 빼고 모든 문자에 관해서 else문 안쪽이 실행 되겠습니다. 그래서 보통 else문이 마지막에 쓰이지만 그것이 무조건 마지막에 써야한다는 말이 아닙니다.
안녕하세요,
답변드립니다.
두가지 잘못생각 하고 계셔서 말씀드립니다.
1. 마지막줄이라고 꼭 else를 쓸 필요는 없습니다.
if문 하나만 하고 끝날수도 있고, elif 로 끝날 수 있습니다.
2. else의 뜻을 명확하게 이해하셔야 합니다.
else는 위에 조건들 외 나머지 모두 의 조건입니다.
즉, else oper == "/" : 라는 조건식은 불가하며 else : 로 사용하셔야합니다.
위 코드를 고치면 아래와 같아지겠네요.
def calc(var1, var2, oper) : result = 0 if oper == "+" : result = var1 + var2 elif oper == "*" : result = var1 * var2 elif oper == "-" : result = var1 - var2 else : result = var1 / var2 return result res = 0 v1, v2, op = 0, 0, "" op = input("계산 입력") v1 = int(input("첫 번째 수") v2 = int(input("두 번째 수") res = calc(v1,v2,op) print("결과 : %d %s %d %d = %d" % (v1,op,v2,res))감사합니다.
else, elif 둘 다 문법상 문제는 없고, 잘 돌아갑니다. 하지만,
1. else를 사용하게되면 "/"스트링이아닌 어떠한 문자열이 들어와도 나눗셈으로 들어가는 logical error가 있습니다.
2. 백준이나 leet code 같은 곳의 Problem Solving 문제라면 1번의 edge case(경계값 테스팅)에서 실패했을 가능성이 있습니다.
else는 조건이 붙지가 않습니다.
이유는 else는 if와 elif 에서 만족하지 않으면 무조건 타는 곳이기 때문에 조건을 붙일 이유가 없습니다.
이것은 대부분 프로그래밍 언어가 동일합니다.
아래처럼 하면 실행이 되기는 합니다.
def calc(var1, var2, oper) : result = 0 if oper == "+" : result = var1 + var2 elif oper == "*" : result = var1 * var2 elif oper == "-" : result = var1 - var2 else: result = var1 / var2 return result op = input("계산 입력") v1 = int(input("첫 번째 수")) v2 = int(input("두 번째 수")) print("결과 : %d %s %d = %d" % (v1, op, v2, calc(v1,v2,op)))if 명령문에서 else 가 있다면?
해당 비교문은 2가지 사항에 대해서만 처리가 가능하겠죠
예를 들어 참이냐 거짓이냐 2가지죠
하지만 비교해야할 경우의 수가 n개라면?
if a==1:
result = 1
if a==2:
result = 2
:
:
:
if a==n:
result = n
몬가 비효율적으로 보이죠? 이럴때 사용하는게 질문에 적은것처럼 elseif 가 필요합니다
근데 질문내용을 보면
"9번째 줄에 else가 아닌 elif를 써야 실행이 되던데 왜 else를 못쓰는건가요?"
라고 하셨죠?
9번째에서 글자가 "/" 인지 비교해서 맞다면 result 값을 계산하고 끝나는것이고
"/"가 아니라면? 0 을 리턴값으로 돌려보냅니다
근데 9번째를 else 로 하게 되면? 결과적으로 지정된 글자가 아님에도 불구하고
result값을 계산한다는거죠
그래서 elseif 를 사용해야 하는것입니다
- def calc(var1, var2, oper) : result = 0 if oper == "+" : result = var1 + var2 elif oper == "*" : result = var1 * var2 elif oper == "-" : result = var1 - var2 elif oper == "/" : result = var1 / var2 return result
이 로직에서 else를 쓰게 되면 "+" "*""-" "/" 이외의 연산자가 들어와도 처리 하게 됩니다.
그렇기 때문에 해당하는 조건에 맞게 처리할 수 있는 로직으로 구현해줘야겠죠.