# 튜플
# 만들기
test_tuple = tuple()
test_tuple2 = ( )
test = (1, 2, 3, 4)
type(test)
>>> tuple
# ? 값이 하나인 튜플
# 만들때 튜플은 괄호 여부와 상관 없이 , 여부를 묶어서 사용한다.
test_tuple3 = (1, )
test_tuple3 = 1,
len(test_tuple3)
# 값 읽기
type(test_tuple3)
>>> tuple
# 변경
# 튜플은 값 변경이 불가능 하다.
# 값 추가 삭제가 불가능 하다.
# 용도 자체가 보통 매개변수로 많이 쓰이기 때문이다.
test[2] =5
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Input In [11], in <cell line: 1>()
----> 1 test[2] =5
TypeError: 'tuple' object does not support item assignment
바구니에서 변수명[index]는 변수 처럼 사용 할 수 있다.
변수의 사용처
1. 데이터의 저장
2. 연산의 피 연산자
3. 함수의 매개변수
test[2] + test[1]
>>> 5
# 추가
test_set1 = {1, 2, 3}
test_set1.add(6)
test_set1
{1, 2, 3, 6}
# 삭제
test_set1.remove(2)
test_set1
{1, 3, 6}
# list에서 중복되는 값을 set을 이용해서 제거해보자
test_list = [1,2,3,4,1,2,3,4,2,2,2,2,2,2,2]
number =2
number_count = test_list.count(number)
for _ in range(number_count - 1):
test_list.remove(number)
test_list
[1, 3, 4, 1, 3, 4, 2]
# 셋 : 집합
# 셋은 중복이 없어야 하는 경우에 사용한다.
# 만들기
test_set = set()
type(test_set)
set
test_set1 = {1, 2, 3}
type(test_set1)
set
# 값 읽기
- 순서가 없어서 인덱싱 할 수 없다.
# 추가
test_set.add(4)
test_set
{1, 2, 3, 4}
# 삭제
test_set.remove(2)
test_set
{1, 3, 4}
# 리스트의 중복된 것 들을 제거해보자!
test_list = [1,2,3,4,1,2,3,4,2,2,2,2,2,2,2]
number =2
number_count = test_list.count(number)
for _ in range(number_count - 1):
test_list.remove(number)
test_list
[1, 3, 4, 1, 3, 4, 2]
list(set(test_list))
[1, 2, 3, 4]
바구니 : 하나의 변수에 여러개를 담고 싶을 때
리스트(배열) : 가장 기본적인 바구니
딕셔너리 : 사전형 키 : 값 쌍으로 구성된
튜플 : 깂들의 연속(리스트랑 비슷) 단, 수정이 불가능
셋 : 집합(중복이 불가능)
# randint 와 set을 이용해서
# 1~45 사이의 숫자를 랜덤 하고 중복없이 6개를 뽑는 코드를 작성하시오
import random as rnd
numbers = set()
# 셋에 들어있는 요소의 갯수가 6개가 될 떄까지 뽑는다
while len(numbers) < 6 :
numbers .add(rnd.randint(0,46))
numbers
{11, 15, 16, 23, 28, 37}
명령어 = 함수(Function) = Method
명령어 - 함수(Function) - Method
단독 명령어 print - 함수(function)
인스턴스 명령어 list.remove - Method
- 명령어의 형태가 다양하다
- 명령어 사용하는 법 = 함수를 사용하는법
- function을 call한다 = 함수를 사용한다.
- 함수는 긴 로직을 하나의 기능으로 만들어 쓰려고 사용한다.
1. 복잡한 코드를 단순한 형태로 바꾸고 싶어서.
2. 여러번 재사용하고 싶어서. - 함수는 입력 - 처리 - 출력 이있는 기능 상자라고 이야기한다.
- 함수는 작은 단위의 프로그램
- 함수는 처리는 필수, 입력이나 출력은 없어도 된다.
#명령어 만드는 법
def 이름():
내용
# say_hello라는 이름을 가진 함수(명령어)를 만들고
# say_hello를 호출(사용)하면 "hello"라는 메세지가 화면에 출력 되도록 하시오.
def say_hello():
print("hello")
say_hello()
hello
# 해당 함수를 실행하면
# 사용자에게 정수 하나를 입력받고
# 1 ~ 해당정수까지 1씩 증가하면서 출력하는 함수를 작성하시오.
def Plus_int():
number = input("정수를입력하세요 : ")
number = int(number)
sum = 0
for x in range(1,number+1,1):
print(x)
Plus_int()
정수를입력하세요 : 12
1
2
3
4
5
6
7
8
9
10
11
12
def print_num():
input_num = input("정수를 입력하세요 : ")
end_num = int(input_num) + 1
for num in range(1,end_num):
print(num)
print_num( )
정수를 입력하세요 : 12
1
2
3
4
5
6
7
8
9
10
11
12
# 함수에 추가로 전달하는 옵션 - 매개변수, 파라매터, 아규먼트
# 내가 어떤 함수의 옵션을 부를 떄는 파라메터
# 함수가 자신의 옵션을 칭할 떄는 아규먼트
print(?)
print(?,?,?,?)
# 함수의 입, 출력을 명시하는 경우
# 이름을 **매개변수**로 입력 받아서
# 안녕하세요 [이름]님 이라고 **리턴**하는 함수를 작성한다.
def say_hello(name):
print(f"안녕하세요 {name}님")
say_hello("JIN")
>>> 안녕하세요 JIN님
# name은 함수 안에서만 쓰이는 파라미터이다
test = "phlip"
say_hello(test)
# 매개변수에 기본값을 지정하면, 그 순간 뒤에 따라오는 모든 매개변수는 기본값을
# 설정 해주어야 한다. 안그러면 오류가 난다.
# 입력이 있고 처리가 있다.
def Calc_bmi(Height=170,Weight=60): # = 170 은 기본값
Meterheight = Height/100
BMI = Weight / (Meterheight ** 2)
print(BMI)
Calc_bmi()
20.761245674740486
# 입력이 있고, 처리가 있고, 출력(처리 결과, 리턴값)있다.
def calc_bmi(weight=70, height=160):
bmi = weight / (height/100)**2
return bmi
result_bmi = calc_bmi
# 출력된 값을 사용하는 방법
result_bmi = calc_bmi()
print("최종 BMI는", result_bmi, "입니다")
최종 BMI는 27.343749999999996 입니다
a = 67.5
b = 180.3
calc_bmi(a,b)
>>> 20.76406211499968
calc_bmi(70)
>>> 24.221453287197235
# 두개의 숫자를 전달(입력)받아서
# 두 숫자의 합을 결과로 돌려주는 함수를 작성하시오
def sum(num1=1, num2=1):
sum= num1 + num2
return sum
sum(12,45)
57
기명 매개변수, 가변 매개변수, 가변 키워드 매개변수
# 가변 매개변수
print(1, "a", 3.14) <---- 매개변수의 갯수가 고정되어있지 않은 것
# 가변 키워드 매개변수
print("a",end="1") --- > end 가변 키워드 매개변수, 키워드를 지정함
# 가변 매개변수 * 사용
def total (* numbers):
print(numbers)
total("a",3,3.14)
>>> ('a', 3, 3.14)
# 키워드 매개변수 **
# 키워드 매개변수
def key_test(**test):
print(test)
key_test()
>>> { }
key_test(a=7, b=8, say='hello', name='jake')
{'a': 7, 'b': 8, 'say': 'hello', 'name': 'jake'}
# Bingo Game
# 1~25 사이의 정수를 모두 사용해서
# 랜덤하게 5x5 빙고 판을 구성하는 프로그램을 작성하시오.
# 5x5 숫자들을 화면에 출력하면 됩니다.
def gen_bingo():
numbers = list(range(1,26))
import random as rnd
rows = []
for _ in range(5):
row = []
for _ in range(5):
index = rnd.randint(0,len(numbers)-1)
number = numbers.pop(index)
row.append(number)
rows.append(row)
print(rows) --> 함수로 만들어 변수를 이용하려면 return rows로 놓아야함
[[2, 7, 22, 21, 20], [13, 12, 11, 10, 6], [19, 8, 24, 4, 23], [25, 5, 14, 17, 18], [3, 16, 15, 9, 1]]
# game 변수에 담긴 숫자 중에서
# 원하는 숫자를 0으로 바꾸기
# 1. 어느 줄에 해당 숫자가 있는지 찾기
# 2. 그 줄에 어느 인덱스에 해당 숫자가 있는지 찾기
# 3. 해당 칸의 숫자를 0으로 바꾸기
def set_0(game, search_num):
for row in game:
if search_num in row:
index = row.index(search_num)
row[index] = 0
set_0(game, 19)
[[22, 17, 24, 0, 16], [20, 12, 14, 13, 15], [9, 5, 4, 21, 0], [25, 6, 10, 7, 23], [18, 8, 2, 11, 3]]
# 한 행(row)이 빙고인지?
for row in game:
if row.count(0) == 5:
print("1 row bingo")
# 한 열(colunm) 이 빙고인지?
for column in range(5):
row_count = 0
for row in game:
if row[column] == 0:
row_count+=1
if row_count == 5:
print("1 row bingo")
# 대각선 빙고는 어떻게?
count = 0
for index in range(5):
if game[index][index] == 0
count += 1
if count == 5:
print("대각선 bingo")
count = 0
for index in range(5):
if game[index][4-index] == 0
count += 1
if count == 5:
print("대각선 bingo")
# 총빙고 갯수는?
if count == 5:
print("대각선 bingo")
print("총 빙고 갯수", bingo_count)
# 빙고만들기, 빙고 갯수 측정, 총빙고 갯수 측정하는 함수 3가지 만들자!
def gen_bingo():
numbers = list(range(1,26))
import random as rnd
rows = []
for _ in range(5):
row = []
for _ in range(5):
index = rnd.randint(0,len(numbers)-1)
number = numbers.pop(index)
row.append(number)
rows.append(row)
return rows
def set_0(game, search_num):
for row in game:
if search_num in row:
index = row.index(search_num)
row[index] = 0
break
else:
print("이미 한번 찾은 숫자입니다.")
def get_bingocount(game):
bingo_count = 0
# 한줄이 빙고인지?
for row in game:
if row.count(0) == 5:
print("1 row bingo")
bingo_count += 1
# 한 컬럼이 빙고인지?
for column in range(5):
row_count = 0
for row in game:
if row[column] == 0:
row_count+=1
if row_count == 5:
print("1 column bingo")
bingo_count += 1
count = 0
for index in range(5):
if game[index][index] == 0:
count += 1
if count == 5:
print("대각선 bingo")
bingo_count += 1
count = 0
for index in range(5):
if game[index][4-index] == 0:
count += 1
if count == 5:
print("대각선 bingo")
bingo_count += 1
print("총 빙고 갯수", bingo_count)
return bingo_count
# 최종 빙고 게임 코딩
game = gen_bingo() # 원본 게임판 준비
while True:
# 맞출 숫자 하나 입력하기
number = input("숫자 : ")
number = int(number)
# 그 숫자가 있다면 0으로 체크
set_0(game, number)
# 빙고가 됐는지 확인
game_count = get_bingocount(game)
print(game) # 원본 게임판 재 출력
if game_count == 3:
print("Bingo!!!!")
break
숫자 : 1
총 빙고 갯수 0
[[5, 6, 25, 21, 10], [20, 7, 11, 0, 18], [2, 22, 12, 15, 23], [17, 4, 16, 3, 24], [8, 14, 9, 13, 19]]
숫자 : 18
총 빙고 갯수 0
[[5, 6, 25, 21, 10], [20, 7, 11, 0, 0], [2, 22, 12, 15, 23], [17, 4, 16, 3, 24], [8, 14, 9, 13, 19]]
숫자 : 3
총 빙고 갯수 0
[[5, 6, 25, 21, 10], [20, 7, 11, 0, 0], [2, 22, 12, 15, 23], [17, 4, 16, 0, 24], [8, 14, 9, 13, 19]]
숫자 : 27
이미 한번 찾은 숫자입니다.
총 빙고 갯수 0
[[5, 6, 25, 21, 10], [20, 7, 11, 0, 0], [2, 22, 12, 15, 23], [17, 4, 16, 0, 24], [8, 14, 9, 13, 19]]
파일 입출력
# 1. 파일에 저장한다라고 안한다. 파일에 출력한다.
# 2. 입출력은 굉장히 비싼 명령어다.
# 3. 파일에 대한 권한은 운영체제가 가지고 있다. --> 충돌하는 것을 막기 위해
# mode: r(읽기 전용), w(쓰기전용), a(append 기존에있는 파일에 추가/ w 쓰면 덮어쓴다)
# + : rb(바이너리 파일), rt, wb, wt,
# open(파일 경로 및 파일 이름)
# mode : r, w, a
# + : rb, rt, wb, wt
file = open('test.txt', 'w') 쓰기 모드로 파일 열기
print("Hello Sessac", file=file) print함수를 이용해 파일에 기록하기
file.write("Hello Sessac") 파일에 기록하기
file.close() 파일 닫기
file = open('test.txt', 'r')
file.read() 파일의 내용을 한꺼번에 읽기
file.readline() 파일의 내용을 한줄씩 순서대로 읽기
file.readlines() 모든 내용을 줄별로 리스트에 저장해서 준다.
file.close()
file = open('test.txt', 'r')
file.read() 파일의 내용을 한꺼번에 읽기
file.seek(0) 파일 읽기 위치를 처음으로 되돌리기
file.readline() 파일의 내용을 한줄씩 순서대로 읽기
file.seek(10)
test = file.readlines() 모든 내용을 줄별로 리스트에 저장해서 준다.
file.tell() 어디까지 읽었는지 알려준다.
file.close()
'Python > Python Programming' 카테고리의 다른 글
Python_Basic 05 (0) | 2022.07.15 |
---|---|
Chapter.01 파이썬 프로그래밍-15. Class (실습) (0) | 2022.07.12 |
Part03. Chapter.01 파이썬 프로그래밍-14. Class (0) | 2022.07.12 |
파이썬 기초 재 복습 (자료형, for, while, if, list comprehension, 함수) (0) | 2022.07.12 |
Part03 Chapter.01 파이썬 프로그래밍-13. OOP(이론) (0) | 2022.07.11 |