파이썬 기초
랜덤 숫자 맞추기 게임
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 프로그램 실행시 랜덤으로 1~100 사이의 숫자를 생성
# 10번의 기회가 있고, 10번 동안 숫자를 입력 받아 숫자를 맞추는 게임
# 정답이 아닐 때마다 up/down을 출력
# 정답을 맞추면 "정답"을 출력
# 10번의 기회동안 정답을 못 맟췄다면 "실패" 출력
import random
answer = random.randint(1,100)
for i in range(10):
try:
guess = int(input(f"[{i+1}번째 기회]숫자 입력:").strip())
if guess == answer:
break
elif guess > answer:
print("down")
elif guess < answer:
print("up")
except:
print("숫자를 입력해주세요")
if guess == answer:
print("성공!")
else: print("실패!")
quit(), exit()와 같은 함수로 바로 종료시켜보려 했으나, jupyter notebook환경은 파이썬을 직접 돌리지 않기 때문에 동작하지 않는다
랜덤 숫자 맞추기 게임(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
# 숫자 맞추기
# 입력값이 숫자가 아니거나 1~100 사이의 숫자가 아닐 경우
# 기회를 차감하지 않도록 변경
# 프로그램 실행시 랜덤으로 1~100 사이의 숫자를 생성
# 10번의 기회가 있고, 10번 동안 숫자를 입력 받아 숫자를 맞추는 게임
# 정답이 아닐 때마다 up/down을 출력
# 정답을 맞추면 "정답"을 출력
# 10번의 기회동안 정답을 못 맟췄다면 "실패" 출력
import random
answer = random.randint(1,100)
count = 0
while count < 10:
try:
guess = int(input(f"[{count+1}/10번째 기회]숫자 입력:"))
except:
print("숫자를 입력해주세요")
continue
if not (1 <= guess <= 100):
print("1~100 사이의 숫자를 입력해주세요")
continue
if guess == answer:
print("성공")
break
elif guess > answer:
print("down")
elif guess < answer:
print("up")
count+=1
if guess != answer:
print("실패!")
랜덤 숫자 맞추기 게임(3)
- 함수화
- 메뉴 추가
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
# 숫자 맞추기 스무고개 게임
# 메뉴를 출력하고 "게임 시작"
import random
# 게임
def start_game():
answer = random.randint(1,100)
count = 0
while count < 10:
try:
guess = int(input(f"[{count+1}/10번째 기회]숫자 입력:"))
except:
print("숫자를 입력해주세요")
continue
if not (1 <= guess <= 100):
print("1~100 사이의 숫자를 입력해주세요")
continue
if guess == answer:
print("성공")
break
elif guess > answer:
print("down")
elif guess < answer:
print("up")
count+=1
if guess != answer:
print("실패!")
# 메뉴
def print_menu():
print("====메뉴====")
print("1. 게임 시작")
print("2. 게임 종료")
while True:
print_menu()
try:
choice = int(input("메뉴 선택:"))
except:
print("숫자를 입력해주세요")
continue
if choice == 1:
print("====게임을 시작합니다====")
start_game()
elif choice == 2:
print("====게임을 종료합니다====")
break
else:print("잘못된 입력입니다")
랜덤 숫자 맞추기 게임(4)
- 성공/실패 횟수 기록 추가
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
# 숫자 맞추기 스무고개 게임
# 메뉴를 출력하고 "게임 시작"
# 사용자 이름 입력
import random
# 게임
def start_game(username, win, lose):
answer = random.randint(1,100)
count = 0
while count < 10:
try:
guess = int(input(f"[{count+1}/10번째 기회]숫자 입력:"))
except:
print("숫자를 입력해주세요")
continue
if not (1 <= guess <= 100):
print("1~100 사이의 숫자를 입력해주세요")
continue
if guess == answer:
print(f"{username}성공")
win += 1
return win, lose
elif guess > answer:
print("down")
elif guess < answer:
print("up")
count+=1
if guess != answer:
print(f"{username}실패!")
lose += 1
return win, lose
# 메뉴
def print_menu():
print()
print("====메뉴====")
print("1. 게임 시작")
print("2. 기록 보기")
print("3. 게임 종료")
# 기록보기
def show_score(username, win, lose):
print()
print(f"===={username}님의 성적====")
print(f"성공 횟수:{win}")
print(f"실패 횟수:{lose}")
# 실행
username = input("이름을 입력하세요")
win = 0
lose = 0
while True:
print_menu()
choice = input("메뉴 선택:")
if choice == '1':
print("====게임 시작====")
win, lose = start_game(username, win, lose)
elif choice == '2':
show_score(username, win, lose)
elif choice == '3':
print()
print("====게임 종료====")
break
else:
print()
print("잘못된 입력입니다")
Pandas 기초
Series, array의 특징:
- 같은 타입의 원소만 넣을 수 있다 -> 속도가 빠르다
- 다른 타입의 원소를 넣으면 object로 바뀜
Series
- 인덱스 추가 가능
1 2
ser = pd.Series([1,2,3,4], index=["a", "b", "c", "d"]) ser["a"]
조건
1
2
df_sub = df[(df.season == 1) & (df.holiday == 1)]
df_sub
그룹바이와 agg 사용법
1
df.iloc[:, [1,9]].groupby('season').agg(['sum', 'min', 'max'])
실습
1
2
3
# causal 값이 10 이상인 데이터의 season별 registered의 합계
df[df['casual']>=10][['season', 'registered']].groupby('season').sum()
결측치
df.fillna()
- null, nan값을 괄호 안 값으로 대체
1
2
# df.count의 결측치를 count의 평균으로 대체
df[['count']].fillna(df['count'].mean())
df.dropna()
- 결측치가 포함된 행 삭제
1
df.dropna()
1 2 3
# 1%의 데이터 삭제 df_sub = df.loc[df['casual'] < df['casual'].quantile(0.99)] len(df_sub)
DB에서 판다스로 불러오기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# db에서 판다스로 불러오기
import pymysql
import pandas as pd
# DB 접속
db = pymysql.connect(host="localhost", port=3306, user="root", password="peter2012!", db="sba")
cursor = db.cursor()
# 가수명, 팔로워수, 노래 제목, 앨범 명 DB에서 불러오기
sql = """
SELECT singer.name, singer.follower, song.title, song.album
FROM singer
JOIN song
ON singer.id = song.singer_id;
"""
cursor.execute(sql)
rows = cursor.fetchall()
db.close()
# 데이터를 dataframe으로 저장
df = pd.DataFrame(rows)
df.columns = ['name', 'follower', 'title', 'album']
df
1
2
# 가수별로 TOP 100에 있는 제목의 수를 출력 하여 정렬
df[['name', 'title']].groupby('name').count().sort_values(by='title', ascending=False)
numpy로 array 만들기
1
2
3
4
import numpy as np
np.zeros([5,4])
df = pd.DataFrame(np.zeros([5,4]))
df
할당표현식
1
2
3
a = []
for i in range(100):
a.append(i)
을 아래와 같이 표현할 수 있다
1
[x for x in range(100)]