파이썬[6일차]

정지범·2024년 12월 11일
0

python

목록 보기
6/8
참고
참고 자료는 점프 투 파이썬으로 선택했습니다.
※스스로를 위해 정리한 참고 자료입니다.

챗GPT로 배우는 점프 투 파이썬

2장 연습문제 풀이

1. 정수 7과 정수 3을 더한 결과를 구하는 파이썬 코드를 작성하세요.

a = 7
b = 3
c = a + b
print(c)

2. 주어진 실수 3.1415를 소수점 두 번째 자리에서 반올림하는 파이썬 코드를 작성하세요.

# 풀이방법 1
a = round(3.1415, 2)
print(a)
# 풀이방법 2
a = 3.1415
b = "%0.2f" % a
print(b)
# 풀이방법 3
a = 3.1415
b = "{:.2f}".format(a)
print(b)
round(숫자, 소수점_자리수)

첫 번째 인자: 반올림할 숫자
두 번째 인자: 반올림할 소수점 자리수

3. 주어진 문자열 'Hello, World!'에서 첫 번째 단어 'Hello'만 추출하는 파이썬 코드를 작성하세요.

# 풀이방법 1
a = "Hello, World!"
b = a[0:5]
print(b)
# 풀이방법 2
a = "Hello, World!"
b = a.split(',')[0]  # ',' 기준으로 나눈 후 첫 번째 부분 가져오기
# b = a.partition(',')[0]) 위와 같음
print(b)  # 출력: Hello

4. 주어진 문자열 'Python'의 모든 문자를 대문자로 변환하는 파이썬 코드를 작성하세요.

a = "python"
b = a.upper()
print(b)

5. 주어진 리스트 [1, 2, 3, 4, 5]에서 첫 번째 원소와 마지막 원소를 교환하는 파이썬 코드를 작성하세요.

a = [1,2,3,4,5]
a[0], a[-1] = a[-1], a[0] # 첫 번째와 마지막 원소 교환
print(a)

6. 주어진 리스트 [5, 2, 7, 1, 9]를 오름차순 정렬하는 파이썬 코드를 작성하세요.

a = [5,2,7,1,9]
a.sort()
print(a)

7. 주어진 튜플 ('apple', 'banana', 'cherry')에서 첫 번째 원소 'apple'을 추출하는 파이썬 코드를 작성하세요.

a = ('apple','banana','cherry')
print(a[0])

8. 두 개의 튜플 (1, 2, 3)과 (4, 5, 6)을 병합하여 새로운 튜플 (1, 2, 3, 4, 5, 6)을 생성하는 파이썬 코드를 작성하세요.

a = 1,2,3
b = 4,5,6
print(a + b)

9. 주어진 딕셔너리 {'apple': 3, 'banana': 5, 'cherry': 2}에서 'banana'의 값을 추출하는 파이썬 코드를 작성하세요.

# 이거 'banana' key를 추출하는 건줄 알고 풀음..🐧
a = {'apple': 3, 'banana': 5, 'cherry': 2}
keys = list(a.keys())
print(keys[1])
#'banana' value 가져오는 풀이방법1
a = {'apple': 3, 'banana': 5, 'cherry': 2}
print(['banana'])
# 풀이방법 2
a = {'apple': 3, 'banana': 5, 'cherry': 2}
print(a.get('banana'))

10. 주어진 딕셔너리 {'apple': 3, 'banana': 5, 'cherry': 2}에 'orange': 4를 추가하는 파이썬 코드를 작성하세요.

a = {'apple': 3, 'banana': 5, 'cherry': 2}
a['orange'] = 4
print(a)

11. 주어진 두 집합 {1, 2, 3}과 {2, 3, 4}의 교집합을 구하는 파이썬 코드를 작성하세요.

# 풀이방법 1
a = {1,2,3}
b = {2,3,4}
print(a & b)
# 풀이방법 2
a = {1,2,3}
b = {2,3,4}
print(a.intersection(b))

12. 주어진 두 불 값 True와 False를 AND 연산하는 파이썬 코드를 작성하세요.

a = True
b = False
c = a and b
print(c)



제어문

if,while,for 등의 제어문에 대해 알아보자.

ㅁ if문

>>> money = True
>>> if money:
...     print("택시를 타고 가라")
... else:
...     print("걸어 가라")
...
택시를 타고 가라
  • money에 True를 대입했으므로 money는 참이다. 따라서 if 문 다음 문장이 수행되어 '택시를 타고 가라'가 출력된다.
  • 프로그램 실행 과정을 순서도로 그려 보면 훨씬 이해하기 쉽다.

ㅇ if문의 기본 구조

다음은 if와 else를 사용한 조건문의 기본 구조이다.

if 조건문:
    수행할_문장1
    수행할_문장2
    ...
else:
    수행할_문장A
    수행할_문장B
    ...
  • 조건문을 테스트해서 참이면 if문 바로 다음 문장(if 블록)들을 수행하고 조건문이 거짓이면 else문 다음 문장(else 블록)들을 수행하게 된다.
  • 따라서 else 문은 if 문 없이 독립적으로 사용할 수 없다.

ㅇ 들여쓰기 방법 알아보기

if 문을 만들 때는 if 조건문: 바로 다음 문장부터 if 문에 속하는 모든 문장에 들여쓰기(indentation)를 해야 한다.

  • 다음 예를 보면 조건문이 참일 경우 ‘수행할문장1’을 들여쓰기했고 ‘수행할문장2’와 ‘수행할문장3’도 들여쓰기했다.
    ※ 다른 프로그래밍 언어를 사용해 온 사람들은 파이썬에서 ‘수행할
    문장’을 들여쓰기하는 것을 무시하는 경우가 많으므로 더 주의해야 한다.
if 조건문:
    수행할_문장1
    수행할_문장2
    수행할_문장3

↑↑↑ 들여쓰기한 문장

  • 다음처럼 작성하면 오류가 발생한다. ‘수행할_문장2’를 들여쓰기하지 않았기 때문이다.
if 조건문:
    수행할_문장1
수행할_문장2
    수행할_문장3
  • IDLE 에디터에서 다음과 같이 작성하여 실행해 보자.
  • 여기서는 오류가 발생하는지 확인만 하면 되므로 IDLE 에디터 창에 코드를 작성하고 [F5]를 눌러 바로 실행하자.
# indent_error.py
money = True
if money:
    print("택시를")
print("타고")
    print("가라")

들여쓰기 오류가 발생하는 것을 확인할 수 있다.

  • 다음과 같은 경우에도 오류가 발생한다.
  • '수행할문장3'을 들여쓰기했지만, '수행할문장1'이나 '수행할_문장2'와 들여쓰기의 깊이가 다르다.
  • 즉, 들여쓰기는 언제나 같은 깊이로 해야한다.
if 조건문:
    수행할_문장1
    수행할_문장2
        수행할_문장3

그렇다면 들여쓰기는 공백 문자([Spacebar])로 하는 것이 좋을까, 탭 문자([Tab])로 하는 것이 좋을까?
이에 대한 논란은 파이썬을 사용하는 사람들 사이에서 아직도 계속되고 있다.
공백 문자로 하자는 쪽과 탭 문자로 하자는 쪽 모두가 동의하는 내용은 2가지를 혼용해서 쓰지 말자는 것이다.
공백 문자로 할 것이라면 공백으로 통일하고, 탭 문자로 할 것이라면 탭으로 통일하자는 말이다. 탭이나 공백은 프로그램 소스에서 눈으로 보이는 것이 아니기 때문에 혼용해서 쓰면 오류의 원인이 되므로 주의하자.

요즘 파이썬 커뮤니티에서는 들여쓰기를 할 때 공백 문자 4개를 사용하는 것을 권장한다.
또한 파이썬 에디터는 대부분 탭 문자로 들여쓰기를 하더라도 탭 문자를 공백 문자 4개로 자동 변환하는 기능을 갖추고 있다.

ㅇ 조건문 다음에 콜론(:)을 잊지 말자!

if 조건문 뒤에는 반드시 콜론(:)이 붙는다.
어떤 특별한 의미가 있다기보다는 파이썬 문법 구조이다.
왜 하필 콜론(:)인지 궁금하다면 파이썬을 만든 귀도에게 직접 물어봐야 할 것이다.
앞으로 배울 while이나 for,def,class도 역시 문장의 끝에 콜론(:)이 항상 들어간다.

파이썬이 다른 언어보다 보기 쉽고 소스 코드가 간결한 이유는 바로 콜론(:)을 사용하여 들여쓰기를 하도록 만들었기 떄문이다.
하지만 이는 숙련된 프로그래머들이 파이썬을 처음 접할 때 제일 혼란스러워하는 부분이기도 하다.
다른 언어에서는 if문에 속한 문장들을 {}로 감싸지만, 파이썬에서는 들여쓰기로 해결한다는 점을 기억하자.

ㅇ 조건문이란 무엇인가?

if 조건문에서 '조건문'이란 참과 거짓을 판단하는 문장을 말한다.

앞에서 살펴본 택시 예제에서 조건문은 money가 된다.

>> money = True
>> if money:
  • money는 True이기 때문에 조건이 참이 되어 if 문 다음 문장을 수행한다.

ㅇ 비교 연산자

이번에는 조건문에 비교 연산자(<, >, ==, !=, >=, <=)를 쓰는 방법에 대해 알아보자.

다음 표는 비교 연산자를 잘 설명해 준다.

비교연산자설명
x < yx가 y보다 작다.
x > yx가 y보다 크다.
x == yx와 y가 같다.
x != yx와 y가 같지 않다.
x >= yx가 y보다 크거나 같다.
x <= yx가 y보다 작거나 같다.
  • 이제 이 연산자를 어떻게 사용하는지 알아보자.
>> x = 3
>> y = 2
>> x > y
True
>>
  • x에 3, y에 2를 대입한 후 x > y라는 조건문을 수행하면 True를 리턴한다.
  • x > y 조건문이 참이기 때문이다.
>> x < y
False
  • 위 조건문은 거짓이기 때문에 False를 리턴한다.
>> x == y
False
  • x와 y는 같지 않다. 따라서 위 조건문은 거짓이므로 False를 리턴한다.
>> x != y
True
  • x와 y는 같지 않다. 따라서 위 조건문은 참이므로 True를 리턴한다.

사용법을 알아봤으므로 이제 응용해 보자. 앞에서 살펴본 택시 예제를 다음처럼 바꾸려면 어떻게 해야 할까?

만약 3000원 이상의 돈을 가지고 있으면 택시를 타고 가고, 그렇지 않으면 걸어가라.

  • 이 상황은 다음처럼 프로그래밍할 수 있다.
money = 2000
if money >= 3000:
...     print("택시를 타고 가라")
... else:
...     print("걸어가라")
...
걸어가라

money >= 3000 조건문이 거짓이 되기 때문에 else 문 다음 문장을 수행하게 된다.

ㅇ and,or,not

조건을 판단하기 위해 사용하는 다른 연산자로는 and,or,not이 있다.

  • 각각의 연산자는 다음처럼 동작한다.
연산자설명
x or yx와 y 둘 중 하나만 참이어도 참이다.
x and yx와 y 모두 참이어야 참이다.
not xx가 거짓이면 참이다.
  • 다음 예를 통해 or 연산자의 사용법을 알아보자!

    돈이 3000원 이상 있거나 카드가 있다면 택시를 타고 가고, 그렇지 않으면 걸어가라.

>> money = 2000
>> card = True
>> if money >= 3000 or card:
...     print("택시를 타고 가라")
... else:
...     print("걸어가라")
...
택시를 타고 가라
>>
  • money는 2000이지만, card가 True이기 때문에 money >= 3000 or card 조건문이 참이 된다.
  • 따라서 if 문에 속한 ‘택시를 타고 가라’ 문장이 출력된다.

ㅇ in,not in

파이썬은 다른 프로그래밍 언어에서 쉽게 볼 수 없는 재미있는 조건문도 제공한다.

  • 바로 다음과 같은 것들이다.
innot in
x in 리스트x not in 리스트
x in 튜플x not in 튜플
x in 문자열x not in 문자열
  • 영어 단어 in의 뜻이 '~안에'라는 것을 생각해 보면 다음 예가 쉽게 이해될 것이다.
>> 1 in [1, 2, 3]
True
>> 1 not in [1, 2, 3]
False
  • 앞에서 첫 번째 예는 ‘[1, 2, 3]이라는 리스트 안에 1이 있는가?’라는 조건문이다.
  • 1은 [1, 2, 3] 안에 있으므로 참이 되어 True를 리턴한다.

  • 두 번째 예는 ‘[1, 2, 3] 리스트 안에 1이 없는가?’라는 조건문이다.
  • 1은 [1, 2, 3] 안에 있으므로 거짓이 되어 False를 리턴한다.

  • 다음은 튜플과 문자열에 in과 not in을 적용한 예이다.
  • 각각의 결과가 나온 이유는 쉽게 유추할 수 있다.
>> 'a' in ('a', 'b', 'c')
True
>> 'j' not in 'python'
True
  • 이번에는 우리가 계속 사용해 온 택시 예제에 in을 적용해 보자.

    만약 주머니에 돈이 있으면 택시를 타고 가고, 없으면 걸어가라.

>> pocket = ['paper', 'cellphone', 'money']
>> if 'money' in pocket:
...     print("택시를 타고 가라")
... else:
...     print("걸어가라")
...
택시를 타고 가라
>>
  • ['paper', 'cellphone', 'money'] 리스트 안에 'money'가 있으므로 'money' in pocket은 참이 된다.
  • 따라서 if 문에 속한 문장이 수행된다.

ㅇ 조건문에서 아무 일도 하지 않게 설정하고 싶다면?

가끔 조건문의 참, 거지에 따라 실행할 행동을 정의할 때나 아무런 일도 하지 않도록 설정하고 싶을 때가 있다.

  • 다음 예를 살펴 보자.

    주머니에 돈이 있으면 가만히 있고, 주머니에 돈이 없으면 카드를 꺼내라.

  • 이럴 때 사용하는 것이 바로 pass이다.
  • 위 예를 pass를 적용해서 구현해 보자.
>> pocket = ['paper', 'money', 'cellphone']
>> if 'money' in pocket:
...     pass 
... else:
...     print("카드를 꺼내라")
...
  • pocket 리스트 안에 money 문자열이 있기 때문에 if 문 다음 문장인 pass가 수행되고 아무런 결괏값도 보여 주지 않는다.

ㅇ 다양한 조건을 판단하는 elif

if와 else만으로는 다양한 조건을 판단하기 어렵다.

  • 다음 예를 보더라도 if와 else만으로는 조건을 판단하는 데 어려움을 겪게 된다는 것을 알 수 있다.

    주머니에 돈이 있으면 택시를 타고 가고, 주머니에 돈은 없지만 카드가 있으면 택시를 타고, 돈도 없고 카드도 없으면 걸어가라.

  • 위 문장을 보면 조건을 판단하느 부분이 두 군데 있다.
  • 먼저 주머니에 돈이 있는지를 판단해야 하고 주머니에 돈이 없으면 다시 카드가 있는지 판단해야 한다.

  • if와 else만으로 위 문장을 표현하려면 다음과 같이 할 수 있다.
>> pocket = ['paper', 'cellphone']
>> card = True
>> if 'money' in pocket:
...     print("택시를 타고가라")
... else:
...     if card:
...         print("택시를 타고가라")
...     else:
...         print("걸어가라")
...
택시를 타고가라
>>
  • 언뜻 보기에도 이해하기 어렵고 산만한 느낌이 든다.
  • 이런 복잡함을 해결하기 위해 파이썬에서는 다중 조건 판단을 가능하게 하는 elif를 사용한다.

  • 위 예에 elif를 사용하면 다음과 같이 바꿀 수 있다.
>> pocket = ['paper', 'cellphone']
>> card = True
>> if 'money' in pocket:
...      print("택시를 타고가라")
... elif card: 
...      print("택시를 타고가라")
... else:
...      print("걸어가라")
...
택시를 타고가라
  • 즉, elif는 이전 조건문이 거짓일 때 수행된다.
  • if, elif, else를 모두 사용할 때 기본 구조는 다음과 같다.
if 조건문:
    수행할_문장1 
    수행할_문장2
    ...
elif 조건문:
    수행할_문장1
    수행할_문장2
    ...
elif 조건문:
    수행할_문장1
    수행할_문장2
    ...
...
else:
   수행할_문장1
   수행할_문장2
   ... 
  • 위에서 볼 수 있듯이 elif는 개수에 제한 없이 사용할 수 있다.

ㅇ if 문을 한 줄로 작성하기

앞의 pass를 사용한 예를 들어 보면 if 문 다음에 수행할 문장이 한 줄이고 else 문 다음에 수행할 문장도 한 줄밖에 되지 않는다.

>> if 'money' in pocket:
...     pass 
... else:
...     print("카드를 꺼내라")
...
  • 이렇게 수행할 문장이 한 줄일 때 좀 더 간략하게 코드를 작성하는 방법이 있다.
>> pocket = ['paper', 'money', 'cellphone']
>> if 'money' in pocket: pass
... else: print("카드를 꺼내라")
...
  • if 문 다음에 수행할 문장을 콜론(:) 뒤에 바로 적었다.
  • else 문 역시 마찬가지이다.

ㅇ 조건부 표현식

다음 코드를 살펴보자.
score가 60 이상일 경우 message에 문자열 "success", 아닐 경우에는 문자열 "failure"를 대입하는 코드이다.

if score >= 60:
    message = "success"
else:
    message = "failure"
  • 파이썬의 조건부 표현식(conditional expression)을 사용하면 위 코드를 다음과 같이 간단히 표현할 수 있다.
message = "success" if score >= 60 else "failure"
  • 조건부 표현식은 다음과 같이 정의한다.

    변수 = 조건문이_참인_경우의_값 if 조건문 else 조건문이_거짓인_경우의_값

  • 조건부 표현식은 가독성에 유리하고 한 줄로 작성할 수 있어 활용성이 좋다.



출처 및 참고문헌

https://wikidocs.net/20

profile
안녕하세요

0개의 댓글