python 공부 2024.03.26
기본 함수
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
## 문법 ##
# 리스트를 만들어 'my_lis'라는 이름을 붙여줍니다. 여기에는 세 개의 숫자 30, 10, 20이 들어있습니다.
my_lis = [30, 10, 20]
print("현재 리스트 : %s" %my_lis)
# 'append'를 사용하여 리스트 끝에 40이라는 숫자를 추가합니다. 이제 리스트는 [30, 10, 20, 40]이 됩니다.
my_lis.append(40)
print("append(40) 후의 리스트 : %s" %my_lis)
# 'pop'을 사용하여 리스트의 마지막 값을 꺼내고 그 값을 출력합니다. 여기서 꺼내진 값은 40이며, 리스트는 다시 [30, 10, 20]이 됩니다.
print("pop()으로 추출한 값 : %s" %my_lis.pop())
print("pop()후의 리스트 : %s" %my_lis)
# 'sort'를 사용하여 리스트 안의 값을 오름차순으로 정렬합니다. 정렬 후 리스트는 [10, 20, 30]이 됩니다.
my_lis.sort()
print("sort후의 리스트 : %s" %my_lis)
# 'reverse'를 사용하여 리스트의 순서를 뒤집습니다. 이제 리스트는 [30, 20, 10]이 됩니다.
my_lis.reverse()
print("reverse후의 리스트 : %s" %my_lis)
# 'index'를 사용하여 특정 값(여기서는 20)의 위치를 찾습니다. 여기서 20의 위치는 1번째입니다 (컴퓨터는 0부터 세므로).
print("20값의 위치 : %d" %my_lis.index(20))
# 'insert'를 사용하여 리스트의 특정 위치(여기서는 2번째)에 222라는 값을 삽입합니다. 리스트는 이제 [30, 20, 222, 10]이 됩니다.
my_lis.insert(2, 222)
print("insert(2,222) 후의 리스트 : %s" %my_lis)
# 'remove'를 사용하여 리스트에서 첫 번째로 나타나는 222라는 값을 제거합니다.
# 만약 리스트 안에 222가 여러 개 있어도, 첫 번째 나타난 222만 제거됩니다.
# 이제 리스트에서 222가 제거되어 [30, 20, 10]이 됩니다.
my_lis.remove(222)
print("remove(222) 후의 리스트 : %s" %my_lis)
# 'extend'를 사용하여 리스트에 다른 리스트 [77, 88, 77]을 추가합니다.
# 이로써 원래 리스트는 [30, 20, 10, 77, 88, 77]이 됩니다.
# 'append'와는 다르게, 'extend'는 리스트를 확장하여 여러 값을 한 번에 추가할 수 있습니다.
my_lis.extend([77, 88, 77])
print("extend([77, 88, 77]) 후의 리스트 : %s" %my_lis)
# 'count'를 사용하여 리스트 안에 특정 값(여기서는 77)이 몇 개 있는지 세어봅니다.
# 이 경우 77은 두 번 나타나므로, 77의 개수는 2가 됩니다.
print("77값의 개수 : %d" %my_lis.count(77))
2차원 리스트
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 빈 리스트 'lis1'과 'lis2'를 만듭니다. 'lis1'은 내부 리스트로, 'lis2'는 2차원 리스트를 만들기 위한 바깥 리스트입니다.
lis1 = []
lis2 = []
# 'value'를 1로 시작합니다. 이 값은 리스트에 순서대로 채워 넣을 숫자입니다.
value = 1
# 바깥쪽 반복문: 'lis2'의 각 행에 해당하는 리스트를 만듭니다. 총 3개의 행이 만들어집니다.
for i in range(0,3):
# 안쪽 반복문: 각 행에 4개의 열 값을 채웁니다. 이 때 'lis1' 리스트에 숫자를 추가합니다.
for k in range(0, 4):
lis1.append(value)
value += 1 # 다음 숫자를 위해 'value'를 1 증가시킵니다.
# 안쪽 반복문이 끝나면, 'lis1'을 'lis2'에 추가합니다. 이로써 2차원 리스트의 한 행이 완성됩니다.
lis2.append(lis1)
lis1 = [] # 'lis1'을 다시 비워서 새로운 행을 위한 준비를 합니다.
# 2차원 리스트 'lis2'의 내용을 출력합니다.
# 바깥쪽 반복문은 행을, 안쪽 반복문은 열을 나타냅니다.
for i in range(0, 3):
for k in range(0, 4):
# '%3d'는 숫자를 출력할 때 3자리를 사용하라는 의미입니다. 'end=" "'는 숫자 사이에 공백을 두고 같은 줄에 출력하라는 의미입니다.
print("%3d" %lis2[i][k], end=" ")
print("") # 한 행을 모두 출력한 후 줄바꿈을 합니다. 이로써 2차원 리스트의 모양을 갖추게 됩니다.
튜플
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 튜플(수정은 불가능 하나 전체를 삭제는 가능) , 딕셔너리
# 'tt1'이라는 이름의 튜플을 만들어요. 이 튜플 안에는 10, 20, 30이라는 세 개의 숫자가 들어 있어요.
# 튜플을 만들 때는 소괄호 ()를 사용하고, 그 안에 값을 넣어요. 여기서는 소괄호 안에 10, 20, 30을 넣었어요.
tt1 = (10, 20, 30);
# 만들어진 'tt1' 튜플을 화면에 보여줘요.
print(tt1)
# 'tt2'라는 이름의 튜플을 또 다른 방법으로 만들어요. 이번에는 소괄호를 사용하지 않고, 그냥 값들을 쉼표로 구분해요.
# 파이썬에서는 소괄호 없이 값들을 쉼표로만 구분해도 튜플로 인식해요. 그래서 'tt2'도 튜플이 되는 거예요.
tt2 = 10, 20, 30;
# 만들어진 'tt2' 튜플을 화면에 보여줘요.
print(tt2)
# 삭제
del(tt1)
del(tt2)
# 다시 선언 튜플
tt1 = (10, 20, 30, 40)
# 튜플 인덱스 0번의 값을 출력
print(tt1[0])
# 튜플 인덱스 0 + 1 + 2 값을 출력
print(tt1[0] + tt1[1] + tt1[2])
딕셔너리
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
## 딕셔너리 1 ##
dic1 = {
1: 'a',
2: 'b',
3: 'c'
}
print(dic1)
dic2 = {
'a': 1,
'b': 2,
'c': 3,
}
print(dic2)
## 딕셔너리 2 ##
# 'singer'라는 빈 딕셔너리를 만듭니다. 여기에 가수에 대한 정보를 저장할 거예요.
singer = {}
# 이제 'singer' 딕셔너리에 여러 정보를 추가해볼게요.
# '이름'이라는 키에 '트와이스'라는 값을 저장해요.
singer['이름'] = '트와이스'
# '구성원 수'라는 키에 9라는 값을 저장해요. 트와이스는 구성원이 9명이에요.
singer['구성원 수'] = 9
# '데뷔'라는 키에는 그들이 어떻게 데뷔했는지에 대한 정보인 '서바이벌 식스틴'을 저장해요.
singer['데뷔'] = '서바이벌 식스틴'
# '대표곡'이라는 키에는 'SIGNAL'이라는 값을 저장해요. 'SIGNAL'은 트와이스의 유명한 노래 중 하나예요.
singer['대표곡'] = 'SIGNAL'
# 이제 딕셔너리에 저장된 모든 정보를 출력해볼게요.
# 'singer.keys()'는 딕셔너리에 있는 모든 키를 가져옵니다.
# 우리는 이 키들을 사용해서 각 정보(값)를 출력할 거예요.
for k in singer.keys():
# '%s -- > %s'는 출력 형식을 정해주는데, 왼쪽은 키를, 오른쪽은 그 키에 해당하는 값을 출력하라는 의미예요.
print('%s -- > %s' %(k, singer[k]))
문자
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
## 슬라이싱 ##
# 웬만하면 큰따옴, But 작은도 가능 둘 다 문자열.
aa = [10, 20, 30, 40, 50]
print(aa[0])
print(aa[1:3])
print(f"{aa[3:]}\n")
ss = "파이썬최고"
print(ss[0])
print(ss[1:3])
print(ss[3:])
# ---------------------------------------------
## 문자열 개념 ##
ss = '파이썬' + '최고'
print(ss)
# 파이썬 글을 3번
ss = '파이썬' * 3
print(ss)
# ss의 글자 수를 출력 len은 1부터 시작
ss = '파이썬abcd'
print(len(ss))
# ---------------------------------------------
## 문자열 개념 2 ##
ss = '파이썬짱!'
# ss 문자열 변수의 길이를 sslen에 저장
sslen = len(ss)
# 0부터 4까지 반복
for i in range(0, sslen):
# ss[1], ss[2] 이런식으로 ss의 안의 문자를 하나 가지고 오고 $를 붙여줌
# end는 한 번에 for문의 print를 출력 ""이니까 띄어쓰기 없이
print(ss[i] + '$', end = "")
# ---------------------------------------------
## 문자열 개념 3 ##
ss = '파이썬은완전재미있어요'
# ss 문자열 변수의 길이를 sslen에 저장 (11)
sslen = len(ss)
for i in range(0, sslen-1, 2):
# if i % 2 == 0:
# print(ss[i], end = "")
# else:
# print('#', end = "")
print(ss[i] + "#", end = "")
print(ss[-1], end = " ")
# ---------------------------------------------
## 문자 기본함수 ##
ss = "Python is Easy. 그래서 programing이 재미있습니다. ^^"
print(ss.upper())
print(ss.lower())
print(ss.swapcase())
print(ss.title())
# ---------------------------------------------
## 문자열 찾기 ##
# 문자열 'ss'를 선언합니다. 이 문자열에는 여러 문장이 포함되어 있습니다.
ss = '파이썬 공부는 즐겁습니다. 물론 모든 공부가 다 재미있지는 않죠. ^^'
# 'count' 함수를 사용하여 'ss'에서 '공부'라는 단어가 몇 번 나타나는지 셉니다.
print(ss.count('공부')) # '공부'가 2번 나타나므로 2를 출력합니다.
# 'find'와 'rfind' 함수를 사용하여 '공부'라는 단어가 처음으로 나타나는 위치와 마지막으로 나타나는 위치를 찾습니다.
print(ss.find('공부'), ss.rfind('공부'), ss.find('공부', 5), ss.find('없다'))
# 'find'는 왼쪽에서부터 찾아 첫 번째로 '공부'를 찾은 위치를, 'rfind'는 오른쪽에서부터 찾아 첫 번째로 '공부'를 찾은 위치를 출력합니다.
# 'find'의 두 번째 사용 예에서는 5번째 문자부터 '공부'를 찾기 시작하므로, 두 번째 '공부'의 위치를 출력합니다.
# 'find'로 '없다'라는 단어를 찾으려 하면, 이 단어가 문자열에 없기 때문에 -1을 출력합니다.
# 'index'와 'rindex' 함수도 'find'와 'rfind'와 비슷하지만, 찾으려는 단어가 문자열에 없으면 오류를 발생시킵니다.
print(ss.index('공부'), ss.rindex('공부'), ss.index('공부', 5))
# 여기서는 '공부'라는 단어가 있으므로, 'find'와 동일한 값을 출력하지만, 찾으려는 단어가 없으면 프로그램이 오류를 내며 멈춥니다.
# 'startswith'와 'endswith' 함수는 문자열이 특정 단어로 시작하거나 끝나는지 확인합니다.
print(ss.startswith('파이썬'), ss.startswith('파이썬', 10), ss.endswith('^^'))
# 첫 번째 'startswith'는 문자열이 '파이썬'으로 시작하는지 확인하므로 True(참)을, 두 번째 'startswith'는 10번째 문자부터 '파이썬'으로 시작하는지 확인하므로 False(거짓)을 출력합니다.
# 'endswith'는 문자열이 '^^'로 끝나는지 확인하므로 True를 출력합니다.
기본 함수
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#### 함수의 개념 ####
# 함수 선언 부분 #
# 'plus'라는 이름의 함수를 정의합니다. 이 함수는 두 개의 매개변수 'v1'과 'v2'를 받아서, 이 두 값을 더한 결과를 반환합니다.
def plus(v1, v2):
result = 0 # 'result'라는 변수를 선언하고 0으로 초기화합니다. 이 변수는 두 매개변수의 합을 저장할 임시 변수입니다.
result = v1 + v2 # 'v1'과 'v2'의 값을 더한 후, 그 결과를 'result' 변수에 저장합니다.
return result # 'result' 변수에 저장된 합계를 함수의 결과로 반환합니다.
# 변수 선언 부분 #
hap = 0 # 'hap'이라는 이름의 변수를 선언하고 0으로 초기화합니다. 이 변수는 함수의 결과값을 저장할 변수입니다.
# 메인 코드 부분 #
# 'plus' 함수를 호출하면서 100과 200을 매개변수로 전달합니다. 함수의 반환값, 즉 100과 200을 더한 결과를 'hap' 변수에 저장합니다.
hap = plus(100, 200)
# 'hap' 변수에 저장된 값을 사용하여 결과를 출력합니다. 여기서는 100과 200의 합인 300이 출력됩니다.
print("100과 200의 plus() 함수 결과는 %d" %hap)
# ---------------------------------------------
#### map ####
# 함수명에 대입
# 'before' 리스트에 문자열 형태로 연도, 월, 일이 저장되어 있습니다.
before = ['2019', '12', '31']
# 'map' 함수를 사용하여 'before' 리스트의 각 요소를 정수로 변환합니다. 'int' 함수는 문자열을 정수로 변환합니다.
# 'map' 함수는 리스트의 각 요소에 지정된 함수를 적용한 결과를 map 객체로 반환합니다. 'list' 함수를 사용하여 이를 리스트로 변환합니다.
after = list(map(int, before))
# 변환된 리스트 'after'를 출력합니다. 이제 'after'에는 정수 형태의 [2019, 12, 31]이 저장되어 있습니다.
print(after)
# ---------------------------------------------
#### 함수의 형식 ####
## 함수 선언 부분 ##
# 'calc'라는 이름의 함수를 선언합니다. 이 함수는 세 개의 매개변수를 받습니다: v1, v2, 그리고 op.
def calc(v1, v2, op):
# result 변수를 0으로 초기화합니다. 이 변수는 연산의 결과를 저장하기 위한 것입니다.
result = 0
# op 매개변수에 따라 다른 연산을 수행합니다.
if op == '+':
result = v1 + v2
elif op == '-':
result = v1 - v2
elif op == '*':
result = v1 * v2
elif op == '/':
result = v1 / v2
# 연산의 결과를 반환합니다.
return result
## 변수 선언 부분 ##
# 결과를 저장할 변수 res를 0으로 초기화합니다.
res = 0
# 연산에 사용될 두 숫자와 연산자를 저장할 변수를 초기화합니다.
var1, var2, oper = 0, 0, ""
## 메인 코드 부분 ##
# 사용자로부터 연산자를 입력받습니다.
oper = input("계산을 입력하세요(+,-,*,/): ")
# 사용자로부터 첫 번째 숫자를 입력받습니다.
var1 = int(input("첫 번째 수를 입력하세요: "))
# 사용자로부터 두 번째 숫자를 입력받습니다.
var2 = int(input("두 번째 수를 입력하세요: "))
# 입력받은 연산자와 숫자를 사용하여 calc 함수를 호출하고, 그 결과를 res 변수에 저장합니다.
res = calc(var1, var2, oper)
# 계산 결과를 출력합니다.
print("## 계산기: %d %s %d = %d" % (var1, oper, var2, res))
# ---------------------------------------------
#### 함수 형식2 ####
# 기능 추가 : 숫자1, 연산자, 숫자2 순서로 입력받기
# 제곱 연산자 추가
# 0으로 나누려고 하면 메시지를 출력하고 계산되지 않도록 함
# 메인 코드 부분에 if ~ else 문을 활용
## 함수 선언 부분 ##
# 'calc'라는 이름의 함수를 선언합니다. 이 함수는 세 개의 매개변수를 받습니다: v1, v2, 그리고 op.
def calc(v1, v2, op):
# result 변수를 0으로 초기화합니다. 이 변수는 연산의 결과를 저장하기 위한 것입니다.
result = 0
# op 매개변수에 따라 다른 연산을 수행합니다.
if op == '+':
result = v1 + v2
elif op == '-':
result = v1 - v2
elif op == '*':
result = v1 * v2
elif op == '/':
result = v1 / v2
elif op == '**':
result = v1 ** v2
# 연산의 결과를 반환합니다.
return result
## 변수 선언 부분 ##
# 결과를 저장할 변수 res를 0으로 초기화합니다.
res = 0
# 연산에 사용될 두 숫자와 연산자를 저장할 변수를 초기화합니다.
var1, var2, oper = 0, 0, ""
## 메인 코드 부분 ##
# 사용자로부터 첫 번째 숫자를 입력받습니다.
var1 = int(input("첫 번째 수를 입력하세요: "))
# 사용자로부터 연산자를 입력받습니다.
oper = input("계산을 입력하세요(+,-,*,/): ")
# 사용자로부터 두 번째 숫자를 입력받습니다.
var2 = int(input("두 번째 수를 입력하세요: "))
# 입력받은 연산자와 숫자를 사용하여 calc 함수를 호출하고, 그 결과를 res 변수에 저장합니다.
if oper == '/' and var2 == 0:
print('0으로 나누면 안됨')
else:
res = calc(var1, var2, oper)
# 계산 결과를 출력합니다.
print("## 계산기: %d %s %d = %d" % (var1, oper, var2, res))
지역 vs 전역
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#### 지역 변수와 전역 변수 ####
## 함수 선언 부분 ##
def func1():
a = 10 # 지역 변수
print("func1()에서 a값 %d" %a)
def func2():
print("func2()에서 a값 %d" %a)
## 변수 선언 부분 ##
a = 20 # 전역 변수
## 메인 코드 부분 ##
func1()
func2()
# ---------------------------------------------
# global 예약어
#### 지역 변수와 전역 변수 2 ####
## 함수 선언 부분 ##
def func1():
global a
a = 10 # 지역 변수
print("func1()에서 a값 %d" %a)
def func2():
print("func2()에서 a값 %d" %a)
## 변수 선언 부분 ##
a = 20 # 전역 변수
## 메인 코드 부분 ##
func1()
func2()
함수
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#### 반환값이 없는 함수 ####
## 함수 선언 부분 ##
# func1 함수는 'result'라는 지역 변수를 가지고 있으며, 이 변수에 100이라는 값을 할당한 후, 이 값을 반환합니다.
def func1():
result = 100
return result
# func2 함수는 간단히 문자열을 출력만 하고, 별도의 값을 반환하지 않습니다. 함수에서 return 문이 없거나 return만 적혀있으면, 실제로는 None을 반환하지만, 주로 '반환값이 없다'고 표현합니다.
def func2():
print("반환값이 없는 함수 실행")
## 변수 선언 부분 ##
# 'hap'이라는 변수를 선언하고 0으로 초기화합니다. 이 변수는 나중에 func1 함수의 반환값을 저장하기 위해 사용됩니다.
hap = 0
## 메인 코드 부분 ##
# func1 함수를 호출하고, 반환된 값을 hap 변수에 저장합니다. func1은 100을 반환하므로, hap에는 100이 저장됩니다.
hap = func1()
# hap 변수의 값을 출력합니다. 이때, "func1()에서 돌려준 값 ==> 100"이 출력됩니다.
print("func1()에서 돌려준 값 ==> %d" % hap)
# func2 함수를 호출합니다. 이 함수는 내부에서 "반환값이 없는 함수 실행"이라는 문장을 출력하지만, 반환값은 없습니다. 따라서 이 함수 호출 후에는 변수에 값을 저장하거나 다른 연산에서 반환값을 사용할 수 없습니다.
func2()
# ---------------------------------------------
#### 반환값이 있는 함수 ####
## 함수 선언 부분 ##
def multi(v1, v2):
ret_list = [] # 반활할 리스트
res1 = v1 + v2
res2 = v1 - v2
ret_list.append(res1)
ret_list.append(res2)
return ret_list
## 변수 선언 부분 ##
my_list = []
hap, sub = 0, 0
## 메인 코드 부분 ##
my_list = multi(100, 200)
print(my_list)
hap = my_list[0]
sub = my_list[1]
print("multi()에서 돌려준 값 ==> %d, %d" % (hap, sub))
# ---------------------------------------------
#### 매개변수 개수를 지정해 전달 ####
## 함수 선언 부분 ##
# para2_func 함수는 두 개의 매개변수(v1, v2)를 받아서, 이 둘을 더한 값을 반환합니다.
def para2_func(v1, v2):
result = 0 # 결과를 저장할 변수 result를 0으로 초기화합니다.
result = v1 + v2 # v1과 v2를 더한 값을 result에 저장합니다.
return result # result 값을 함수의 호출부로 반환합니다.
# para3_func 함수는 세 개의 매개변수(v1, v2, v3)를 받아서, 이 세 값을 모두 더한 값을 반환합니다.
def para3_func(v1, v2, v3):
result = 0 # 결과를 저장할 변수 result를 0으로 초기화합니다.
result = v1 + v2 + v3 # v1, v2, v3를 모두 더한 값을 result에 저장합니다.
return result # result 값을 함수의 호출부로 반환합니다.
## 변수 선언 부분 ##
# hap 변수를 선언하고 0으로 초기화합니다. 이 변수는 함수 호출 결과를 저장하기 위해 사용됩니다.
hap = 0
## 메인 코드 부분 ##
# para2_func 함수를 호출하면서 10과 20을 인자로 전달합니다. 함수의 반환값을 hap 변수에 저장합니다.
hap = para2_func(10, 20)
# hap 변수에 저장된 값을 출력합니다. 여기서는 10과 20을 더한 30이 출력됩니다.
print("매개변수가 2개인 함수를 호출한 결과 ==> %d" % hap)
# para3_func 함수를 호출하면서 10, 20, 30을 인자로 전달합니다. 함수의 반환값을 hap 변수에 저장합니다.
hap = para3_func(10, 20, 30)
# hap 변수에 저장된 값을 출력합니다. 여기서는 10, 20, 30을 모두 더한 60이 출력됩니다.
print("매개변수가 3개인 함수를 호출한 결과 ==> %d" % hap)
로또 추첨 프로그램
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 기본 패키지에 없어서 random 라이브러리를 가져와서 사용함
import random
# getNumber 함수는 1부터 45 사이의 랜덤한 숫자를 반환합니다.
# 이 함수는 로또 번호 하나를 뽑는 데 사용됩니다.
## 함수 선언 부분 ##
def getNumber():
return random.randrange(1, 46)
## 변수 선언 부분 ##
# lotto 변수는 추첨된 로또 번호를 저장하기 위한 리스트입니다.
lotto = []
# num 변수는 랜덤으로 선택된 숫자를 임시로 저장하기 위한 변수입니다.
num = 0
## 메인 코드 부분 ##
print("** 로또 추첨을 시작합니다. ** \n")
# 로또 번호가 6개가 될 때까지 반복합니다.
while True:
num = getNumber() # 랜덤 숫자 하나를 뽑습니다.
# lotto 리스트에 이미 같은 숫자가 없다면 해당 숫자를 추가합니다.
if lotto.count(num) == 0:
lotto.append(num)
# 로또 번호가 6개가 되면 반복을 종료합니다.
if len(lotto) >= 6:
break
# 추첨된 로또 번호를 출력하기 전에 정렬합니다.
print("추첨된 로또 번호 ==> ", end=" ")
lotto.sort()
# 추첨된 로또 번호를 출력합니다.
for i in range(0, 6):
print("%d " % lotto[i], end=" ")
Tkinter 라이브러리
- 기본 ```python from tkinter import *
window = Tk()
이 부분에서 화면을 구성하고 처리함
window.mainloop()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
- 화면 조작
```python
from tkinter import *
window = Tk()
# tk창의 제목설정
window.title("윈도창 연습")
# 창의 크기설정
window.geometry("500x500")
# 창의 크기 조작여부설정
window.resizable(width=FALSE, height=FALSE)
window.mainloop()
- 배치 ```python from tkinter import *
Tkinter 모듈을 불러와서 GUI 프로그램을 만들 준비를 합니다.
window = Tk()
Tk 클래스의 인스턴스를 생성하여 기본 윈도우를 만듭니다.
첫 번째 라벨 생성. 텍스트만 지정합니다.
label1 = Label(window, text=”COOKBOOK, 데이터분석을”)
두 번째 라벨 생성. 폰트와 글자색(foreground)를 지정합니다.
label2 = Label(window, text=”열심히”, font=(“궁서체”, 30), fg=”blue”)
세 번째 라벨 생성. 배경색(background), 크기(width, height), 텍스트 정렬(anchor)을 지정합니다.
label3 = Label(window, text=”공부 중입니다.”, bg=”magenta”, width=20, height=5, anchor=SE)
pack() 메서드를 사용하여 각 라벨을 윈도우에 순서대로 배치합니다.
label1.pack() label2.pack() label3.pack()
window.mainloop()
mainloop()를 호출하여 창이 닫힐 때까지 프로그램이 종료되지 않도록 합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
- gif 삽입 (png나 jpg가 안들어감, PIL 라이브러리를 이용하거나 canvas를 만들어서 사용해야함)
```python
from tkinter import *
window = Tk()
# photo = PhotoImage(file="gif/dog.gif")
photo1 = PhotoImage(file="GIF/dog.gif")
photo2 = PhotoImage(file="GIF/dog.gif")
label1 = Label(window, image=photo1)
label2 = Label(window, image=photo2)
label1.pack(side=LEFT)
label2.pack()
window.mainloop()
- 버튼 1 ```python from tkinter import * window = Tk()
text 설정 fb는 폰트 컬러, 버튼 클릭시 프로그램이 종료
button1 = Button(window, text=”파이썬 종료”, fg = “red”, command=quit)
button1.pack() window.mainloop()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
- 버튼 2
```python
from tkinter import *
from tkinter import messagebox
# 함수 선언 부분 ##
def myFunc():
messagebox.showinfo("강아지 버튼", "강아지가 귀엽죠? ^^")
# 메인 코드 부분 ##
window = Tk()
window.title("강아지버튼")
photo = PhotoImage(file= "gif/dog2.gif")
butto1 = Button(window, image=photo, command= myFunc)
butto1.pack()
window.mainloop()
- 체크박스 ```python
Tkinter 모듈과 Tkinter의 messagebox 모듈을 임포트합니다. 이를 통해 GUI 요소를 생성하고 메시지 박스를 띄울 수 있습니다.
from tkinter import * from tkinter import messagebox
Tk 객체를 생성하여 메인 윈도우를 초기화합니다. 이 window 객체가 애플리케이션의 메인 프레임으로 사용됩니다.
window = Tk()
myFunc 함수는 체크버튼의 상태에 따라 다른 메시지를 보여주는 기능을 수행합니다.
def myFunc(): # chk 변수(체크버튼의 상태를 나타내는 IntVar 객체)의 값에 따라 조건을 검사합니다. # get() 메서드를 사용하여 chk의 값을 가져오지만, 여기서는 실수로 ‘get’으로 적혀 있어서 함수가 아닌 메서드 객체를 참조하게 됩니다. # 따라서 이 부분은 ‘chk.get()’으로 수정되어야 합니다. if chk.get() == 0: # 체크버튼이 꺼진 상태(0)일 때 “체크버튼이 꺼졌어요.”라는 메시지를 보여줍니다. messagebox.showinfo(“”,”체크버튼이 꺼졌어요.”) else: # 체크버튼이 켜진 상태(1)일 때 “체크버튼이 켜졌어요.”라는 메시지를 보여줍니다. messagebox.showinfo(“”, “체크버튼이 켜졌어요.”)
체크버튼의 상태를 저장할 IntVar 객체를 생성합니다. 이 변수는 체크버튼이 켜져 있는지(1) 혹은 꺼져 있는지(0)를 나타냅니다.
chk = IntVar()
체크버튼을 생성하고, ‘text’ 매개변수를 통해 버튼 위에 표시될 텍스트를 지정합니다.
‘variable’ 매개변수에는 체크버튼의 상태를 저장할 IntVar 객체(chk)를, ‘command’ 매개변수에는 체크버튼 클릭 시 호출될 함수(myFunc)를 지정합니다.
cb1 = Checkbutton(window, text=”클릭하세요”, variable=chk, command=myFunc)
pack 메서드를 사용해 체크버튼을 메인 윈도우에 배치합니다.
cb1.pack()
Tkinter 이벤트 루프를 시작합니다. 이를 통해 생성된 윈도우가 화면에 나타나고, 사용자의 입력을 기다립니다.
window.mainloop()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
- 라디오박스
```python
from tkinter import *
window = Tk()
## 함수 선언 부분 ##
def myFunc():
if var.get() == 1:
label1.configure(text = "파이썬")
elif var.get() == 2:
label1.configure(text = "C++")
else:
label1.configure(text="Java")
## 메인 코드 부분 ##
# 함수를 호출함 버튼 클릭시 그 함수는 get을 해서 각 1,2,3인지 아닌지 확인 후
# 거기에 맞는 텍스트로 변경을 해버림 configure
var = IntVar()
rb1 = Radiobutton(window, text="파이썬", variable=var, value=1, command=myFunc)
rb2 = Radiobutton(window, text="C++", variable=var, value=2, command=myFunc)
rb3 = Radiobutton(window, text="Java", variable=var, value=3, command=myFunc)
label1 = Label(window, text= "선택한 언어 : ", fg = "red")
rb1.pack()
rb2.pack()
rb3.pack()
label1.pack()
window.mainloop()
mainMenu = Menu(window) window.config(menu=mainMenu)
fileMenu = Menu(mainMenu) mainMenu.add_cascade(label=”파일”, menu= fileMenu) fileMenu.add_command(label=”열기”) fileMenu.add_separator() fileMenu.add_command(label=”종료”)
window.mainloop()
좀 더 심화
from tkinter import * from tkinter import messagebox
mainMenu = Menu(window) window.config(menu=mainMenu)
함수 선언 부분
‘열기’ 메뉴를 클릭했을 때 실행될 함수입니다. 정보 메시지 박스를 표시합니다.
def func_open(): messagebox.showinfo(“메뉴선택”, “열기 메뉴를 선택함”)
‘종료’ 메뉴를 클릭했을 때 실행될 함수입니다. 프로그램을 종료합니다.
def func_exit(): window.quit() # 메인 이벤트 루프를 종료합니다. window.destroy() # 윈도우를 파괴하여 모든 위젯을 종료합니다.
메인 코드 부분
Tk 객체를 생성하여 GUI 윈도우를 초기화합니다.
window = Tk()
메인 메뉴를 생성하고 윈도우에 설정합니다.
mainMenu = Menu(window) window.config(menu=mainMenu)
‘파일’ 드롭다운 메뉴를 생성하고 메인 메뉴에 추가합니다.
fileMenu = Menu(mainMenu) mainMenu.add_cascade(label=”파일”, menu=fileMenu)
‘열기’ 메뉴 항목을 추가하고, 클릭 시 func_open 함수가 호출되도록 설정합니다.
fileMenu.add_command(label=”열기”, command=func_open)
메뉴 항목 사이에 구분선을 추가합니다.
fileMenu.add_separator()
‘종료’ 메뉴 항목을 추가하고, 클릭 시 func_exit 함수가 호출되도록 설정합니다.
fileMenu.add_command(label=”종료”, command=func_exit)
Tkinter 이벤트 루프를 시작하여 윈도우를 실행하고 사용자 입력을 기다립니다.
window.mainloop()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 과제
## 3장 (연습문제)
- 2번 :
(1) 0876 (2) CookBook (최소한 5칸 차지) (3) 123
- 15번 :
삼향연산자 (res = '홀수' if num % 2 == 0 else '짝수')
만약 true 면 '홀수'가 res에 들어가고 그게 아니면 '짝수'
- 20번 :
( for 문을 사용해 3333부터 9999까지 숫자 중 1234의 배수가
아닌 수의 합계 구하되, 합이 100000넘기 직전까지만 구하는 코드 작성 )
```python
# 변수 초기화
num = 0
# 3333부터 9999까지 반복
for i in range(3333, 10000):
# 만약 현재 숫자가 1234의 배수가 아니고, 현재까지의 합계가 100000을 넘지 않는다면
if i % 1234 != 0 and num + i < 100000:
num += i # 현재 숫자를 합계에 더함
# for 반복문 처음으로 돌아감
continue
else:
break # 100000을 넘기거나 1234의 배수를 만나면 반복 중단
print(num) # 계산된 합계 출력
- 21번 :
( 3부터 100까지의 숫자 중 소수 출력 프로그램)1 2 3 4 5 6 7 8 9
list1 = [] for i in range(3,101): num = 1 for j in range(2,i): if i % j == 0: num = 0 if num != 0: list1.append(i) print(' '.join(map(str,list1)))
3장 (응용예제)
메인 코드 부분
if name ==”main”: year = int(input(“연도를 입력하세요 : “)) # year이 4와 나눠서 0이면서 100으로 나눠서 0이 아니거나 400으로 나눠서 0이라면 그것은 윤년 if ((year % 4 == 0) and (year % 100 != 0)) or (year % 400 == 0): print(“%d년은 윤년입니다.” %year) else: print(“%d년은 윤년이 아닙니다.” %year)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
- 하트출력 :
``` python
# 변수 선언 부분
i, k, heartNum = 0, 0, 0
numStr, ch, heartStr = "", "", ""
# 메인 코드 부분
if __name__ == "__main__":
# 숫자를 여러 개 입력받음
numStr = input("숫자를 여러 개 입력하세요: ")
print("")
i = 0
ch = numStr[i]
while True:
# 입력받은 숫자를 int형으로 변환
heartNum = int(ch)
# 하트 문자열 초기화
heartStr = ""
# 입력받은 숫자만큼 하트 문자열에 추가
for k in range(0, heartNum):
heartStr += "\u2665"
# 하트 문자열 출력
print(heartStr)
# 다음 숫자로 이동
i += 1
# 입력받은 숫자열의 끝에 도달하면 종료
if (i > len(numStr) - 1):
break
# 다음 숫자를 가져옴
ch = numStr[i]
4장 연습문제
12번 :
outStr += inStr[(len(inStr)-1)-i]
or
outStr += inStr[-(i+1)]15번 : ```python input_data = input() a = “” b = “” c = “” d = “” e = “”
for i in input_data: if ord(i) >= 65 and ord(i) <= 90: a += i elif ord(i) >= 97 and ord(i) <= 122: b += i elif ord(i) >= 48 and ord(i) <= 57: c += i else: if ord(i) >= 127: d += i elif ord(i) == 32: continue else: e += i print(“대문자: %s \n소문자: %s \n숫자: %s \n한글: %s \n기타: %s” %(a, b, c, d, e))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
더 효율적인 코드가 있는데 이렇게 해버림...ㅠ
- 16번 :
![alt text](./assets/img/posts/python_img/class3-03-26.png)
이건 답이 없는거같은데.. 현재까지는 .. 교수님께 물어봐야.. ㅜ
## 4장 응용예제
- 16진수정렬 :
```python
import random
# ## 변수 선언 부분 ##
data = []
i, k = 0, 0
# ## 메인 코드 부분 ##
if __name__ == "__main__":
for i in range(0, 10): # 원본의 데이터 10개 생성
tmp = hex(random.randrange(0, 100000))
data.append(tmp)
print('정렬 전 데이터 : ', end='')
[print(num, end=' ') for num in data]
for i in range(0, len(data) - 1):
for k in range(i + 1, len(data)):
if int(data[i], 16) > int(data[k], 16):
tmp = data[i]
data[i] = data[k]
data[k] = tmp
print('\n정렬 후 데이터 : ', end='')
[print(num, end=' ') for num in data]
- 문자와 숫자가 섞인 데이터 정렬하기 : ```python import random
## 함수 선언 부분
def getNumber(strData): numStr = ‘’ for ch in strData: if ch.isdigit(): numStr += ch return int(numStr)
## 정렬 부분 선언 부분
data = [] i, k = 0, 0
## 메인 코드 부분
if name == “main”: for i in range(0, 10): # 원본의 데이터를 10개 생성 tmp = hex(random.randrange(0, 100000)) tmp = tmp[2:] # 앞의 ‘0x’를 제거 data.append(tmp)
1
2
3
4
5
6
7
8
9
10
11
12
print('정렬 전 데이터 : ', end='')
[print(num, end=' ') for num in data]
for i in range(0, len(data) - 1):
for k in range(i + 1, len(data)):
if getNumber(data[i]) > getNumber(data[k]):
tmp = data[i]
data[i] = data[k]
data[k] = tmp
print('\n정렬 후 데이터 : ', end='')
[print(num, end=' ') for num in data] ```