의사 코드=pseudo code=수도코드=슈도코드=유사코드=가짜코드
진짜로 돌아가는 코드는 아니지만, 누구나 쉽게 알아볼 수 있게 적은 코드.
본인이 생각하는 규칙대로 적으면 되지만, 암묵적인 규칙이 있으며, 누구나 쉽게 알아볼 수 있게 "잘" 적어야 한다.
ex)
if (조건==참)
print("조건은 참입니다")
조건문
if 를 사용한다. if 내의 조건이 참이면 실행한다.
if 조건문:
실행문
중첩 if 문이 가능하다.
if (a==10이상):
if(a==20이상):
그러나 중첩된 if 가 늘어나면 가독성이 떨어지기에 자제하도록 하자.
else를 통해 if가 아닐 때의 처리가 가능하다.
>>> x = 5
>>> if x == 10:
... print('10입니다.')
... else:
... print('10이 아닙니다.')
...
10이 아닙니다.
else는 보다시피 조건문이 필요없다.
또한 else는 필수가 아니다. 위 코드는 그냥 if 두 개로 써도 상관없다. 하지만 메모리 사용량(속도)에 악영향을 끼치며 가독성(조건문 필요 x) 또한 떨어진다.
else는 바로 위 if에게 종속
elif(else if)
if 조건식:
코드1
elif 조건식:
코드2
위에서부터 차례로 검사하며 내려온다.
else는 필수가 아니다. 만약 else와 elif를 같이 쓰고자 하면 else는 항상 마지막에 와야한다.
elif가 있다면 else가 필수인가? 안뜬다.
else if로 쓰면 문법오류가 아닌가?
if, elif, else 구문에서 조건문은 하나만 실행된다.
- if 조건문이 참(True)이면, 해당 블록을 실행하고, 나머지 elif나 else는 건너뛴다.
- if 조건문이 거짓(False)인 경우, 다음 elif 조건문을 평가한다. elif 조건문이 참(True)이면, 해당 블록을 실행하고, 나머지 elif나 else는 건너뛴다..
- 모든 if와 elif 조건문이 거짓(False)이면, else 블록을 실행.
제어문 중 조건문.
조건문
if 를 사용한다.
if와 else
중첩 if
elif
else는 필수가 아니다. 그러나 elif가 있다면 else가 필요하다.
:사용과 코드블럭에 유의하자.
예외처리의 중요성. 키가 음수라던가.
tip) 조건문에서 대부분의 오류는 "=="대신 "="를 사용했거나 ":"(콜론)을 빼먹어서일 것이다. 잘 확인하도록 하자.
또한 코드블록 구조와 들여쓰기 수준 역시 생각해야한다.
예외처리 코드는 else로 작성하면 편리하다!
score=input("점수를 입력하세요: ")
score=int(score)
if 100>=score>=90:
print("학점은 a입니다")
elif 90>score>=80:
print("학점은b입니다")
elif(80>score>=70):
print("학점은c입니다")
elif 80>score>=0:
print("f")
else:
print("입력을 제대로 하세요")
--------------------------------------------------
반복문
파이썬에서 반복문은 for과 while문이 있다.
for문에서는 range()함수(range 타입)를 많이 쓴다. 다른 자료형을 써도 상관 없으나 대부분for문에서 range로 해결이 된다.
range()에는 3개의 인자가 있다.
첫 인자는 시작하는 수(default: 0), 두 번째 인자는 (마지막 숫자+1), 세 번째 인자는 증가량(default: 1)이다.
default는 생략하였을 때 그 값으로 자동 설정 된다는 뜻이다. 따라서 첫 번째와 세 번째 인자는 생략이 가능하다.
range(10)
range(0, 10)
range(0, 10, 2)
range(0, 10, 0.5)#오류. range는 정수만 허용한다.
range(0, 10, 0)#오류. 0은 허용하지 않는다. 왜일까?
sentinel: 보초값
list()로 확인해보자
>>> list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
for 변수 in range(횟수):
반복할 코드
위와 같이 range함수와 쓰는 경우가 대부분이다.
위의 숫자는 입력받은 대로 사용할 수도 있다.
for문
for i in range(count):
print('Hello, world!', i)
i값에 range가 할당된다.
sum=0 #초기화 Init
for i in range(1,11,1):
sum=sum+i
print(sum)
초기화 위치 중요
range 말고 다른 자료형도 사용할 수 있을까?
시퀀스 객체를 통해 사용가능하다.
시퀀스 객체란?
리스트 사용
>>> a = [10, 20, 30, 40, 50]
>>> for i in a:
... print(i)
튜플 사용
>>> fruits = ('apple', 'orange', 'grape')
>>> for fruit in fruits:
... print(fruit)
문자열 사용
>>> for letter in 'Python':
... print(letter)
...
Python
*print에서 end와 reversed(시퀀스 객체에서)를 알아보자.
>>> for letter in reversed('Python'):
... print(letter, end=' ')
...
n o h t y P
반복문은 메모리를 엄청 잡아먹는다(=느리다)
컴퓨터 계산의 70퍼센트 이상은 반복문처리
while문
for문과 같이 가장 많이 사용되는 반복문이다.
조건식이 참일 때 실행된다.
초기식
while 조건식:
반복할 코드
변화식
i = 0 # 초기식
while i < 100: # while 조건식
print('Hello, world!') # 반복할 코드
i += 1 # 변화식
while 문을 사용해 무한루프를 만들 수도 있다는 생각을 할 수 있다.
while(true)
반복문
continue문과 break
------------------------------------
*랜덤에 대한 고찰.
양자 양자침 퀸텀..
import random # random 모듈을 가져옴
i = 0
while i != 3: # 3이 아닐 때 계속 반복
i = random.randint(1, 6) # randint를 사용하여 1과 6 사이의 난수를 생성
print(i)
random.choice 함수를 사용하면 시퀀스 객체에서 요소를 무작위로 선택할 수 있습니다. 다음은 1, 2, 3, 4, 5, 6이 들어있는 리스트에서 무작위로 숫자를 선택합니다.
random.choice(시퀀스객체)
>>> dice = [1, 2, 3, 4, 5, 6]
>>> random.choice(dice)
1
>>> random.choice(dice)
4
>>> random.choice(dice)
3
fizz buzz 문제
다음 소스 코드를 완성하여 1부터 100까지의 숫자를 출력하면서 2의 배수일 때는 'Fizz', 11의 배수일 때는 'Buzz', 2과 11의 공배수일 때는 'FizzBuzz'가 출력되게 만드세요.
for i in range(1, 101):
if ① :
print('FizzBuzz')
elif ② :
print('Fizz')
elif ③ :
print('Buzz')
else:
print(i)
실행 결과
1
Fizz
3
... (생략)
FizzBuzz
89
Fizz
91
Fizz
93
Fizz
95
Fizz
97
Fizz
Buzz
Fizz
정답
① i % 2 == 0 and i % 11 == 0
② i % 2 == 0
③ i % 11 == 0
지옥에서 온 별찍기
이중 for문
for i in range(5): # 5번 반복. 바깥쪽 루프는 세로 방향
for j in range(5): # 5번 반복. 안쪽 루프는 가로 방향
print('j:', j, sep='', end=' ') # j값 출력. end에 ' '를 지정하여 줄바꿈 대신 한 칸 띄움
print('i:', i, '\\n', sep='')
사각형 출력
for i in range(3): # 3번 반복. 세로 방향
for j in range(7): # 7번 반복. 가로 방향
print('*', end='') # 별 출력. end에 ''를 지정하여 줄바꿈을 하지 않음
print()
계단식 별 출력
for i in range(5): # 0부터 4까지 5번 반복. 세로 방향
for j in range(5): # 0부터 4까지 5번 반복. 가로 방향
if j <= i: # 세로 방향 변수 i만큼
print('*', end='') # 별 출력. end에 ''를 지정하여 줄바꿈을 하지 않음
print() # 가로 방향으로 별을 다 그린 뒤 다음 줄로 넘어감
# (print는 출력 후 기본적으로 다음 줄로 넘어감)
대각선 별 출력
for i in range(5): # 0부터 4까지 5번 반복. 세로 방향
for j in range(5): # 0부터 4까지 5번 반복. 가로 방향
if j == i: # 세로 방향 변수와 같을 때
print('*', end='') # 별 출력. end에 ''를 지정하여 줄바꿈을 하지 않음
else: # 세로 방향 변수와 다를 때
print(' ', end='') # 공백 출력. end에 ''를 지정하여 줄바꿈을 하지 않음
print() # 가로 방향으로 별을 다 그린 뒤 다음 줄로 넘어감
# (print는 출력 후 기본적으로 다음 줄로 넘어감)
'파이썬 스터디' 카테고리의 다른 글
파이썬 헷갈리는 것 (0) | 2024.06.03 |
---|---|
3. 파이썬 기본 문법 - 시퀀스 자료형 배열(list), 튜플, 문자열 (7) | 2024.06.03 |
1. 파이썬 기본 문법 자료형과 연산 (3) | 2024.05.12 |
IDE와 IDLE (0) | 2024.04.28 |
0. WHY Python? (2) | 2024.04.28 |