누구나 다하는 원페이지 파이썬 강좌
문득 원페이지로 파이썬 기본 문법을 훌어볼 수 있는 강좌를 써봐야 겠다 싶었는데 이제서야 작성 해보고 있습니다.
꾸준히 정기적으로 읽어보면서 계속 수정해볼 생각입니다.
2024. 9. 5 최초작성
2024. 9. 15
2024. 9. 29
2024. 11. 3
파이썬은 배우기 쉬운 프로그래밍 언어 중 하나입니다. 잠시 시간을 내어 본 문서를 읽어보면 파이썬의 기본적인 문법을 파악하고 간단한 코드를 작성해볼 수 있도록 해보려고 합니다.
파이썬을 실행하기 위한 개발 환경은 다음 포스트를 참고하세요.
Visual Studio Code와 Miniconda를 사용한 Python 개발 환경 만들기( Windows, Ubuntu, WSL2)
https://webnautes.tistory.com/1842
이제 파이썬을 살펴보겠습니다.
파이썬에서 문자와 문자들로 구성된 단어나 문장을 구별하지 않고 모두 똑같이 문자열로 취급합니다. 문자도 문자열로 취급하는 점을 유의하세요. 예를 들어 아래 있는건 모두 문자열입니다.
해 달 안녕하세요. s u n sun moon Hello |
어떤 프로그래밍 언어든 첨 시작할때 실행시켜 보는 예제 코드는 아마도 화면에 문자열을 출력해보는 것일 겁니다. 이제 화면에 문자열을 출력해봅시다. 파이썬에서는 print 함수를 사용하면 됩니다.
함수는 특정 동작을 하는 코드를 묶어놓은 것입니다. 여기서 사용하는 print 함수는 전달받은 문자열을 화면에 출력합니다.
print 함수에 출력할 문자열은 다음처럼 전달할 수 있습니다. 큰따옴표 “ 나 작은 따옴표 ‘ 를 사용하여 문자열을 감싼후, 함수에 전달할 문자열을 print 다음에 오는 괄호안에 넣으면 됩니다.
다음 코드를 실행하면 문자열 안녕이 화면에 출력됩니다. 본 문서에서 코드는 다음처럼 검은색 배경 내에 보여지며 실행 결과는 코드 다음에 바로 보여줍니다.
print("안녕") |
안녕
파이썬에서 왜 문자열에 큰따옴표 또는 작은 따옴표를 사용할까요. 문자열에 포함된 큰따옴표나 작은따옴표를 출력하기 위해서 입니다. 서로 상대편 따옴표를 출력하는데 사용할 수 있습니다.
다음처럼 작은 따옴표로 감싸면 큰따옴표를 출력할 수 있습니다.
print('"안녕"') |
"안녕"
다음처럼 큰따옴표로 감싸면 작은 따옴표를 출력할 수 있습니다.
print("'안녕'") |
'안녕'
파이썬에서 숫자에는 정수(int)와 실수(float)가 있습니다. 정수와 실수 구분은 간단합니다. 숫자에 소수점이 없으면 정수이고 소수점이 있으면 실수입니다.
이번엔 숫자를 출력해 봅니다. 숫자 출력시에는 큰따옴표나 작은 따옴표를 사용할 필요가 없이 숫자를 바로 괄호안에 적어주면 됩니다.
정수를 출력합니다.
print(2024) |
2024
실수를 출력합니다. 숫자에 소수점이 있으면 실수입니다.
print(3.14) |
3.14
변수에 문자열이나 정수 등을 저장해놓고 print 함수에 전달할 수 도 있습니다. 변수에 값을 저장해서 값을 사용할 위치에 대신 사용할 수 있습니다.
= 왼쪽에 있는 것이 값을 저장하는 데 사용되는 변수이고 = 오른쪽에 있는 것이 변수에 저장하는 값입니다. 다음처럼 작성하면 이제 안녕 대신에 str을 사용하고, 2024 대신에 i를 사용할 수 있습니다.
str = '안녕' i = 2024 |
파이썬 코드에서 #으로 시작하면 주석이라고 부릅니다. 파이썬 코드를 실행시켜주는 프로그램인 인터프리터가 주석은 무시하고 실행하지 않기 때문에 원하는 걸 뭐든 적을 수 있습니다. 보통 코드 설명을 적습니다.
# 안녕이란 문자열을 변수 str에 저장합니다. 이걸 대입이라고 부릅니다. # 이때 큰따옴표나 작은 따옴표를 사용해야 합니다. 문자열은 항상 큰따옴표나 작은 따옴표를 사용해야 한다고 기억하세요. str = '안녕' print(str) # 변수 str에 저장된 값을 print 함수가 출력합니다. |
안녕
정수도 변수에 저장했다가 출력할 수 있습니다.
i = 2024 # 정수 2024를 변수 i에 저장합니다. print(i) # 변수 i에 저장된 값을 print 함수가 출력합니다. |
2024
파이썬의 print 함수의 괄호안에 넣은건 모두 출력된다고 기억해두세요.
다른 예로 print 함수에 계산식을 넣으면 계산 결과가 출력됩니다.
a = 10 b = 5 print(a+b+3) |
18
문자열을 반복해서 출력하는 코드입니다. 뒤에 적은 수 만큼 문자열 @를 반복해서 출력합니다.
print('@'*10) |
@@@@@@@@@@
콤마로 구분하여 print 함수에 다수의 문자열, 숫자, 변수를 전달하면 공백 하나로 구분되어 출력됩니다.
print(1, 2, 3) |
1 2 3
변수 이름은 다음 규칙에 따라 정하면 됩니다. 코드를 작성할 때마다 이 규칙을 참고하여 익숙해지도록 노력하면 좋습니다.
1. 변수 이름은 영어 소문자(a-z), 영어 대문자(A-Z)나 밑줄(_)로 시작해야 합니다.
2. 첫 글자 이후에는 영어 소문자, 영어 대문자, 숫자(0-9), 밑줄을 사용할 수 있습니다.
3. 대소문자를 구분합니다. 예: myCat과 mycat은 다른 변수입니다.
4. 예약어(if, for, while 등)는 변수명으로 사용하면 안됩니다. 사용할 수 있지만 사용하지마세요. 확인할것
5. 변수 이름은 snake_case를 사용합니다 (예: my_variable).
클래스 이름은 CamelCase를 사용합니다 (예: MyClass).
6. 변수 이름에는 공백을 포함할 수 없습니다.
반복
“안녕”을 10번 화면에 출력하려고 한다면 어떻게 해야할까요. 다음처럼 단순히 print 함수를 10번 사용할 수도 있지만 비효율적입니다.
print("안녕") print("안녕") print("안녕") print("안녕") print("안녕") print("안녕") print("안녕") print("안녕") print("안녕") print("안녕") |
안녕
안녕
안녕
안녕
안녕
안녕
안녕
안녕
안녕
안녕
앞에서 작성한 코드의 양을 줄일 수 있는 방법이 있습니다. while문을 사용하는 것입니다. while 문을 사용하여 안녕을 출력하는 print 함수를 반복하여 실행할 수 있습니다.
아래 예제에서는 while 문에서 반복하는 동안 변수 i의 값을 증가시켜서 몇번 반복할지를 체크하여 언제 while 문의 반복을 중지할지 결정합니다.
# 몇번 반복했는지 세는데 사용할 변수 i에 초기값으로 0을 대입합니다. 파이썬에선 숫자셀 때 0부터 시작합니다. i = 0 # 변수 i의 값이 10보다 작을 동안 반복합니다. 이러면 10번 안녕을 출력하는 print 함수를 반복하여 실행합니다. # 변수 i의 값은 0부터 시작하므로 i가 9까지만 증가하면됩니다. while i < 10: # 빈칸 4개를 추가한후 print 함수를 적어야 합니다. # print 함수가 while 문에서 반복해야하는 코드라는 것을 파이썬 코드를 실행하는 인터프리터에 알려주기 위해서 입니다. print('안녕') # 변수 i의 값을 1증가 시킵니다. i = i + 1 |
이제 실행해보면 “안녕”이 화면에 10번 출력됩니다. 앞에서 print 함수 10번 사용한 것과 똑같은 결과지만 코드가 더 짧아졌습니다.
안녕
안녕
안녕
안녕
안녕
안녕
안녕
안녕
안녕
안녕
for문을 사용하여 똑같이 구현할 수 있습니다. for 문도 코드를 반복 실행할때 사용할 수 있습니다. 아래 코드를 실행해보면 앞 결과처럼 안녕이 열번 출력됩니다.
# range는 순차적으로 숫자를 생성합니다. range에 지정한 숫자값보다 1작은 값까지 숫자를 생성하기 때문에 # 여기에선 0부터 9까지 숫자를 생성합니다. 파이썬은 숫자 셀때 0부터 시작하기 때문입니다. # 생성된 숫자는 변수 i에 전달됩니다. for i in range(10): print('안녕') |
안녕
안녕
안녕
안녕
안녕
안녕
안녕
안녕
안녕
안녕
range 대신에 리스트(list)라는 데이터 타입을 사용할 수 있습니다. 리스트는 대괄호 [] 안에 원소를 추가한 데이터 타입입니다.
for i in [0,1,2,3,4,5,6,7,8,9]: print('안녕') |
안녕
안녕
안녕
안녕
안녕
안녕
안녕
안녕
안녕
안녕
range는 리스트와 좀 다릅니다. 다음처럼 변환하여 range를 리스트로 변환할 수 있습니다.
n = list(range(10)) print(n) |
리스트가 출력됩니다.
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
for와 while의 차이
while 문은 변수에 초기값을 지정해주고 변수의 값을 증가시키거나 감소시켜서 조건을 만족할때까지 반복합니다.
앞에서 작성한 코드를 다시 살펴봅니다. 이번엔 while 문을 반복시키며 종료 조건을 체크하기 위해 사용하는 변수 i의 값을 출력합니다.
i = 0 # 변수 i의 초기값으로 0을 지정합니다. while i < 10: # 변수의 i의 값이 10보다 작을 동안 반복합니다. # 반복할 코드는 빈칸 4개로 들여쓰기를 해야 while문에서 반복해야하는 코드라는 것을 파이썬 인터프리터가 알게됩니다. # 화면에 변수 i를 출력합니다. print(i) # 변수 i의 값을 1증가시켜 다시 변수 i에 대입합니다. i = i + 1 |
0
1
2
3
4
5
6
7
8
9
for 문은 in 뒤에 있는 객체의 원소를 하나씩 가져와 for 문 다음에 오는 변수에 대입하는 것을 반복합니다. 아래 코드에선 for 문이 반복할 때마다 range가 0에서 9 사이의 정수를 순차적으로 하나씩 생성하면 그 값은 변수 i에 저장되며 print 함수를 사용하여 변수 i의 값을 출력합니다.
for i in range(10): print(i) |
0
1
2
3
4
5
6
7
8
9
for 문이 in 뒤에 있는 객체의 원소를 하나씩 가져오는 다른 예입니다. 다음 코드를 실행해보면 문자열의 문자를 하나씩 가져와 화면에 출력합니다.
for s in 'Hello': print(s) |
H
e
l
l
o
리스트를 for문에 사용하면 원소를 하나씩 가져와서 화면에 출력해볼 수 있습니다. 아래 예제에서는 리스트 fruits의 원소를 하나씩 가져와 변수 f에 저장하고 print 함수를 사용하여 화면에 출력합니다.
fruits = ['banana', 'orange', 'raspberry'] for f in fruits: print(f) |
banana
orange
raspberry
숫자 맞추기 구현
조건에 따라 코드를 실행하는 if 문과 코드를 모아놓은 함수를 살펴보기 위해 숫자 맞추기 게임을 구현해보겠습니다.
프로그램이 숫자를 하나 생각하고 사용자가 숫자를 입력하면 프로그램이 생각한 숫자보다 높은지 낮은지를 출력하여 사용자가 해당 숫자를 맞추게 하는 간단한 게임입니다.
뭐가 필요할까요.
우선 프로그램이 숫자 하나를 생각해야 합니다. 다음 코드는 프로그램이 1과 9 사이 숫자 중 하나를 무작위로 생각하고 출력하도록 합니다.
# 무작위로 숫자를 생성하기 위해 random 모듈을 사용합니다. # 모듈은 미리 작성된 코드가 다른 소스코드 파일에 있다고 생각하면 됩니다. import random # random 모듈에 있는 randint 함수를 사용하여 1에서 9 사이의 숫자를 하나 생성하여 변수 random_number에 저장하도록 합니다. random_number = random.randint(1, 9) # 문자열을 감싼 큰따옴표 혹은 작은 따옴표 앞에 f를 적는 것은 문자열 내의 원하는 위치에 원하는 변수의 값을 출력하는 방법으로 f-string이라고 부릅니다. # 문자열 내에 원하는 위치에 {}를 적고 안에 변수를 적어주면 해당 변수의 값이 해당 위치에 출력됩니다. print(f"내가 생각한 숫자는 {random_number}입니다.") |
실행할때 마다 1에서 9 사이의 숫자가 무작위로 출력됩니다.
내가 생각한 숫자는 3입니다.
내가 생각한 숫자는 6입니다.
내가 생각한 숫자는 7입니다.
이제 사용자로부터 숫자를 입력받아야 합니다.
다음 코드를 실행한 후, 숫자를 입력후 엔터를 누르면 입력했던 숫자가 출력됩니다.
# input에 적어준 문자열을 출력한 후 사용자의 입력을 대기합니다. input_number = input("숫자를 입력하고 엔터를 누르세요 :") print(f"당신이 입력한 숫자는 {input_number}입니다.") |
숫자를 입력하고 엔터를 누르세요 :10
당신이 입력한 숫자는 10입니다.
이제 숫자를 비교하는 방법이 필요합니다.
우선 입력한 값과 무작위로 생성한 값을 미리 정해놓고 작성해봅니다.
random_number = 10 # 무작위로 생성되는 수를 10으로 가정합니다. input_number = 10 # 사용자가 입력한 수를 10으로 가정합니다. # 사용자가 입력한 숫자와 프로그램이 생각한 숫자를 비교합니다. # if문 조건 콜론(:) 순으로 적어줍니다. if input_number == random_number: # if 문의 조건이 참이면 실행되는 코드라는 것을 인터프리터에게 알려주기 위해 4칸의 스페이스를 추가합니다. print(f'내가 생각한 숫자를 맞췄습니다. ') |
내가 생각한 숫자를 맞췄습니다.
무작위로 생성한 수 random_number와 사용자가 입력한 수 input_number가 일치 하기 때문에 if 문에 있는 조건 input_number == random_number가 참이 됩니다. 조건이 참이기 때문에 바로 아래 보이는 print문의 실행되었습니다.
이번엔 정답이 아닌 경우를 고려해봅시다.
random_number = 10 # 무작위로 생성되는 수를 10으로 가정합니다. input_number = 9 # 사용자가 입력한 수를 9로 가정합니다. # 사용자가 입력한 숫자와 프로그램이 생각한 숫자를 비교합니다. if input_number == random_number: # if 문의 조건이 참이면 실행되는 코드라는 것을 인터프리터에게 알려주기 위해 4칸의 스페이스를 추가합니다. print(f'내가 생각한 숫자를 맞췄습니다. ') else: # 앞의 조건외에 나머지 모든 경우에 해당됩니다. # else 문에서 실행되는 코드라는 것을 인터프리터에게 알려주기 위해 4칸의 스페이스를 추가합니다. print(f'{input_number}는 정답이 아닙니다.') |
9는 정답이 아닙니다.
무작위로 생성한 수 random_number와 사용자가 입력한 수 input_number가 일치하지 않기 때문에 if문에 있는 조건 input_number==random_number가 거짓이 됩니다. 조건이 거짓이기 때문에 else 문이 실행되며 else문에는 조건이 없기 때문에 바로 print문이 실행됩니다.
위 코드처럼 정답인지 아닌지만 판단해서는 숫자를 맞추기 힘듭니다. 사용자가 입력한 수가 정답보다 큰지 작은지를 추가해줘야 합니다.
random_number = 10 input_number = 9 # 사용자가 입력한 숫자와 프로그램이 생각한 숫자를 비교합니다. # 3가지 경우가 있습니다. if input_number == random_number: # if 문의 조건이 참이면 실행되는 코드라는 것을 인터프리터에게 알려주기 위해 4칸의 스페이스를 추가합니다. print(f'내가 생각한 숫자를 맞췄습니다. ') # 앞에 있는 if 문의 조건이 거짓인 경우 두번째 조건 검사시 elif 문을 사용합니다. elif input_number > random_number: # elif 문의 조건이 참이면 실행되는 코드라는 것을 인터프리터에게 알려주기 위해 4칸의 스페이스를 추가합니다. print(f'{input_number}보다 작은 숫자를 생각하고 있습니다.') else: # 앞의 조건외에 나머지 모든 경우에 해당됩니다. # else 문에서 실행되는 코드라는 것을 인터프리터에게 알려주기 위해 4칸의 스페이스를 추가합니다. print(f'{input_number}보다 큰 숫자를 생각하고 있습니다.') |
9보다 큰 숫자를 생각하고 있습니다.
이제 세개의 코드를 하나로 합쳐봅니다.
우선 프로그램이 숫자를 생각하도록 한 후, 사용자에게서 숫자를 입력받아 프로그램이 생각한 숫자와 사용자에게서 입력받은 숫자를 비교하면 됩니다.
import random # random 모듈에 있는 randint 함수를 사용하여 1에서 9 사이의 숫자를 하나 생성하여 변수 random_number에 저장하도록 합니다. random_number = random.randint(1, 9) # 정답을 출력하면 안되니 주석처리하거나 삭제합니다. # print(f"내가 생각한 숫자는 {random_number}입니다.") # 사용자에게서 숫자를 입력받습니다. input_number = input("숫자를 입력하고 엔터를 누르세요 :") # input 함수에 입력된 값은 문자열이기 때문에 정수로 바꿔야 합니다. input_number = int(input_number) # 사용자가 입력한 숫자와 프로그램이 생각한 숫자를 비교합니다. # 3가지 경우가 있습니다. if input_number == random_number: print(f'내가 생각한 숫자를 맞췄습니다. ') elif input_number > random_number: # 앞에 있는 if 문의 조건이 거짓인 경우 두번째 조건 검사시 elif 문을 사용합니다. print(f'{number}보다 작은 숫자를 생각하고 있습니다.') else: # 앞의 조건외에 나머지 모든 경우에 해당됩니다. print(f'{number}보다 큰 숫자를 생각하고 있습니다.') |
숫자를 입력하고 엔터를 누르세요 :10
10보다 작은 숫자를 생각하고 있습니다.
잘 동작하는 것 같습니다. 하지만 한번에 숫자를 맞출수는 없지요. 맞출때 까지 반복하도록 해봅니다.
while True를 추가하여 무한히 반복하도록 하고 숫자를 맞춘경우 break문을 추가하여 반복문에서 빠져나오도록 하면 됩니다.
# 무작위로 숫자를 생성하기 위해 random 모듈을 추가로 사용합니다. 모듈은 미리 작성된 코드가 다른 소스코드 파일에 있다고 생각하면 됩니다. import random # random 모듈에 있는 randint 함수를 사용하여 1에서 9 사이의 숫자를 하나 생성하여 변수 random_number에 저장하도록 합니다. random_number = random.randint(1, 9) # 정답을 출력하면 안되니 주석처리하거나 삭제합니다. # print(f"내가 생각한 숫자는 {random_number}입니다.") # while문의 조건으로 True를 주면 계속 조건이 참이므로 무한히 반복하게 됩니다. while True: # 사용자에게서 숫자를 입력받습니다. input_number = input("숫자를 입력하고 엔터를 누르세요 :") # 입력된 값은 문자열이기 때문에 정수로 바꿔야 합니다. input_number = int(input_number) # 사용자가 입력한 숫자와 프로그램이 생각한 숫자를 비교합니다. # 3가지 경우가 있습니다. if input_number == random_number: print(f'내가 생각한 숫자를 맞췄습니다. ') # 정답을 맞춘 경우 반복을 중단하도록 합니다. break elif input_number > random_number: # 앞에 있는 if 문의 조건이 거짓인 경우 두번째 조건 검사시 elif 문을 사용합니다. print(f'{input_number}보다 작은 숫자를 생각하고 있습니다.') else: # 앞의 조건외에 나머지 모든 경우에 해당됩니다. print(f'{input_number}보다 큰 숫자를 생각하고 있습니다.') |
실행시켜보겠습니다. 3번만에 맞췄습니다.
숫자를 입력하고 엔터를 누르세요 :5
5보다 큰 숫자를 생각하고 있습니다.
숫자를 입력하고 엔터를 누르세요 :7
7보다 큰 숫자를 생각하고 있습니다.
숫자를 입력하고 엔터를 누르세요 :9
내가 생각한 숫자를 맞췄습니다.
앞에서 코드를 모아놓은 것을 함수라고 했습니다. 지금 작성한 코드 일부를 함수로 바꾸면 어떨까요.
다른 사람이 우리가 만든 숫자 맞추는 코드의 일부를 쉽게 사용할 수 있을 거 같습니다.
숫자 판별하는 걸 함수로 바꾸기
import random # 이렇게 코드 시작부분에 함수 선언을 적어주고 코드들을 들여쓰기 해주면됩니다. 들여쓰기 해주는 의미는 함수가 실행될때 같이 실행되는 코드라는 의미입니다. def number_game(): random_number = random.randint(1, 9) while True: input_number = input("숫자를 입력하고 엔터를 누르세요 :") input_number = int(input_number) if input_number == random_number: print(f'내가 생각한 숫자를 맞췄습니다. ') break elif input_number > random_number: print(f'{input_number}보다 작은 숫자를 생각하고 있습니다.') else: print(f'{input_number}보다 큰 숫자를 생각하고 있습니다.') # 모든 파이썬 소스 코드의 실행 시작점을 명시하기 위해 main 함수를 적어줄 수 있습니다. if __name__ == '__main__': # number_game 함수를 다음처럼 적어주면 프로그램이 시작되면 바로 실행됩니다. number_game() |
다시 실행해보면 잘되네요. 이번에도 두번만에 맞췄네요. 운이 좋군요.
숫자를 입력하고 엔터를 누르세요 :5
5보다 작은 숫자를 생각하고 있습니다.
숫자를 입력하고 엔터를 누르세요 :2
내가 생각한 숫자를 맞췄습니다.
한단계 더 나아가 모듈로 만들어봅시다. 어렵지 않습니다. 이미 다 구현되어 있어요. 단지 현재 만든 파일을 다른 파일에서 불러와 사용하면 됩니다. 다음처럼요. 지금까지 작성한 파일 이름이 test.py라고 해봅시다.
# test.py 파일의 코드를 불러올때 파일 이름인 test만 import 문에 적어주면 됩니다. import test # 모듈이름.함수이름 이렇게 적어 모듈에 있는 함수를 호출할 수 있습니다. test.number_game() |
실행해보면 잘 동작합니다.
숫자를 입력하고 엔터를 누르세요 :5
5보다 작은 숫자를 생각하고 있습니다.
숫자를 입력하고 엔터를 누르세요 :1
1보다 큰 숫자를 생각하고 있습니다.
숫자를 입력하고 엔터를 누르세요 :2
내가 생각한 숫자를 맞췄습니다.
좀 더 상세한 파이썬 강좌는 다음 포스트에 모아놓고 있습니다.
누구나 다하는 파이썬 강좌
https://webnautes.tistory.com/2348