[김이김이나] python 스터디 2주차
- 작성자: 김민혁
- 작성일: 3/14
- 진도: [2-6]~[2-7] 집합 자료형, 불 자료형
📌집합 자료형
<집합 자료형은 어떻게 만들까?>
집합자료형은 다음과 같이 set 키워드를 사용해 만들 수 있다.
>>> s1 = set([1, 2, 3]) >>> s1 {1, 2, 3} |
<집합 자료형의 특징>
set에는 2가지 특징이 있다.
1. 중복을 허용하지 않는다.
2. 순서가 없다.
리스트나 튜플은 순서가 있기 때문에 인덱싱을 통해 요솟값을 얻을 수 있지만,
set 자료형은 순서가 없기 때문에 인덱싱을 통해 요솟값을 얻을 수 없다.
따라서 set자료형에 저장된 값을 인덱싱으로 접근하려면 다음과 같이 리스트나 튜플로 변환한 후 해야한다.
>>> s1 = set([1, 2, 3]) >>> l1 = list(s1) >>> l1 [1, 2, 3] >>> l1[0] 1 >>> t1 = tuple(s1) >>> t1 (1, 2, 3) >>> t1(0) 1 |
<교집합>
다음과 같이 2개의 set자료형 만들어 보자.
>>> s1 = set([1, 2, 3, 4, 5, 6]) >>> s2 = set([4, 5, 6, 7, 8, 9]) |
&을 이용하면 교집합을 간단히 구할 수 있다.
>>> s1 & s2 {4, 5, 6} |
<합집합>
| 를 사용하면 합집합을 구할 수 있다.
>>> s1 | s2 {1, 2, 3, ,4 ,5 ,6 ,7, 8, 9} |
<차집합>
-를 이용하면 차집합을 구할 수 있다.
>>> s1-s2 {1, 2, 3} >>> s2-s1 {8, 9, 10} |
<집합 자료형 관련 함수>
값 1개 추가하기 - add
값 여러 개 추가하기 - update
특정 값 제거하기 - remove
>>> s1 = set([1, 2, 3]) 1. >>> s1.add(4) 2.>>>s1.update([4, 5, 6]) 3.>>>s1.remove(2) |
📌불 자료형
불 자료형이란 참과 거짓을 나타내는 자료형이다.
True : 참을 의미한다.
False : 거짓을 의미한다.
<자료형의 참과 거짓>
자료형에도 참과 거짓이 있다.
문자열, 리스트, 튜플, 딕셔너리 등의 값이 비어 있으면("", [], (), {}) 거짓이 되고 비어 있지 않으면 참이 된다.
숫자에서는 그 값이 0일 때 거짓이 된다.
"python" | 참 |
"" | 거짓 |
[1, 2, 3] | 참 |
[] | 거짓 |
(1, 2, 3) | 참 |
() | 거짓 |
{'a': 1} | 참 |
{} | 거짓 |
1 | 참 |
0 | 거짓 |
<불 연산>
자료형에 참과 거짓이 있다.
bool 함수를 사용하면 자료형의 참과 거짓을 식별할 수 있다.
ex)
>>> bool('python') True |
>>> bool([]) False |
📌느낀점
확실히 2주차가 되니 조금은 어려워진거 같다.
1주차에 했던 것들을 복습해야 계속 쌓아 나갈 수 있겠다는 생각이 들었다. 전공 수업시간에 조금은 이해하기 쉬웠어서 코드에서의 스터디가 정말 도움이 되었다.
- 작성자: 김민정
- 작성일: 3/15
- 진도: [2-8]
📌변수
변수란 무엇인가?
변수는 자료형의 값을 저장하는 공간으로, 객체를 가리기는 것이라고도 말할 수 있다.
<변수를 만드는 방법>
우리는 이미 변수를 계속해서 사용해왔다.
>>> a = 1 >>> b = 2 >>> print(a + b) 3 |
위 예시에서 a와 b에 해당하는 것이 바로 변수이다.
변수를 만들 때는 assignment 기호인 =를 사용한다.
=의 좌변이 변수 이름, 우변이 변수에 저장할 값에 해당한다.
다른 프로그래밍 언어와 달리 자료형의 타입을 지정하지 않아도 파이썬은
스스로 변수에 저장된 값을 판단하여 자료형의 타입을 지정한다는 특징이 있다.
<변수가 가리키는 메모리의 주소 확인하기>
변수 a는 객체가 저장된 메모리의 주소를 가리키게 된다.
이때 메모리란 컴퓨터가 프로그램에서 사용하는 데이터를 기억하는 공간을 말한다.
변수가 가리키는 메모리의 주소는 파이썬의 내장 함수인 id를 통해 확인할 수 있다.
위처럼 a=[1, 2, 3] 이라고 하면 변수 a는 [1, 2, 3] 리스트가 저장된 메모리의 주소를 가리키게 된다. 예시의 경우 변수 a가 가리키는 리스트의 주소 값은 134275946717696 인 것이다. |
<리스트 복사란?>
>>> a = [1, 2, 3] >>> b = a |
위의 예시는 b 변수에 a 변수를 대입한 것이다.
이 경우 a와 b는 완전히 동일하며, id 함수를 이용하여 메모리 주소를 확인해도 동일한 값이 리턴된다.
[1, 2, 3]이라는 리스트 객체를 참조하는 변수가 2개가 된 것뿐이다.
리스트 복사는 위처럼 b 변수를 생성할 때 a 변수의 값을 가져오면서 a와는 다른 주소를 가리키도록,
a 리스트 값을 바꾸더라도 b 리스트에는 아무 영향이 없도록 하고 싶을 때 사용하는 것으로,
아래와 같은 두 가지 방법을 이용한다.
<리스트 복사 방법 (1) [:] 이용하기>
리스트 전체를 가리키는 [:] 기호를 사용하여 복사하는 방법이 첫 번째이다.
위 예시처럼 a리스트의 두 번째 요소를 4로 바꾸어도 b 변수에 a 변수를 대입할 때 [:] 기호를 사용하면 b리스트는 처음과 그대로 리스트가 [1, 2, 3]으로 유지된다. |
<리스트 복사 방법 (2) copy 함수 이용하기>
다음은 copy모듈인 from copy import copy 라는 문장을 통해 copy함수를 사용하는 방법이다.
위 예에서 b=copy(a) 는 b=a[:] 와 동일하다. 이번에는 a리스트의 요소를 건들지 않았기에 두 변수의 값은 같지만, a와 b는 서로 다른 객체를 가리키고 있다는 것을 확인할 수 있다. (False 리턴) |
이번에는 리스트 자료형의 자체 함수인 copy함수를 사용하는 방법으로
위의 copy모듈을 사용하는 것과 동일한 결과를 얻을 수 있다.
앞에서와 동일하게 리스트의 요소를 건들지 않았으나 False가 리턴된 것으로 통해 a와 b가 가리키는 객체가 서로 다름을 알 수 있다. |
<변수를 만드는 여러 가지 방법>
튜플로 a, b에 값을 대입해보자.
>>> a, b = ('김이김이나', 'code') |
>>> (a, b) = 'pyhton', 'life' |
위 두 예문은 방법이 완전히 동일하다.
리스트로 변수를 만들 수도 있다.
>>> [a, b] = ['김이김이나', 'code'] |
여러 개의 변수에 같은 값을 대입할 수도 있다.
>>> a = b = '김이김이나' |
위 방법들을 사용하면 파이썬에서 두 변수의 값을 매우 간단하게 바꿀 수 있다.
📌느낀 점
매주 배운 것들이 쌓일수록 복습을 철저히 해서 자유롭게 사용할 수 있게 연습해야겠다고 생각했다.
- 작성자 : 김한세
- 작성일 : 3/18
- 진도: [3-1] if문
📌if문
if문 왜 필요할까?
다음을 읽어보자
“시간이 있으면 버스를 타고,시간이 없으면 택시를 타라“
이는 파이썬을 이용하면 쉽게 표현할 수 있다.
time = True
if time:
print("버스를 타고 가라“)
else:
print("택시를 타고 가라”)
버스를 타고가라
# time에 True를 대입했으므로 time은 참이다
그럼 이제부터 if문에 대해 본격적으로알아보자.
<if문의 기본 구조>
if 조건문:
수행할_문장 1
수행할_문장 2
else:
수행할_문장 a
수행할_문장 b
위의 형식은 if문의 기본구조이다.
참이면 if문 바로 다음 문장이 수행되고 조건문이 거짓이면 else문 다음 문장이 수행된다
#else문은 if문 없이 사용될 수 없다
그렇다면 잘못된 if문은 어떤 것이 있을까
if 조건문:
수행할_문장 1
수행할_문장 2
수행할_문장 3
들여쓰기는 매우 중요하다
공백문자 4개 사용은 필수이다.
# 탭(Tap)문자를 사용해도 좋다
if 조건문
수행할_문장 1
수행할_문장 2
수행할_문장 3
위의 예시에서 잘못된 부분은 어디일까?
조건문 다음에 콜론(:)을 사욘하는 것을 잊으면 안된다.
📌비교연산자
비교연산자에는 <, >, ==, !=, >=, <= 이 있다.
x<y x가y보다작다.
x>y x가y보다크다.
x==y x와y가같다.
x!=y x와y가같지않다.
x>=y x가y보다크거나같다.
x<=y x가y보다작거나같다.
비교연산자 사용방법에 대해 알아보자.
x = 4
y = 5
x < y
True
x에 4, y에 5를 대입한 후 x < y 라는 조건문을 수행하면
True를 리턴한다.
조건문이 참이기 때문이다.
응용해보자.
“1시간 이상의 시간이 있다면 버스를 타고, 그렇지 않으면 택시를 타라“
위의 상황을 비교연산자를 사용해 설명할 수 있다.
time = 1
if time >= 1:
print("버스를 타고 가라“)
else:
print("택시를 타고 가라”)
버스를 타고 가라
조건문이 참이기 때문에 if문 다음 문장응 수행하게 된다.
📌느낀점
본격적인 ‘조건문’을 학습하면서 코드 짜는 재미가 생긴 것 같습니다. 토대를 다진다는 생각으로 열심히 임해서 기억에 남을 거 같습니다ㅏ!!
- 작성자: 김서현
- 작성일: 3/17
- 진도: [3-1] if 문
📌and, or, not
조건을 판단하기 위해 사용하는 연산자이다.
x or y
x와 y 둘 중 하나만 참이어도 참이다.
x and y
x와 y 모두 참이어야 참이다.
not x
x가 거짓이면 참이다.
예를 들어,
키가 120cm 이상이거나 보호자 동반이면 놀이기구를 탑승할 수 있고, 그렇지 않으면 탑승할 수 없다.
키가 120 이하이지만, parent가 True이기에 height >= 120 or parent 조건문이 참이 된다.
이때의 경우 and 의 조건문이었다면 키와 보호자 동반 두 조건을 충족시킬 수 없기에 참이 될 수 없다.
📌in, not in
리스트와 튜플, 문자열에 적용할 수 있으며 ~안에 라는 것을 뜻한다.
1은 1, 2, 3의 리스트 안에 속해있기 때문에 True를 출력하게 된다.
만약, 1, 2, 3의 리스트에 없는 숫자를 입력하게 된다면 False를 리턴하게 될 것이다.
리스트에서 뿐만 아니라 튜플과 문자열에서 모두 동일하게 적용된다.
과일바구니의 리스트 안에 바나나, 사과, 참외가 있으므로 바나나 in 과일바구니는 참이 된다.
따라서 if문에 속한 문장이 수행된다.
📌elif
If와 else 만으로 조건을 판단하는 것은 복잡할 수 있으므로 elif를 사용하여 if 외의 다른 if문을 무한대로 만들 수 있다.
if 조건문:
수행할_문장 1
수행할_문장 2
...
elif 조건문:
수행할_문장 1
수행할_문장 2
...
elif 조건문:
수행할_문장 1
수행할_문장 2
...
else:
수행할_문장 1
수행할_문장 2
...
위에서 볼 수 있듯이 elif는 개수 제한 없이 무한대로 사용할 수 있다.
위 예시에서 볼 수 있듯이, elif문을 사용하여 오렌지라는 조건을 하나 더 붙일 수 있다.
if문 한줄로 작성하기
: 콜론 뒤에 print ("문장")을 바로 적어 if 문을 한줄로 간결하게 적을 수 있다.
📌조건부 표현식
변수 = 조건문이 참인 경우의 값 if 조건문 else 조건문이 거짓인 경우의 값
조건부 표현식을 사용하면 코드를 간단히 표현할 수 있다.
if score >= 80:
message = "pass"
else:
message = "retest"
위 코드를 조건부 표현식을 사용하여 간단히 표현한다면
message = "pass" if score >= 80 else "retest"
라고 짧게 표현할 수 있다.
📌느낀점
이번 스터디에서 코드들이 정말 다양하게 짜여지고 많은 조건들이 붙을 수 있다는 것을 직접 느꼈다.
앞으로 연습과 적용을 통해 더 많은 코드들을 짜보고 싶다는 생각을 하게 되었다.
- 작성자: 이나은
- 작성일: 3/17
- 진도: [3-2] while 문
📌while 문이란?
<while 문의 기본>
while 문은 문장을 반복해서 수행할 경우 사용되며 그래서 '반복문'이라고도 불린다.
while 문의 기본 구조는 다음과 같다.
while 조건문:
수행할_문장1
수행할_문장2
수행할_문장3
...
여기서 while 문의 조건문이 참인 동안 while 문에 속한 문장들이 반복해서 수행된다.
예시를 하나 들어보자.
위 코드에서는 처음에 python_study에 0이라는 값을 입력하고,
while 문을 사용하여 스터디 횟수가 6이 될때 까지 1을 더하는 작업을 반복하였다.
6이 되니 if 문에 지정해놓은 것처럼 문자열이 출력되는 것을 확인할 수 있다.
<while 문의 활용, break와 continue>
다음과 같이 여러가지 중에 하나를 선택하는 코드를 작성할 수 도 있다.
위처럼 contents 변수에 출력할 문자열을 지정하고, while 문을 작성해보았다.
실행해보면 1,2,3 중 하나를 입력하면 다시 contents 를 출력하지만 4를 입력하면 조건문에 맞지 않아 while문이 종료된 것을 볼 수 있다.
그리고 조건을 만족시키지 않을 때 이외에도 while 문을 강제로 빠져나올 수 있는 방법도 있다.
바로 break를 사용하는 것이다.
위의 while 문은 사과로 사과주스를 만드는 과정을 표현 한 것이다.
while mixer: 이기 때문에 원래 믹서가 있는 동안 계속 반복되어야하지만,
사과가 0개가 되면 break를 사용해 while 문을 빠져나오도록 한 것이다.
하지만 여기서 빠져나오지 않고 처음 조건문으로 다시 돌아가고 싶을 때도 있을 것이다.
이때는 continue를 사용하면 된다.
이처럼 continue를 사용하면 while 문의 조건으로 되돌아간다.
위는 아까 짜둔 사과주스 코드에서 사과가 부족할 경우 break를 이용하여 while문을 빠져나오거나,
continue를 이용해 사과를 10개 보충하고 사과주스를 더 만드는 선택지를 주었다.
<무한 루프>
무한 루프란 말그대로 코드를 무한히 반복하는 것이다. 이는 while 문을 활용하여 작성할 수 있다.
while True: 형태를 사용하면 무한 루프가 나온다.
이는 값을 입력 받아 2로 나눈 몫을 출력하는 것인데, while 문을 활용한 무한 반복으로 계속 값을 구할 수 있다.
무한 루프를 빠져나오고 싶을 때는 Ctrl + C를 사용하면 된다.
📌 느낀점
이번 스터디와 더불어 퀴즈를 풀면서 코드들이 정말 다양하게 사용될 수 있다는 것을 느꼈다.
특히 같은 문제를 풀 때도 작성하는 사람에 따라 다양한 코드가가 나오는 것이 신기했다.
앞으로 공부할 내용도 활용하여 다양한 코드를 짜보고 싶다.
- 작성자: 정현석
- 작성일: 3/18
- 진도: [3-3] for 문
📌 for 문에 대해 알아보자!
<for 문의 기본 구조>
for 문의 기본 구조는 다음과 같다.
for 변수 in 리스트 : 수행할 문장_문장1 수행할 문장_문장2 ... |
파이썬의 중요한 특징은 '간결성'이라고 하였다.
for 문은 파이썬의 이러한 간결성이 가장 잘 드러나는 단적인 예시로 볼 수 있다.
다음에 등장하는 예제를 살펴보도록 하자.
>>> test_list = ['one', 'two', 'three'] >>> for i in test_list: ... print(i) ... one two three |
위 예시에 등장한 리스트의 첫번째 요소인 'one'이 먼저 i 변수에 대입되고 'i'를 프린트한다.
다음으로 두 번째 요소인 'two'가 i 변수에 대입된 후 'i'를 프린트하는 문장을 수행하고, 이를 반복한다.
이제 for 문을 이용한 다음 응용예제를 살펴보자.
총 4명의 학생이 경희대학교 빅데이터응용학과 정시모집에 지원하였다. 모든 과목의 평균 점수가 90점 이상이면 합격, 그렇지 않으면 불합격이다. |
먼저 학생 4명의 수능 평균 점수를 리스트로 나타내면 다음과 같다.
marks = [ 100 , 96, 88, 80 ] |
경희대학교 빅데이터응용학과에 지원한 학생들의 합격여부를 파이썬을 통해 표현해보자.
1번 지원자의 평균 점수는 100점, 5번 지원자의 평균 점수는 80점이다.
이 정보를 이용하여 지원자들의 합불 여부를 알려주는 프로그램을 IDLE 에디터를 통해 표현해보자.
mark = [ 100, 96, 88, 80 ] number = 0 for mark in marks: number = number + 1 if mark >= 90: print("%d번 지원자는 합격입니다." % number) else: print("%d번 지원자는 뜨거운 합격입니다." % number) |
프로그램을 실행하면 다음과 같은 결과가 나올 것이다.
1번 학생은 합격입니다. 2번 학생은 합격입니다. 3번 학생은 뜨거운 합격입니다. 4번 학생은 뜨거운 합격입니다. |
📌 for 문과 continue 문
앞서 살펴본 continue 문을 for 문에서 응용하여 사용해보자.
for 문의 문장을 수행하는 도중 continue 문이 있다면 다시 처음으로 돌아가게 된다.
앞선 응용예제를 통해 for 문과 continue 문에 대해 알아보자.
이번에는 경희대학교 빅데이터응용학과에 합격한 지원자들에게는 축하 메시지를,
불합격한 지원자들에게는 아무 메시지도 전하지 않는 프로그램을 만들어보자.
mark = [ 100, 96, 88, 80 ] number = 0 for mark in marks: number = number + 1 if mark < 90: continue print("%d번 지원자의 경희대학교 빅데이터응용학과 합격을 축하합니다." % number) |
이 프로그램을 실행하면 다음과 같은 결과를 얻을 수 있다.
1번 지원자의 경희대학교 빅데이터응용학과 합격을 축하합니다. 2번 지원자의 경희대학교 빅데이터응용학과 합격을 축하합니다. |
📌 for 문과 range 함수
range함수는 주어진 범위의 연속된 정수들을 생성하는 데 사용된다고 학습하였다.
range 함수의 간단한 예시는 다음과 같다.
>>> for i in range(12) : ... print(i) ... 0 1 2 3 4 5 6 7 8 9 10 11 |
위에서 알 수 있듯, range(12)는 0부터 12 미만의 연속된 정수들을 생성한다는 뜻이다.
<range 함수의 예시>
for 문과 range 함수를 활용하여 ∑를 의미하는 프로그램을 나타내보자.
다음 예제는 10부터 20까지 더하는 것을 나타낸 코드이다.
>>> add = 0 >>> for i in range (10, 21): ... add = add + 1 ... >>> print(add) 165 |
이를 응용하여 range(1,11)가 의미하는 숫자 1부터 10까지의 숫자를 각각 제곱하는 코드를 제작할 수 있다.
다음과 같은 예제를 살펴보자.
>>> for i in range(1,11): ... square = i**2 ... print(f"{i}의 제곱은 {square}입니다.") |
이 예제를 실행하면 다음과 같은 결괏값을 얻을 수 있다.
1의 제곱은 1입니다. 2의 제곱은 4입니다. 3의 제곱은 9입니다. 4의 제곱은 16입니다. 5의 제곱은 25입니다. 6의 제곱은 36입니다. 7의 제곱은 49입니다. 8의 제곱은 64입니다. 9의 제곱은 81입니다. 10의 제곱은 100입니다. |
위 예제에 작성된 코드는 위의 코드는 1부터 10까지의 숫자 범위를 생성하고, 각 숫자를 i 변수에 할당하여 반복한다.
각 숫자의 제곱은 i ** 2로 계산되어 square 변수에 저장되고 출력되는 것을 알 수 있다.
그렇다면 마지막으로 for 문과 range 문을 이용하여 구구단을 만들어보자.
>>> for i in range(6,10): ... for j in range(1,10): ... print(i*j, end=" ") ... print('') ... 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81 |
위 예제는 for문을 두 번 사용하였는데 첫 번째 for문에서 2부터 9까지의 숫자가 차례로 i에 대입되고,
i가 처음 2일때 2번 for문을 사용하게 된다. 2번 for문에서 1부터 9까지의 숫자가 차례로 대입된다.
최종적으로 i와 j를 곱하는 문장을 수행하고 이 프로세스를 반복하며 코드는 그 값을 출력한다.
이처럼 우리는 for 문과 range 함수를 이용하여
range 함수가 의미하는 정수의 범위 내의 숫자들로 제곱을 할 수도,
합격자와 불합격자를 가려낼 수도, 구구단을 만들어 볼 수도 있다.
📌 느낀점
확실히 1주차가 지나고 3주차에 들어와서 for문 while문 range 함수 등 파이썬에서 중추적인 내용을 학습하다보니
스스로도 이제 내가 파이썬에 대해 뭔가 제대로 알아가고 있구나라는 효능감이 들었고
앞으로도 학습 진도대로 열심히 파이썬 스터디에 참여하여 지식을 쌓아야겠다는 생각이 들었다!
특히 for 문에 대해 티스토리를 작성하면서 확실히 공부만 하는 것보다 공부한 내용을 정리하여 작성하고
나만의 예시를 만들어서 적용해보다보니 이 부분에 대한 인사이트가 확장된 것 같다!
📌 2주차 퀴즈 답안
# 1번
x = int(input('x : '))
y = int(input('y : '))
if 1000 >= x > 0 and 1000 >= y > 0:
print('1')
if -1000 <= x < 0 and 1000 >= y > 0:
print('2')
if -1000 <= x < 0 and -1000 <= y < 0:
print('3')
if 1000 >= x > 0 and -1000 <= y < 0:
print('4')
if (x or y) > 1000 or (x or y)< -1000:
print('범위 내의 값을 입력해주세요.')
if x == 0 or y == 0:
print('0이 아닌 좌푯값을 입력해주세요.')
# 2번
score = int(input('점수 : '))
if 90 <= score <= 100:
print('A')
elif 80 <= score:
print('B')
elif 70 <= score:
print('C')
elif 60 <= score:
print('D')
elif 0 <= score < 60:
print('F')
else:
print('올바른 점수를 입력해주세요.')
# 3번
n = int(input('n : '))
s = 0
if 1<= n <= 10000:
for i in range(1, n+1):
s += i
print(s)
else:
print('범위 내의 값을 입력해주세요.')
# 4번
N = int(input("N : "))
if (1 <= N <= 100):
for i in range(1,N+1):
print("*" * i)
else:
print('범위 내의 값을 입력해주세요.')
# 5번
T = int(input())
for _ in range(T):
string = input()
first = string[0]
last = string[-1]
print(first, last)
# 6번
N = int(input('N : '))
if 1 <= N <= 9:
for s in range(1, 10):
print("%d * %d = %d" % (N, s, N * s))
else:
print('범위 내의 값을 입력해주세요.')
# 7번
A = int(input('A : '))
B = int(input('B : '))
if A < 1 or B > 10000:
print('범위 내의 값을 입력해주세요.')
else:
print(A + B)
print(A - B)
print(A * B)
print(A // B)
print(A % B)