for 와 자주 쓰는 range까지 코딩해설하기

range(a) range(a,b) range(a,b,c)

a= range(5) a # 숫자를 단독으로 레인지를 쓰면, 이상하게 나온다. 이걸 나오게 하려면 리스트나 튜플, 셋을 사용해야 한다 결과값: range(0, 5)
list(range(5)) # 이제 원하는 값으로 나오게 되었다. 결과값: [0, 1, 2, 3, 4]

list(range(10,5)) # 이렇게 하면 빈 값이 나온다

for a in range(5): print(a, end='') # for 구문에서 쓸 때는 단독으로 사용된다 # list(range(5)) 이렇게 안쓴다 # for안에 while 은 다 써진다. while 안에 for 된다. for 안에 for 된다 등 # 다 된다는 말이다

결과값 : 01234

for 와 range를 같이 쓰면, for in range(6):

이렇게만 써줘도 6번 반복해서 진행한다.

# 1~10까지 합 t = 0 a = 1 while a<=10: t+=a a+=1 print(t)

위의 식에서 t는 값을 모으는 sum의 개념이다.

그리고 a가 1씩 증가하면서, 계속 t에 더해주는 것이다

t = 0 for a in range(11): t+=a print(t) #fo문이 더 쉬울 것이다.

위에는 while문을 썼담녀 이기엔 for문을 쓴다.

여기선 자세히 보면 0~10까지 더한 다음에 그 결과를 출력해주는 것이다. 범위가 깔끔하다

위에서 살펴본 바와 같이 for문에 있는데 range()는 range 안에 있는 숫자만큼 더해준다

# 10에서 15까지 정수합 t = 0 for a in range(10,16): t+=a print(t)

t는 위에서 언급했듯이 for문 안에 일어난 숫자의 합계를 의미한다

여기에선 10~15까지 더해줘서 t에 누적합을 구해준 다음에 출력해주는 것을 목적으로 한

# 100이하 3배수 합 t = 1 for a in range(0,101,3): t+=a print(t)

3의 배수라고 해서 겁낼 것 없다.

for문 안에 있는 3 간격으로 합계를 하는 걸 쓰면 된다.0~100까지 더하는데 간격이 3이다

그게 바로 3의 배수이다.

for문을 이해하고 있으면 그렇게 어려운 것이 아니다

name = 'python' for n in name: print(n)
# range(len(name)) = range(6) 이 말이다. name = 'python' for x in range(len(name)): print(name[x])

6번을 반복해준다는 의미이다. 위의 2개 식은 모두 같은 결과값을 나타낸다

문자열의 갯수만큼 반복해준다.

이렇게 이해하면 되는 것이다.

만약 name 안에 문자열이 많으면 그 숫자만큼 반복을 해준다.

score =[80,88,90,75] for s in score: print(s)

이렇게하면 숫자가 1개씩 출력된다.

총 4개의 숫자가 아래로 출력된다

score =[80,88,90,75] for x in range(len(score)): print(score[x])

이건 스코어 리스트에다가 한 개씩 인덱싱해서 뽑아내는 것이다

그리고 사실상 위의 식이랑 같은 결과를나타내지만 학습차원에서 해봤다

score = [80,88,90,75,94] for s in score: s+=5 print(score)

이렇게하면 결과 값이 뭐가 나오는가?

수식만 보면, 5씩 더해서 출력하는 걸 원하는 것 같지만 결과는 그와 같지 않다

그냥 score = [80,88,90,75,94] 이렇게만 출력된다

무엇이 문제일까?

score = [80,88,90,75,94] for i in range(len(score)): score[i]+=5 print(score)

# 5번을 반복해주고[range와 len 선택해서], score 안에 인덱싱 중에 한 개씩 잡아서 5를 더해주고, 그걸 계속 출력을 해준다. 의의가 있다.

인덱싱해서 일일이 더해줘야 한다

그래야 결과값이 나온다

원래의 값을 바꿔줘야 우리가 원하는대로 5씩 더한 값이 나오는 것이다.

# 브레이크 들어갔으니까 10에서 그냥 멈춘다. a = [1,3,8,-6,10,0,99,-11] for x in a: if x ==0: break print(x)

다음에 알아볼 것은 break 이다

while 이나 for문에서 모두 사용 가능하다.

break 이나 continue 이나 둘 다 많이 쓰인

# 컨티뉴 들어갔으니까 0을 빼고 그냥 for문을 계속 돈다 돌아라 a = [5,8,9,0,6,9,0] for x in a: if x ==0: continue print(x)

이렇게 하면 결과 값이 어떻게 나올까? 0 일땐 출력이 되지 않는다

왜? if 값으로 0일때 그냥 하라고 입력을 했기 때문이다

그러면 그냥 하라는 말은 출력과는 거리가 있다

for x in [5,7,8,2,1]: if x == 0: break print(x) else: print('else block')

for문 안에 있는 출력이 다 끝나더라도 else 를 통해서 else block 을 출력할 수 있다.

# 구구단 9 for x in range(1,11): for y in range(1,11): print('{:4d}'.format(y*x),end='') print() # 보기 좋게 하려면 나중에 print() 이걸 넣어줘야 이쁘게 된다. 그리고 곱한 값만 출력되게. 깔끔하게 보여주자. 그리고 # 포멧 출력은 아직 습관이 되어있지 않다. 4칸 차지하게 하라면 '{:4d}' 그래야지 더 숫자가 커져도 충분한 자리를 만들어준다

구구단에 대한 이해는 어느정도 되었나?ㅠ

print() 이걸 생각하지 못했다

a = {'baseball','football','tennis','lol'} b = {'football','golf','lol'} for x in a: for y in b: if x == y: print('we both like {}.'.format(x))

이건 2개의 튜플 안에 들어있는 값이 동일하면 출력하는 것이다

첫번째 for 문으로 a 튜플에 있는 갯수만큼 for문을 반복하게 해준다

그 뒤로 두번째 for문으로 b 튜플에 있는 갯수만큼 for문을 반복하게 해준다

마지막으로 x와 y가 동일하면, x값을 출력해주는 것이다.

기준은 x이다.

name = 'Alice' reversed(name) list(reversed(name))

이건 원래 값을 반대로 해서 리스트 형태로 하나씩 출력하는 것이다.

name = 'Alice' for c in reversed(name): print(c)

이건 Alice 값이 반대로 하고, 반대되는 값을 가진 name 변수명을 하나씩 출력하는 것이다.

score = [80,90,86,77] for s in reversed(score): print(s)

리스트 안에 하나씩 반대로 해서 출력한다

# for 뒤에 오는 것들 enumerate() filter() map() range() reversed() zip()

range 나 filter 많이 쓴다

# count() 메서드와 같은 일을 하는 코드, 하나의 단어와 알파벳을 입력받아 알파벳이 몇 번b나오는지를 출력 word = input("enter one string:") ch = input("enter one character:") count = 0 for w in word: if w ==ch : count+=1 print(count)

특정 문자를 입력하게 한 뒤에 그 안에 특정 알파벳이 몇 개가 나오는지 알아본다

word 안에 문자열이 있는데, 그 문자열의 w가 만약에 ch에 입력한 알페벳과 '똑같다면' 1개씩 더해주라는 말이다

그래서 결국에 마지막 값을 출력해준다.

score = [90,90,89,92,73,100,77,80,95] count = 0 for s in score: if s >=90: count+=1 print(count)

이건쉬운거다

만약에 s 원소 중에서 90을 넘으면 count 값을 1개씩 더해주는 것이라고 할 수 있다.

# 리스트 저장 단어, 하나의 소문자 단어를 입력 받아 # 대소문자 구분 없이 몇 번 인덱스 저장인지와 저장된 그대로를 출력하는 코드 작성 (for, range) L = ['apple', 'Apple', 'Melon', 'MeLon','Grape', 'APPle','kiwi','KIWi'] word = input("enter lowercase") for i in range(len(L)):#<----- 유용하다 if L[i].lower() == word: #<----- 유용하다 print('{}---{}'.format(i,L[i])) # 한 번에 하지 못했다. 우선은 lower() 메서드를 어디에 찍는지 몰랐다. 인덱스 할땐 반드시 [] 써준다.

맨 처음 for문을 보자. for문안에 있는 내용은 원소만큼 for문을 반복해주는 것이 특징이다

그리고 if문이 중요한데, 내가 입력한 wordl안에 원소와 L 리스트안에 있는 원소 i와 동일하다면

print문으로 그 원소의 순서와 문자열을 출력해주는 것이다.

L 안에 들어있는 문자열은 대문자와 소문자가 섞여있기 때문에 이걸 L(i).lower 로 바꿔주는 걸 잘 해줘야 한다

# 가위바위보 경우의수 출력 for x in ['가위','바위','보']: for y in ['가위','바위','보']: print('{} vs {}'.format(x,y))

가위바위보 이건 뭐 별로 어렵지 않다. 위에 했던 것의 연속

for x in range(1,7): for y in range(1,7): print('{} + {} = {:2d}'.format(x,y,x+y),end=' ') print()

위에서 했던 구구단을 떠올리면 된다

1과 7까지 더한다음에 그걸 출력해주는 것이다.

a = [1,3,5] b = [5,3,1] c = [1,1,3,5] d = [1,3,5] a ==b # 시퀀스가 있다. 자리가 정해져 있다

이게 중요하다

score = [80,99,63,44,77,53,67,87,91] score[2:9:3] = [100,99,98] score [80, 99, 100, 44, 77, 99, 67, 87, 98]

98이 아예 추가되었다.

M=[1,3,5,7,9]; Z=[2,4,6,8,10] M+Z [1, 3, 5, 7, 9, 2, 4, 6, 8, 10]

이러면 각 원소끼리 더해지는 것이 아니라 리스트 에 리스트가 추가된다

X=M+Z X [1, 3, 5, 7, 9, 2, 4, 6, 8, 10]

이것도 결과는 위와 마찬가지이다

L=[1,2,3] M=[10,20] L+=M L [1, 2, 3, 10, 20]
M*=3 #리스트가 3개가 나옴 M [10, 20, 10, 20, 10, 20]

리스트가 3개 연속으로 나온다

# data 인덱스 1부터 끝까지 모든 데이터 합을 첫번째에 넣어라 data =[0,3,8,10,22,55,9,1,25,30] data[0] = sum(data[1:]) print(data)

sum 함수를 사용했다

네이버 블로그 원문 보기