Post

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()
  • 메뉴바 만들기 ```python

    간단버전

    from tkinter import * from tkinter import messagebox

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장 (응용예제)

  • 윤년계산 : ```python

    변수 선언 부분

    year = 0

메인 코드 부분

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번 :
    alt text outStr += inStr[(len(inStr)-1)-i]
    or
    outStr += inStr[-(i+1)]

  • 15번 : alt text ```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] ```
This post is licensed under CC BY 4.0 by the author.