파이썬 스터디4
seonae's wiki
| 2019 파이썬 스터디 | |
|---|---|
| 일정 | 2019/2/7 4-6시 |
| 장소 | 강의동 110호 |
| 참여인원 | 광우,선애,승진,나라,인혁 |
| 내용 | 파이썬기초 : 자료형(집합), 내장리스트, 제어문 |
목차
자료형:집합
- 집합(set) : 순서없이, 중복없이, 여러값을 모아놓은 자료형.
>>> a = set() #빈 집합객체 생성. 공집합
>>> b = {1,2,3} #집합
>>> set([1,2,3]) #리스트 변환
>>> set("Hello") #문자열 변환
>>> set((1,2,3)) #튜플 변환
>>> set((1,2,3,1,2,3,1,2,3))
>>> l1 = list(s1) #리스트로 변환
>>> t1 = tuple(s1) #튜플로 변환
집합의 연산:교집합, 합집합, 차집합
#2개의 집합
>>> s1 = set([1, 2, 3, 4, 5, 6])
>>> s2 = set([4, 5, 6, 7, 8, 9])
#교집합(intersection)
>>> s1 & s2
>>> s1.intersection(s2)
#합집합(union)
>>> s1 | s2
>>> s1.union(s2)
#차집합(difference)
>>> s1 - s2
>>> s2 - s1
>>> s1.difference(s2)
>>> s2.difference(s1)
#그외
>>> A={1,2,3,4,5}
>>> B={1,2,3}
>>> 2 in A #2∈A
>>> 2 not A #2∉A
>>> A.issuperset(B) #A⊃B
>>> B.issubset(A) #B⊂A
>>> A.isdisjoint(B) #교집합이 공집합인가?
집합 관련 메소드
>>> a = {1,2,3}
>>> len(a)
#값 추가하기
>>> s1 = set([1, 2, 3])
>>> s1.add(4) #1개만 추가
>>> s1
>>> s1.update([5, 6, 7]) #여러개추가
>>> s1
#제거하기
>>> a = {1,2,3,4,5,6,7,8,9}
>>> a.clear() #전체 원소를 제거
>>> a = {1,2,3,4,5,6,7,8,9}
>>> a.discard(4)
>>> a.discard(4) #원소가 없으면 pass
>>> a.remove(5)
>>> a.remove(5) #원소가 없으면 error
>>> a.pop()
연습문제
- set을 이용하여 중복제거해보기
>>> a = [1, 1, 1, 2, 2, 3, 3, 3, 4, 4, 5]
- 집합연산하기
>>> U = {1,2,3,4,5,6,7,8,9,10} #전체집합
>>> A = {1,3,5,7,9} #부분집합1
>>> B = {1,2,3,4,5} #부분집합2
- 문제 1 : A∩BC
- 문제 2 : (A∪B)C
자료형의 참과 거짓
| 참(True) | "python", [1, 2, 3], 1 |
| 거짓(False) | ", [], (), {}, 0 |
| None | |
제어문
if문
- 기본구조
if 조건문:
수행할 문장1
수행할 문장2
...
else:
수행할 문장A
수행할 문장B
...
- 조건문이란 무엇인가?(What is conditional statement?)
- 참과 거짓을 판단하는 문장(The sentence to judge True or False)
- 비교연산자(>,<. <=, >=, !=, ==), 논리연산자(and, or, not), x in s/x not in s
- 상황 1 : "돈이 있으면 택시를 타고, 돈이 없으면 걸어 간다."
>>> money = True
>>> if money:
print("택시를 타고 가라")
else:
print("걸어 가라")
- 상황 2 : "돈이 3000원 이상 있거나 카드가 있다면 택시를 타고 그렇지 않으면 걸어 가라"
>>> money = 2000
>>> if money >= 3000:
... print("택시를 타고 가라")
... else:
... print("걸어가라")
- 상황 3 : "주머니에 돈이 있으면 택시를 타고, 주머니에 돈은 없지만 카드가 있으면 택시를 타고, 돈도 없고 카드도 없으면 걸어 가라"
>>> pocket = ['paper', 'cellphone']
>>> card = True
>>> if 'money' in pocket:
... print("택시를 타고가라")
... elif card:
... print("택시를 타고가라")
... else:
... print("걸어가라")
>>>if score >= 60:
message = "success"
else:
message = "failure"
>>> message = "success" if score >= 60 else "failure"
연습문제
- 아래코드의 결과값은?
>>> a = "Life is too short, you need python"
>>> if 'wife' in a:
... print('wife')
... elif 'python' in a and 'you' not in a:
... print('python')
... elif 'shirt' not in a:
... print('shirt')
... elif 'need' in a:
... print('need')
... else:
... print('none')
while문
- 기본구조
while <조건문>:
<수행할 문장1>
<수행할 문장2>
<수행할 문장3>
...
>>> treeHit = 0
>>> while treeHit < 10:
... treeHit = treeHit +1
... print("나무를 %d번 찍었습니다." % treeHit)
... if treeHit == 10:
... print("나무 넘어갑니다.")
- break
>>> coffee = 10
>>> money = 300
>>> while money:
... print("돈을 받았으니 커피를 줍니다.")
... coffee = coffee -1
... print("남은 커피의 양은 %d개입니다." % coffee)
... if coffee == 0:
... print("커피가 다 떨어졌습니다. 판매를 중지합니다.")
... break
- continue
>>> a = 0 >>> while a < 10: ... a = a + 1 ... if a % 2 == 0: continue ... print(a)
- 무한루프
>>> while True:
... print("Ctrl+C를 눌러야 while문을 빠져나갈 수 있습니다.")
연습문제
- 1부터 1000까지의 자연수 중 3의 배수의 합을 구하시오.
- 다음은 A학급 학생의 점수를 나타내는 리스트이다. 다음 리스트에서 50점 이상의 점수들의 총합을 구하시오. : A = [20, 55, 67, 82, 45, 33, 90, 87, 100, 25]
- while문을 이용하여 아래와 같이 별(*)을 표시하는 프로그램을 작성해 보자.
* ** *** ****
for문
- 기본구조
for 변수 in 리스트(또는 튜플, 문자열):
수행할 문장1
수행할 문장2
...
- 가장 기본적인 for문
>>> test_list = ['one', 'two', 'three'] >>> for i in test_list: ... print(i)
- 응용 1
marks = [90, 25, 67, 45, 80]
number = 0
for mark in marks:
number = number +1
if mark >= 60:
print("%d번 학생은 합격입니다." % number)
else:
print("%d번 학생은 불합격입니다." % number)
- 응용 2 : continue
marks = [90, 25, 67, 45, 80]
number = 0
for mark in marks:
number = number +1
if mark < 60:
continue
print("%d번 학생 축하합니다. 합격입니다. " % number)
- range() 함수
>>> a = range(10) >>> a = range(1, 11) >>> sum = 0 >>> for i in range(1, 11): ... sum = sum + i ... >>> print(sum)
- 응용 3 : range()함수
marks = [90, 25, 67, 45, 80]
for number in range(len(marks)):
if marks[number] < 60:
continue
print("%d번 학생 축하합니다. 합격입니다." % (number+1))
- for문 중첩
>>> for i in range(2,10): # ①번 for문
... for j in range(1, 10): # ②번 for문
... print(i*j, end=" ")
... print('')
- 리스트 내장/내포(List comprehension) : [표현식 for 항목 in 반복가능객체 if 조건문]
>>> a = [1,2,3,4] >>> result = [] >>> for num in a: ... result.append(num*3) ... >>> print(result) >>> a = [1,2,3,4] >>> result = [num * 3 for num in a] >>> print(result) >>> result = [x*y for x in range(2,10) ... for y in range(1,10)] >>> print(result)
연습문제
- 1부터 100까지의 숫자를 for문을 이용하여 출력하시오.
- for문을 이용하여 A 학급의 평균 점수를 구해 보자. : A = [70, 60, 55, 75, 95, 90, 80, 80, 85, 100]
- 리스트 중에서 홀수에만 2를 곱하여 저장하는 다음과 같은 코드가 있다. 리스트 내장으로 표현하시오.
numbers = [1, 2, 3, 4, 5]
result = []
for n in numbers:
if n % 2 == 1:
result.append(n*2)