for 문의 변수는 리스트, 튜플, 문자열 등의 요소이다. 

 

for 문의 기본 구조

 

>>> list = ['one', 'two', 'three'] 
>>> for i in test_list: 
...     print(i)
... 
one 
two 
three

 

for 문이 실행되는 동안 리스트의 요소 첫번째~마지막까지 순서대로 i라는 변수에 대입되는 것을 확인할 수 있다.

 

 

*for문과 while문의 차이는 뭘까?

두가지 식으로 표현할 수 있는 함수들이 비슷하여, for문으로 작성한 코드를 while문으로 바꾸거나, while문으로 작성한 코드를 for문으로 바꿀 수 있는 경우도 많다. 하지만 그 실행 방법에는 분명한 차이가 있다. 

 

while문은 가지고 있는 조건식을 만족하는 동안 실행문을 계속 반복한다. 그래서 실행문이 항상 참인 경우, (ex. while True) 무한 루프에 빠지게 되므로 break문이 필요한 것.

while문 안의 수행 문장들의 반복은 조건식의 성질에 따라, 계속 다른 값을 입력할 수도 있지만 계속 같은 값을 입력하는 반복일 수도 있다. 

for문은 리스트 등의 첫번째 요소~마지막 요소 대입이 끝날 때까지 수행할 문장들을 반복한다. 안에 if문 등을 넣어서 리스트의 요소값 성질에 따라 다른 결과값이 나오게 만들 수 있는 것이다. 

 

 

 

 

 

 

for 문 안에 if 문 넣기


marks = [90, 25, 67, 45, 80]   # 학생들의 시험 점수 리스트

number = 0   # 학생에게 붙여 줄 번호
for mark in marks:   # 90, 25, 67, 45, 80을 순서대로 mark에 대입
    number = number +1 
    if mark >= 60: 
        print("%d번 학생은 합격입니다." % number)
    else: 
        print("%d번 학생은 불합격입니다." % number)

 

1번 학생은 합격입니다.

2번 학생은 불합격입니다.

3번 학생은 합격입니다.

4번 학생은 불합격입니다.

5번 학생은 합격입니다.

 

 

 

 

 

 

for문과 range

 

>>> add = 0 
>>> for i in range(1, 11): 
...     add = add + i 
... 
>>> print(add)
55

 

range(1,11)은 1이상 11미만의 숫자를 데이터로 가지는 객체이다. 위에서 1~10까지의 숫자를 모두 더한 값을 구하기 위해서 처음에 0이었던 "add"에다가 range 1~10 끝날 때까지 add+i(range 안에 있는 요소들)을 더하는 함수이다. 

 

 

 

 

 

 

(응용) continue와 range를 이용해서 합격자들에게'만' 합격 축하 메세지를 띄우기

 

marks(#시험점수) = [90, 25, 67, 45, 80]
for number in range(len(marks)):         #number는 여기서 리스트 안의 요소들의 자릿값이라는 뜻으로 쓰였다. (number는  marks 라는 리스트의 길이만큼의 범위 안에 있다. 리스트 길이 5니까 number는 0,1,2,3,4가 될 것)


    if marks[number] < 60:        #marks[number]= marks라는 리스트의 number자리에 있는 점수가 60점 미만이면, 
        continue                          #아무것도 하지 말고 for문의 처음으로 돌아가라.


    print("%d번 학생 축하합니다. 합격입니다." % (number+1))

 

1번 학생 축하합니다. 합격입니다.

3번 학생 축하합니다. 합격입니다.

5번 학생 축하합니다. 합격입니다.

 

# if 문에 안 걸려서(점수가 60점 이상이라서) 처음으로 안 돌아간 marks[number]에 대해서 print(~축하합니다~) 하는 것.

 

#여기서 왜 number가 아니라 number+1이냐?

컴퓨터 생각에는 리스트의 첫번째 값이 0번이지만 인간들이 보기에는 저 점수들이 첫번째, 두번째, 이렇게 보이기 때문에,

0번째자리~4번째 자리 점수를 1~5번 점수로 바꿔서 출력하기 위함이다. 

while 문을 이용한 커피 자판기 작동 함수


coffee = 10            #판매 가능한 커피는 10잔 있다.
while True: 

#while 에 조건식 대신 True 를 지정--> 조건문이 항상 참인 무한루프가 만들어진다.

그래서 나중에 커피 다 팔리면 break로 강제로 빠져 나가면 된다.


    money = int(input("돈을 넣어 주세요: "))      #사용자로부터 입력받은 숫자를 money 라는 변수에 넣는다. 


    if money == 300:        #정확히 커피값 300원을 입력했을 경우.
        print("커피를 줍니다.")
        coffee = coffee -1

        print("남은 커피의 양은 %d개 입니다." % coffee)


    elif money > 300:     #커피값 300원보다 많은 돈을 입력했을 경우.
        print("거스름돈 %d를 주고 커피를 줍니다." % (money -300))
        coffee = coffee -1

        print("남은 커피의 양은 %d개 입니다." % coffee)


    else:        #money가 300보다 크거나 같지 않은 경우(돈이 부족)
        print("돈을 다시 돌려주고 커피를 주지 않습니다.")
        print("남은 커피의 양은 %d개 입니다." % coffee)


    if coffee == 0:        #커피가 다 떨어졌을 때
        print("커피가 다 떨어졌습니다. 판매를 중지 합니다.")

 


        break       (while문 빠져나가기)

 

 

 

 

 

while 문의 맨 처음으로 돌아가기

1부터 10까지의 수 중 홀수만 출력하고 싶을 때, a%2==0 즉 a를 2로 나누었을 때 나머지가 0이라면, while 문의 맨 처음으로 돌아간다. 홀수인 경우 if문에 안 걸려서 그대로 프린트가 되는 것.

 

>>> a = 0
>>> while a < 10:
...     a = a + 1
...     if a % 2 == 0: continue
...     print(a)
...
1
3
5
7
9

 

 

 

>>> a=0
>>> while a<10:
    a+=1
    if a%2==0: pass
    else: print(a)

 

pass 문을 통해서도 같은 결과를 얻을 수 있지만 컨티뉴로 더 간단하게 작성할 수 있었다.

변수(variable)란 데이터(data)를 저장하기 위해 프로그램에 의해 이름을 할당받은 메모리 공간을 의미합니다.
즉, 변수란 데이터(data)를 저장할 수 있는 메모리 공간을 의미하며, 이렇게 저장된 값은 변경될 수 있습니다.
(출처: TCP School)

 

0. 변수란?

 

a=[1, 2, 3]이라는 식이 있다고 하자. 

여기서 a는 변수, [1, 2, 3]은 a라는 변수에 저장된 리스트이다. 

변수 a는 이 리스트가 저장된 메모리의 주소를 가리키는 값이다. 

 

실제 주소는 id(a)를 통해 확인할 수 있다. 

id(a)

4303029896 = 메모리 내에 저장된 실제 주소

a 는 리스트가 저장된 저장 공간의 이름으로,  a라는 변수가 가리키는 주소값은 4303029896 이다.

 

 

1. 변수 b에 대하여 

 

b=a

라고 선언하면, 변수 a와 변수 b 가 가리키고 있는 주소값이 동일하다는 것을 의미한다. 

[1, ,2, 3]이라는 리스트를 참조하는 변수가 a 한 개에서 a와 b 두 개로 늘어났다는 것이므로,

a의 요소값이 바뀌면 b의 요소값도 자동으로 바뀐다. 

 

 

한편, 

 

b = a[:]

 

 

from copy import copy

b=copy(a)

 

 

b=a.copy()

 

위의 세 가지 식을 이용하면 변수 b는 변수 a의 요소 값을 그대로 복사하지만,

a와는 다른 주소를 가리키는 변수가 된다. 

따라서 a리스트 값을 바꾸더라도 b리스트 값은 변하지 않는다. 

 

2. 두 변수의 값 바꾸기

 

>>> a = 3

>>> b = 5

>>> a, b = b, a

>>> a 5

>>> b 3

 

 

 

0. 불 자료형 = 불 방식의(boolean) 자료형으로, 참(True)과 거짓(False) 두 가지 값만 가진다. 

 

>>> a= True
>>> b=False
>>> type(a)
<class 'bool'>
>>> type(b)
<class 'bool'>

위와 같이 True 와 False는 파이썬의 예약어이다. 

 

 

1. 자료형의 참과 거짓 

문자열, 리스트, 튜플, 딕셔너리 등의 값이 비어 있으면("", [], (), {}) 거짓이 되고 비어 있지 않으면 참이 된다. 숫자에서는 그 값이 0일 때 거짓이 된다. 

 

2. 조건문의 리턴 값으로서의 True 와 False

 

>>> 1==1
True
>>> 2==1
False
>>> 2>1
True

 

 

3. 불 연산 연습

 

>>> bool(' ')
True------------------공백 한 칸이 있음.


>>> bool("")
False-----------------비어있음.

 

>>> bool([1, 2, 3])
True


>>> bool([])
False


>>> bool(0)
False


>>> bool(0,)
False


>>> bool(False)
False


>>> bool('0')
True


>>> bool([0])
True


>>> bool((0))
False


>>> bool((0,))
True

 

>>> bool( )
False


>>> bool(    )
False

 

 

 

0. 집합 자료형

 

s1 = set([1, 2, 3])

중복을 허용하지 않으며, 순서가 없다.

 

 

1. 교집합, 합집합, 차집합 구하기

 

>>> s1 = set([1, 2, 3, 4, 5, 6])
>>> s2 = set([4, 5, 6, 7, 8, 9])


>>> s1&s2
{4, 5, 6}

&를 이용한 교집합 구하기
>>> s1.intersection(s2)
{4, 5, 6}

intersection을 이용한 교집합 구하기

 

 


>>> s1-s2
{1, 2, 3}

-를 이용한 차집합 구하기
>>> s1.difference(s2)
{1, 2, 3}

difference를 이용한 차집합 구하기

 

 


>>> s1|s2
{1, 2, 3, 4, 5, 6, 7, 8, 9}

| 를 이용한 합집합 구하기
>>> s1.union(s2)
{1, 2, 3, 4, 5, 6, 7, 8, 9}

union을 이용한 합집합 구하기

 

 

 

2. 집합 자료형 관련 함수

 

s1.add(10)

값 한 개 추가하기

s1.update([12, 11])
값 여러 개 추가하기

 


s1.remove(11)

값 한 개 제거하기

 


>>> s1.remove([11,12])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

 

-------값 여러 개 제거는 remove로 안 됨. 

 


>>> s1.difference([11,12])
{1, 2, 3, 4, 5, 6, 10}

 

--------차집합 구하듯이 빼면 여러 개 한번에 삭제 가능.

0. 튜플과 리스트의 차이


--> 리스트 = [], 튜플 = ()

-->튜플은 요소값이 안 변하고(삭제나 수정이 불가함), 리스트는 요소값을 변화시킬 수 있다.


튜플은 한 개의 요소만을 가질 때, 요소 뒤에 반드시 쉼표를 붙여야 한다.
소괄호는 생략해도 된다. 

 

1.  수정, 삭제 제외 튜플 다루는 방법은 리스트와 완전 동일하다. 

 

t1 = (1, 2, 'v', 'n')일 때, 

 

t1[1] = 2

인덱싱

 

t1[:1] = (1)

슬라이싱

 

t2 = (0, 5)일 때, 

t1+t2= (1, 2, 'v', 'n', 0, 5)

더하기

 

t3=t2*3

t3 = (0, 5, 0, 5, 0, 5)

곱하기

 

len(t3)

6

길이 구하기

 

 

0. 리스트 연산 오류에 대하여.

 

a = [1, 2, 3]

 

a[2]+"hi"

를 출력하려고 하면 오류가 난다. 

정수인 3과 문자열을 더하는 것은 불가능하기 때문.

 

str(a[2]+"hi")

숫자와 문자를 더하고 싶다면 이런 식으로 출력을 요청해야 한다. 

"str은 정수나 실수를 문자로 만들어 주는 파이썬의 내장 함수이다."

 

 

 

 

 

 

1. 리스트의 수정과 삭제

 

a=[4]   (재정의)

del a[1]  (객체 한 개 삭제)

del a[:2] (여러 객체 한번에 삭제)

 

 

 

 

 

2. 리스트 관련 함수

a=[1, 2, 3, 4] 라는 리스트에 대하여

 

 

a.append(5)

print(a)

[1, 2, 3, 4, 5]

 

a.append([5, 6, 7])

print(a)

[1, 2, 3, 4, [5, 6, 7]]

 

append를 통해 숫자, 문자열, 리스트 등을 자유롭게 추가할 수 있다.

 

 

 

a.sort()

리스트 안의 요소들을 숫자 순서대로, 알파벳 순서대로 정렬할 수 있다.

리스트 안에 리스트가 있는 경우, 순서 구분이 안되기 때문에 오류가 난다.

 

 

a.reverse()

현재의 리스트 순서를 역순으로 정렬한다.

 

 

a.index(3)

2

3이라는 숫자의 자릿값 = 2 를 반환한다.

존재하지 않는 값을 함수에 넣으면 오류가 발생한다. 

 

 

a.insert(1,4)

리스트 a에서, 1이라는 위치에 4라는 값을 삽입한다.

a=[1, 4, 2, 3, 4]

 

 

a.remove(4)

리스트트에서 첫번째로 나오는 4라는 값을 삭제한다. 

(두 개 있을 경우 첫번째 값만 삭제)

 

 

a.pop()

리스트 맨 마지막 값을 리턴한 뒤 삭제

a.pop(1)

리스트에서 1이라는 위치에 있는 값을 리턴한 뒤 삭제

 

 

a.count(1)

리스트에 1이라는 값이 몇개 들어있는지를 리턴

 

 

a.extend[4,5]

a=[1, 2, 3, 4, 4, 5]

 

a.extend[4, 5] 

a+=[4, 5]

a= a+[4, 5]

 

세가지 식 모두 같은 말임.

 

 

 

 

 

 

 

 

0. 문자열

 

a="Life"

 

 

 

 

1. 문자열 길이 구하기

 

print(len(a))

 

4

 

 

 

 

2. 문자열 인덱싱

 

print(a=[0])

 

'L'

 

 

 

 

3. 문자열 슬라이싱

 

print(a=[0:3])

 

 

'Lif'

 

 

 

 

 

4. f문자열 포맷팅

 

name = "홍길동"

age= "30"

print(f"나의 이름은 {name}입니다. 나이는 {age*2}세 입니다.")

 

'나의 이름은 홍길동입니다. 나이는 60세 입니다.

 

 

 

 

 

5. f문자열 포맷팅에서 딕셔너리 사용

 

d={'name':'홍길동', 'age':30}

print(f"나의 이름은 d["name"]입니다. 나이는 d["age"]세 입니다.")

 

'나의 이름은 홍길동입니다. 나이는 30세 입니다.'

 

 

 

 

 

6. f문자열 포맷팅에서 정렬

 

print(f'{"hi":<10}')

왼쪽으로 정렬, 전체 자릿수 10개 

 

print(f'{"hi":>10"}')

오른쪽으로 정렬, 전체 자릿수 10개

 

print(f'{"hi":^10"}')

가운데 정렬, 전체 자릿수 10

 

print(f'{"hi":=^10"}')

가운데 정렬, 10자리 중 공백을 '='으로 채우

 

 

 

 

 

7. f문자열 포맷팅에서 소숫점 표현

 

y=3.59249

print(f'{y:0.4f}')

 

3.5924

 

 

 

 

 

8. 문자열 관련 함수들

 

a= "Python is the best choice"

 

print(a.count('t'))

3

 

print(a.find('b'))

14

 

print(a.index('b'))

14

# 문자열에 존재하지 않는 값을 넣었을 때, find는 -1을 반환하는 반면, index를 사용하면 오류가 난다는 차이점이 있다.

 

",".join(['a', 'b', 'c', 'd'])

'a,b,c,d'

 

a.upper() 알파벳 모두 대문자로

a.lower() 알파벳 모두 소문자로

a.lstrip() 왼쪽 공백 지우기

a.rstrip() 오른쪽 공백 지우기

a.strip() 양쪽 공백 지우기

a.replace('Life', 'Your leg') life를 your leg로 바꿔

a.split() 문자열 나누

 

 

 

 

 

 

+ Recent posts