일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Lv3
- 자료형
- 문자열
- 로그관리
- 튜플
- Kafka
- 불리언
- sql injection
- BFS
- Python
- Message
- elk스택
- CSRF
- programmers
- 숫자게임
- 데이터분석
- Kibana
- partition
- Elasticsearch
- Logstash
- 조건문
- 프로그래머스
- queue
- 딕셔너리
- rabbitmq
- segment
- Apache Kafka
- CORS
- topic
- XSS
Archives
- Today
- Total
dev-minchur 님의 블로그
[파이썬 기초] 클래스 본문
클래스 생성
클래스 : 설계도
속성: 클래스 내부 변수 = 클래스 내부 변수의 값
메소드 : 클래스 내부 함수 / self가 의미하는 바 grandmother 첫번째인자값에 self를 반드시
class GrandMother: # 클래스 : 설계도 family = "grandparents" # 속성: 클래스 내부 변수 = 클래스 내부 변수의 값 def print_self(self): # 메소드 : 클래스 내부 함수 / self가 의미하는 바 grandmother 첫번째 인자값에 self를 반드시 넣어줘야한다. print(self) # 거의 공식이다.
LEE = GrandMother() # 인스턴스화(객체 생성)
GrandMother.family # 속성 호출
'grandparents'
```python
# 나의 예제 #
class football :
def __init__(self,spurs = "win") :
self.spurs = spurs
def vsLiv(self) :
print("이겼습니다.")
king = football()
king.vsLiv()
이겼습니다.
- 타입 확인하기
main.GrandMothertype(LEE)
typetype(GrandMother)
클래스 사용
LEE = GrandMother()
print(GrandMother.family)
grandparents
GrandMother.print_self()
에러 발생
* self 는 인스턴스를 얘기한다. LEE 라는 변수에서는 접근 가능 하지만 클래스 에서는 접근이 안된다.
* 클래스는 하나의 설계도이다.
```python
LEE.print_self() # 실행 가능
<__main__.GrandMother object at 0x000001B803A744D0>
LEE = GrandMother()
GrandMother의 함수 실행 한 이유
파이썬에서 자동적으로 내부적으로 생성함수를 만들어서 위에서 함수를 실행할 수있었다.
class father (GrandMother) : FAMILY = "parents" # 클래스 내에 저장된 값 def __init__(self,name,age) : # name, age 는 인스턴스 선언시 꼭 입력해야 하는 속성 다른 곳에서는 다르게 써도 무방하다. self.name = name # def __init__ 함수는 -> 생성자이다. self.age = age self.home = "seoul" # self.home은 인스턴스 선언 시 자동으로 생기는 속성이다.(클래스에는 없다.) # self 함수는 return를 절대 하면 안된다. 자동으로 된다. KIM = father() # 에러 발생 (선언 시 name,age를 입력해야함.) KIM = father("JI",25)
class Person : name = "person name" age = 18 def __init__(self,name) : self.name = name KI = Person()
# 클래스의 속성값 print(f'Person.name: {Person.name} / Person.age: {Person.age}')
Person.name: person name / Person.age: 18
# 인스턴스에서 값 변경 p_instant1 = Person("인스턴트11")
p_instant1.age = 25
```python
# 인스턴스의 속성값
print(f'p_instant1.name: {p_instant1.name} / p_instant1.age: {p_instant1.age}')
p_instant1.name: 인스턴트11 / p_instant1.age: 25
# 인스턴스에서 값 변경
p_instant2 = Person("인스턴트22")
# 인스턴스의 속성값
print(f'p_instant2.name: {p_instant2.name} / p_instant2.age: {p_instant2.age}')
p_instant2.name: 인스턴트22 / p_instant2.age: 18
# 클래스의 속성값
print(f'Person.name: {Person.name} / Person.age: {Person.age}')
# 인스턴스 생성을 통해 속성값을 여러번 변경하였지만, 클래스의 속성값은 변화가 없다.
Person.name: person name / Person.age: 18
상속(inheritance)
# 부모 클래스
class GrandMother :
family = "Hello world"
name = "GrandMother"
def print_self(self) :
print(self)
def print_HI():
print("HI!")
# 자식 클래스
class father(GrandMother) :
name = "father"
def __init__(self,name,age) :
self.name = name
self.age = age
self.home = "seoul"
# 아빠의 함수는 3개
# 자식의 자식 클래스
class child(father) :
name = "child"
# 자식의 함수도 3개
Override
부모로부터 받은 메소드 또는 속성을 수정하고 싶을 때 자식 클래스에서 재정의 한다.
class PlayerCharacter:
def __init__(self,hp=100,exp=0):
self.hp = hp
self.exp = exp
def attack(self):
print("공격하기")
self.exp = self.exp + 2
def defend(self):
print("방어하기")
self.exp = self.exp + 1
class Wizard(PlayerCharacter): # 상속 받기
def __init__(self,mp):
super().__init__() # 부모클래스의 생성자를 실행하겠다.
self.mp = mp
def magic_skill(self):
print("마법 공격하기")
self.mp = self.mp - 2
# 메소드 오버라이딩
def defend(self):
print("마법사가 방어하기")
self.exp = self.exp + 3
player = Wizard(20)
player.hp , player.mp , player.exp
(100, 20, 0)
접근 지정자(Access Specifiers)
Public
- 공공화장실이라고 생각하면 된다. (누구나 이용가능)
- 모든 멤버(속성, 메소드)는 기본적으로 공용입니다. 모든 멤버는 객체 외부에서도 엑세스를 할수있다.
Private
- 개인화장실이라고 생각하자(나만 이용가능)
- 모든 프라이빗 멤버(속성, 메소드)는 객체 외부에서 엑세스가 불가능합니다.
- 프라이빗 멤버들은 객체 내부에서만 호출이 가능합니다.
class Student:
__schoolName = 'XYZ School' # private class attribute
def __init__(self, name, age):
self.name=name # public instance attribute
self.__age=age # private instance attribute
def __display(self): # private method
print('This is private method.')
# 쪽지문제
# 포유류 (성별/나이/다리)(아기를 낳는다./밥을 먹는다.)
# 개 (성별/나이/다리)(아기를 낳는다./밥을 먹는다.) + (짓는다.,꼬리 흔든다.) > 마르티스 진돗개
# 고양이 (성별/나이/다리)(아기를 낳는다./밥을 먹는다.) + (구르밍, 할퀸다.) 페르시안 먼치킨
class mammal :
def __init__(self,gender,age,legs) :
self.gender = gender
self.age = age
self.legs = legs
def action_1(self) :
print("아기를 낳는다.")
def action_2(self) :
print("밥을 먹는다.")
class dog(mammal):
dog_action_1 = "짓는다."
dog_action_2 = "꼬리를 흔든다."
class cat(mammal) :
cat_action_1 = "구르밍한다."
cat_action_2 = "할퀸다."
class Martis(dog) :
name = "Martis"
class Koreandog(dog) :
name = "Koreandog"
class persian(cat) :
name = "persian"
class munchkin(cat) :
name = "munchkin"
animal = cat("남자",6,4)
animal.action_1()
아기를 낳는다.
ani = persian("여자",3,4)
ani.name
'persian'
쪽지 문제
이동수단 문제
# <이동수단>
# 바퀴수 = 0 # 후진 -> "뒤로 이동"
# 탑승인원 = 0 # 전진 -> "앞으로 이동"
# (오토바이)
# 바퀴수 = 2 # 점프 -> "점프한다."
# 탑승인원 = 1 # 후진 -> 앞바퀴를 들고 후진
# (배)
# 탑승인원 = 4 # 전진 -> "항해 한다."
# 잠수유무 # 잠수 -> 잠수유무 변수가 True면 "잠수한다.", else "잠수 불가"
class transport :
def __init__(self,wheel=0, passenger=0 ) :
self.wheel = wheel
self.passenger = passenger
def back(self) :
print("뒤로이동")
def go_front(self) :
print("앞으로 이동")
class bicycle(transport) :
def jump(self) :
print("점프한다.")
def back(self):
print("앞바퀴를 들고 후진")
class ship(transport) :
def __init__(self,submarine=None) :
self.submarine = submarine
def go_front(self) :
print("항해 한다.")
def diving(self) :
if self.submarine : # 아까 여기다가 self.submarine == True 라고 했었는데 이러면 "잠수한다" 만 출력된다.
print("잠수한다.")
else :
print("잠수 불가")
ride_bicycle = bicycle(2,1)
ride_bicycle.wheel , ride_bicycle.passenger
(2, 1)
ride_bicycle.jump()
점프한다.
ride_bicycle.back()
앞바퀴를 들고 후진
ride_ship = ship(False)
ride_ship.passenger = 4
ride_ship.passenger
4
ride_ship.diving()
잠수 불가
ride_ship.go_front()
항해 한다.
직업 문제
# <사람>
# 나이 # 일한다.
# 이름
# (요리사)
# 경력 # 일한다. [경력 > 10 -> 코스요리를 만든다. | else 디저트를 만들다.]
# # 주문을 받는다. ["{이름}요리사입니다."]
# (경찰)
# Power # 일한다. [power > 10 -> 깡패를 잡는다. | else 순찰한다.]
# # 접수 받는다. "무엇을 도와드릴까요??"
class people :
def __init__(self,age:int,name:str) :
self.age = age
self.name = name
def work(self) :
print("일한다.")
class chef(people) :
def __init__(self,age,name,career) :
super().__init__(age,name)
self.career = career
def work(self) :
if int(self.career) > 10 :
print("코스요리를 잘 만든다.")
else :
print("디저트를 만든다.")
def order(self) :
print(f"{self.name} 요리사 입니다.")
class police(people) :
def __init__(self,age,name,power) :
super().__init__(age,name)
self.power = power
def work(self) :
if int(self.power) > 10 :
print("깡패를 잡는다.")
else :
print("순찰한다.")
def recive(self) :
print("무엇을 도와드릴까요?")
best_chef = chef(47,"김최고",11)
best_chef.age , best_chef.name , best_chef.career
(47, '김최고', 11)
best_chef.work()
best_chef.order()
코스요리를 잘 만든다.
김최고 요리사 입니다.
good_police = police(30,"김순찰",5)
good_police.age , good_police.name , good_police.power
(30, '김순찰', 5)
good_police.work()
good_police.recive()
순찰한다.
무엇을 도와드릴까요?
포유류 문제
# 포유류 (성별/나이/다리)(아기를 낳는다./밥을 먹는다.)
# 개 (성별/나이/다리)(아기를 낳는다./밥을 먹는다.) + (짓는다.,꼬리 흔든다.) > 마르티스 진돗개
# 고양이 (성별/나이/다리)(아기를 낳는다./밥을 먹는다.) + (구르밍, 할퀸다.) 페르시안 먼치킨
class mammal :
def __init__(self,gender,age,legs) :
self.gender = gender
self.age = age
self.legs = legs
def action_1(self) :
print("아기를 낳는다.")
def action_2(self) :
print("밥을 먹는다.")
class dog(mammal):
dog_action_1 = "짓는다."
dog_action_2 = "꼬리를 흔든다."
class cat(mammal) :
cat_action_1 = "구르밍한다."
cat_action_2 = "할퀸다."
class Martis(dog) :
name = "Martis"
class Koreandog(dog) :
name = "Koreandog"
class persian(cat) :
name = "persian"
class munchkin(cat) :
name = "munchkin"
animal = cat("남자",6,4)
animal.action_1()
아기를 낳는다.
ani = persian("여자",3,4)
ani.name
'persian'
소수구별 (class 버전)
# 클래스 이용
# 첫번째로 숫자인지 문자인지 구별
# 두번째로 숫자이면 소수 구별하는 함수 만들기
# 마지막으로 소수이면 소수 정수면 정수로 출력하게 한다.
# 0번째로 숫자 입력하는 함수 만들기
# 첫번째 클래스에다가는 숫자인지 문자인지 구별
# 상속 클래스에다가는 정수 소수 판별
Cell In[47], line 13
ex = only_num()
^
IndentationError: expected an indented block after function definition on line 10
class only_number :
def __init__(self, answer = input("숫자를 입력하시오")) :
self.answer = answer
first = only_number()
first.answer
'31'
# class only_number :
# answer = input("숫자를 입력하시오")
# first = only_number()
# first.answer/
'sd'
class next_number(only_number) :
def calcul(self):
if self.answer.isdigit() :
answer_use = int(self.answer)
for i in range(2,answer_use) :
if answer_use % i == 0 :
print("정수입니다.")
break
else :
print("소수입니다.")
else :
print("math error")
last_ans = next_number()
last_ans.calcul()
math error
class only_number :
def __init__(self, answer = input("숫자를 입력하시오")) :
self.answer = answer
class next_number(only_number) :
def calcul(self):
if self.answer.isdigit() :
answer_use = int(self.answer)
for i in range(2,answer_use) :
if answer_use % i == 0 :
print("정수입니다.")
break
else :
print("소수입니다.")
else :
print("math error")
last_ans = next_number()
last_ans.answer
last_ans.calcul()
소수입니다.
class only_number :
answer = input("숫자를 입력하시오")
class next_number(only_number) :
def calcul(self):
if self.answer.isdigit() :
answer_use = int(self.answer)
for i in range(2,answer_use) :
if answer_use % i == 0 :
print("정수입니다.")
break
else :
print("소수입니다.")
else :
print("math error")
last_ans = next_number()
last_ans.answer
last_ans.calcul()
소수입니다.
복습
# 나의 예제 #
class football :
def __init__(self,spurs = "win") :
self.spurs = spurs
def vsLiv(self) :
print("이겼습니다.")
king = football()
king.vsLiv()
이겼습니다.
# 상속 예제를 만들어보자 + super()를 포함해서 #
# <기본정보>
# 이름 # 키
# 나이 # 몸무게
# (학생정보)
# 학번 # 학점 # 학년
# (교사정보)
# 교직원번호 # 월급 # 년차
class basic_information :
def __init__(self , name:str , height:float , age:int , weight:float) :
self.name = name
self.height = height
self.age = age
self.weight = weight
def basic(self) :
print(f"{self.name}의 기본정보 입니다.\n키 : {self.height}cm 나이 : {self.age}살 몸무게 : {self.weight}kg")
class student(basic_information) :
def __init__(self , name:str , height:float , age:int , weight:float , st_id = '00-0000' , m_point = 50 , grade = 3) :
super().__init__(name,height,age,weight) # st_id만 정의 해주면 뒤에서 오류가 난다 그래서
self.st_id = st_id # 뒤에 오는 것도 해줘야 한다.
self.m_point = m_point
self.grade = grade
# 학번을 잘못 입력시 오류메세지가 나오도록 해보자
def st_error(self) :
if self.st_id[2] != "-" :
print("학번의 3번째 자리에는 '-'가 와야합니다.")
elif len(self.st_id) != 7 :
print("학번의 자리수가 맞는지 확인해보세요")
elif int(self.st_id[:2]) != self.grade :
print("학번의 학년자리가 맞는지 확인해보세요")
else :
print("옳바른 학번입니다! ^^")
class teacher(basic_information) :
def __init__(self , name:str , height:float , age:int , weight:float , te_id = '00-0000' , salary = 50 , long = 3) :
super().__intit__(name,height,age,weight) # st_id만 정의 해주면 뒤에서 오류가 난다 그래서
self.te_id = te_id # 뒤에 오는 것도 해줘야 한다.
self.salary = salary
self.long = long
Kim_student = student("김학생",170.0,18,67.7,"02-1234",15,11)
Kim_student.name , Kim_student.height , Kim_student.age , Kim_student.weight , Kim_student.st_id , Kim_student.m_point , Kim_student.grade
('김학생', 170.0, 18, 67.7, '02-1234', 15, 11)
# 단순한 호기심 #
# str으로 설정한 값을 int로 타입변경이 가능할까?
int(Kim_student.st_id)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
c:\Python study\day5\day5.ipynb Cell 62 line 1
----> <a href='vscode-notebook-cell:/c%3A/Python%20study/day5/day5.ipynb#Y134sZmlsZQ%3D%3D?line=0'>1</a> int(Kim_student.st_id)
ValueError: invalid literal for int() with base 10: '02-1234'
abc = Kim_student.st_id
type(abc)
str
int(abc)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
c:\Python study\day5\day5.ipynb Cell 64 line 1
----> <a href='vscode-notebook-cell:/c%3A/Python%20study/day5/day5.ipynb#Y136sZmlsZQ%3D%3D?line=0'>1</a> int(abc)
ValueError: invalid literal for int() with base 10: '02-1234'
Kim_student.st_error()
학번의 학년자리가 맞는지 확인해보세요
Private
모든 프라이빗 멤버(속성, 메소드)는 객체 외부에서 엑세스가 불가능합니다.
프라이빗 멤버들은 객체 내부에서만 호출이 가능합니다.
class Student:
__schoolName = 'XYZ School' # private class attribute
def __init__(self, name, age):
self.name=name # public instance attribute
self.__age=age # private instance attribute
def __display(self): # private method
print(f'This is private method. of {self.__schoolName}')
def get_display(self):
self.__display()
# 일단 기본적인 private를 사용할때는 '__'를 붙여서 사용한다.
# 프라이빗 함수는 바로 외부로 빼는 건 불가능하다.
stu = Student("김홍",20)
stu.name
'김홍'
stu.age
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
c:\Python study\day5\day5.ipynb Cell 69 line 1
----> <a href='vscode-notebook-cell:/c%3A/Python%20study/day5/day5.ipynb#Y145sZmlsZQ%3D%3D?line=0'>1</a> stu.age
AttributeError: 'Student' object has no attribute 'age'
# 프라이빗 함수 외부로 도출 할려면 퍼블릭 함수를 만들고 그 안에 실행하고 싶은 프라이빗 함수를 만들면 된다.
stu.get_display()
This is private method. of XYZ School
Magic Methods
- 메소드 명이 두개의 언더바로 감싸져 있다.
- 파이썬의 다양한 내장함수들이 클래스의 매직 메소드들을 호출하여 결과를 만들어 낸다.
class example :
def a_first(self) :
print("첫번쨰입니다.")
def a_second(self) :
print("두번째입니다.")
def a_third(self) :
print("세번째입니다.")
def __call__(self) :
self.a_first()
self.a_second()
self.a_third()
start = example()
start()
첫번쨰입니다.
두번째입니다.
세번째입니다.
counter
# 2에서10 사이에서 한 숫자가 랜덤으로 나와서 1~1000 사이에 배수의 갯수를 찾아라 (클래스 함수를 이용해서)
import random
from collections import Counter
# class problem :
# def __init__(self,random_num = random.randint(2,10)) :
# self.random_num = random_num
class sec_problem :
def __init__(self,random_num = random.randint(2,10),condition = range(1,1001),help = 0,help_2 = []) :
self.random_num = random_num
self.condition = condition
self.help = help
self.help_2 = help_2
def result(self) :
for i in self.condition :
if i % self.random_num == 0 :
self.help += 1
else :
continue
print(f"컴퓨터의 숫자 픽 : {self.random_num}\n1~1000 사이의 배수의 갯수 : {self.help}")
def hard_result(self) :
for i in self.condition :
if i % self.random_num == 0 :
self.help_2.append(i)
else :
continue
print(f"컴퓨터의 숫자 픽 : {self.random_num}\n1~1000 사이의 배수의 갯수 : {Counter(self.help_2)}")
answer = sec_problem()
answer.hard_result()
컴퓨터의 숫자 픽 : 2
1~1000 사이의 배수의 갯수 : Counter({2: 2, 4: 2, 6: 2, 8: 2, 10: 2, 12: 2, 14: 2, 16: 2, 18: 2, 20: 2, 22: 2, 24: 2, 26: 2, 28: 2, 30: 2, 32: 2, 34: 2, 36: 2, 38: 2, 40: 2, 42: 2, 44: 2, 46: 2, 48: 2, 50: 2, 52: 2, 54: 2, 56: 2, 58: 2, 60: 2, 62: 2, 64: 2, 66: 2, 68: 2, 70: 2, 72: 2, 74: 2, 76: 2, 78: 2, 80: 2, 82: 2, 84: 2, 86: 2, 88: 2, 90: 2, 92: 2, 94: 2, 96: 2, 98: 2, 100: 2, 102: 2, 104: 2, 106: 2, 108: 2, 110: 2, 112: 2, 114: 2, 116: 2, 118: 2, 120: 2, 122: 2, 124: 2, 126: 2, 128: 2, 130: 2, 132: 2, 134: 2, 136: 2, 138: 2, 140: 2, 142: 2, 144: 2, 146: 2, 148: 2, 150: 2, 152: 2, 154: 2, 156: 2, 158: 2, 160: 2, 162: 2, 164: 2, 166: 2, 168: 2, 170: 2, 172: 2, 174: 2, 176: 2, 178: 2, 180: 2, 182: 2, 184: 2, 186: 2, 188: 2, 190: 2, 192: 2, 194: 2, 196: 2, 198: 2, 200: 2, 202: 2, 204: 2, 206: 2, 208: 2, 210: 2, 212: 2, 214: 2, 216: 2, 218: 2, 220: 2, 222: 2, 224: 2, 226: 2, 228: 2, 230: 2, 232: 2, 234: 2, 236: 2, 238: 2, 240: 2, 242: 2, 244: 2, 246: 2, 248: 2, 250: 2, 252: 2, 254: 2, 256: 2, 258: 2, 260: 2, 262: 2, 264: 2, 266: 2, 268: 2, 270: 2, 272: 2, 274: 2, 276: 2, 278: 2, 280: 2, 282: 2, 284: 2, 286: 2, 288: 2, 290: 2, 292: 2, 294: 2, 296: 2, 298: 2, 300: 2, 302: 2, 304: 2, 306: 2, 308: 2, 310: 2, 312: 2, 314: 2, 316: 2, 318: 2, 320: 2, 322: 2, 324: 2, 326: 2, 328: 2, 330: 2, 332: 2, 334: 2, 336: 2, 338: 2, 340: 2, 342: 2, 344: 2, 346: 2, 348: 2, 350: 2, 352: 2, 354: 2, 356: 2, 358: 2, 360: 2, 362: 2, 364: 2, 366: 2, 368: 2, 370: 2, 372: 2, 374: 2, 376: 2, 378: 2, 380: 2, 382: 2, 384: 2, 386: 2, 388: 2, 390: 2, 392: 2, 394: 2, 396: 2, 398: 2, 400: 2, 402: 2, 404: 2, 406: 2, 408: 2, 410: 2, 412: 2, 414: 2, 416: 2, 418: 2, 420: 2, 422: 2, 424: 2, 426: 2, 428: 2, 430: 2, 432: 2, 434: 2, 436: 2, 438: 2, 440: 2, 442: 2, 444: 2, 446: 2, 448: 2, 450: 2, 452: 2, 454: 2, 456: 2, 458: 2, 460: 2, 462: 2, 464: 2, 466: 2, 468: 2, 470: 2, 472: 2, 474: 2, 476: 2, 478: 2, 480: 2, 482: 2, 484: 2, 486: 2, 488: 2, 490: 2, 492: 2, 494: 2, 496: 2, 498: 2, 500: 2, 502: 2, 504: 2, 506: 2, 508: 2, 510: 2, 512: 2, 514: 2, 516: 2, 518: 2, 520: 2, 522: 2, 524: 2, 526: 2, 528: 2, 530: 2, 532: 2, 534: 2, 536: 2, 538: 2, 540: 2, 542: 2, 544: 2, 546: 2, 548: 2, 550: 2, 552: 2, 554: 2, 556: 2, 558: 2, 560: 2, 562: 2, 564: 2, 566: 2, 568: 2, 570: 2, 572: 2, 574: 2, 576: 2, 578: 2, 580: 2, 582: 2, 584: 2, 586: 2, 588: 2, 590: 2, 592: 2, 594: 2, 596: 2, 598: 2, 600: 2, 602: 2, 604: 2, 606: 2, 608: 2, 610: 2, 612: 2, 614: 2, 616: 2, 618: 2, 620: 2, 622: 2, 624: 2, 626: 2, 628: 2, 630: 2, 632: 2, 634: 2, 636: 2, 638: 2, 640: 2, 642: 2, 644: 2, 646: 2, 648: 2, 650: 2, 652: 2, 654: 2, 656: 2, 658: 2, 660: 2, 662: 2, 664: 2, 666: 2, 668: 2, 670: 2, 672: 2, 674: 2, 676: 2, 678: 2, 680: 2, 682: 2, 684: 2, 686: 2, 688: 2, 690: 2, 692: 2, 694: 2, 696: 2, 698: 2, 700: 2, 702: 2, 704: 2, 706: 2, 708: 2, 710: 2, 712: 2, 714: 2, 716: 2, 718: 2, 720: 2, 722: 2, 724: 2, 726: 2, 728: 2, 730: 2, 732: 2, 734: 2, 736: 2, 738: 2, 740: 2, 742: 2, 744: 2, 746: 2, 748: 2, 750: 2, 752: 2, 754: 2, 756: 2, 758: 2, 760: 2, 762: 2, 764: 2, 766: 2, 768: 2, 770: 2, 772: 2, 774: 2, 776: 2, 778: 2, 780: 2, 782: 2, 784: 2, 786: 2, 788: 2, 790: 2, 792: 2, 794: 2, 796: 2, 798: 2, 800: 2, 802: 2, 804: 2, 806: 2, 808: 2, 810: 2, 812: 2, 814: 2, 816: 2, 818: 2, 820: 2, 822: 2, 824: 2, 826: 2, 828: 2, 830: 2, 832: 2, 834: 2, 836: 2, 838: 2, 840: 2, 842: 2, 844: 2, 846: 2, 848: 2, 850: 2, 852: 2, 854: 2, 856: 2, 858: 2, 860: 2, 862: 2, 864: 2, 866: 2, 868: 2, 870: 2, 872: 2, 874: 2, 876: 2, 878: 2, 880: 2, 882: 2, 884: 2, 886: 2, 888: 2, 890: 2, 892: 2, 894: 2, 896: 2, 898: 2, 900: 2, 902: 2, 904: 2, 906: 2, 908: 2, 910: 2, 912: 2, 914: 2, 916: 2, 918: 2, 920: 2, 922: 2, 924: 2, 926: 2, 928: 2, 930: 2, 932: 2, 934: 2, 936: 2, 938: 2, 940: 2, 942: 2, 944: 2, 946: 2, 948: 2, 950: 2, 952: 2, 954: 2, 956: 2, 958: 2, 960: 2, 962: 2, 964: 2, 966: 2, 968: 2, 970: 2, 972: 2, 974: 2, 976: 2, 978: 2, 980: 2, 982: 2, 984: 2, 986: 2, 988: 2, 990: 2, 992: 2, 994: 2, 996: 2, 998: 2, 1000: 2})
answer.result()
컴퓨터의 숫자 픽 : 2
1~1000 사이의 배수의 갯수 : 500
# counter를 써볼려면 단어갯수 세는 문제로 풀어봐야지 위에 문제가 아니라
from collections import Counter
lst = ['aa', 'aa', 'bb', 'aa', 'bb', 'ee', 'tt']
counter = Counter(lst)
counter
Counter({'aa': 3, 'bb': 2, 'ee': 1, 'tt': 1})
dict(counter)
{'aa': 3, 'bb': 2, 'ee': 1, 'tt': 1}
list(counter.elements())
# element 는 조건에 일치하는 가장 첫번째 요소를 반환
# elements는 조건에 일치하는 모든 요소를 list 형태로 반환
['aa', 'aa', 'aa', 'bb', 'bb', 'ee', 'tt']
list(counter)
['aa', 'bb', 'ee', 'tt']
counter.elements()
<itertools.chain at 0x1a96ef92ec0>
숫자가 가장 큰 인자를 찾는 메서드most_common(k)
: k번째까지 큰 인자를 리턴해준다.
counter.most_common(1)
[('aa', 3)]
counter.most_common(2)
[('aa', 3), ('bb', 2)]
example = [234,543,634,654,76,345,1325,457]
example.most_common(3)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
c:\Python study\day5\day5.ipynb Cell 89 line 2
<a href='vscode-notebook-cell:/c%3A/Python%20study/day5/day5.ipynb#Y222sZmlsZQ%3D%3D?line=0'>1</a> example = [234,543,634,654,76,345,1325,457]
----> <a href='vscode-notebook-cell:/c%3A/Python%20study/day5/day5.ipynb#Y222sZmlsZQ%3D%3D?line=1'>2</a> example.most_common(3)
AttributeError: 'list' object has no attribute 'most_common'
a_a = {'a' : 1 , "b" : 2 , "c" : 3}
a_a.most_common(2)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
c:\Python study\day5\day5.ipynb Cell 90 line 2
<a href='vscode-notebook-cell:/c%3A/Python%20study/day5/day5.ipynb#Y223sZmlsZQ%3D%3D?line=0'>1</a> a_a = {'a' : 1 , "b" : 2 , "c" : 3}
----> <a href='vscode-notebook-cell:/c%3A/Python%20study/day5/day5.ipynb#Y223sZmlsZQ%3D%3D?line=1'>2</a> a_a.most_common(2)
AttributeError: 'dict' object has no attribute 'most_common'
# 그럼 most_common(k)는 counter 하고 만 쓸수 있는거야?
수업 전 복습문제
# 최대값 , 최솟값, 중간값, 출력
# 리스트 길이가 7~10 이고 안에 숫자가 range(1,10)에서 랜덤 값으로 가져오는
# 리스트 길이가 홀수인지 짝수 인지 구별
# 최소값 구하는 함수
# 최대값 구하는 함수
# 중간값 구하는 함수
class a_solve :
def __init__(self,a_lst=[]):
self.a_lst = a_lst
def a_first(self) :
if len(self.a_lst) % 2 == 0 :
print("리스트의 길이는 짝수입니다.")
else :
print("리스트의 길이는 홀수입니다.")
def a_min(self) :
self.a_lst.sort()
print(f"최소값 : {self.a_lst[0]}")
def a_max(self) :
self.a_lst.sort()
print(f"최대값 : {self.a_lst[-1]}")
def a_mid(self) :
self.a_lst.sort()
a_int = len(self.a_lst)
# 인덱스값안에서 나누기를 하면 float 값으로 나오기 때문에 인덱스를 실행하기전에 int()묶어주거나 // 몫만 나오게 한다.
if len(self.a_lst) % 2 == 0 :
print(f"중간값 : {(self.a_lst[int(a_int/2)] + self.a_lst[int(a_int/2-1)])/2}")
else :
print(f"중간값 : {(self.a_lst[int((a_int-1)/2)]/2)}")
def __call__(self) :
self.a_first()
self.a_min()
self.a_max()
self.a_mid()
# 리스트의 길이가 짝수일때
result = a_solve([1,2,3,4,5,3,4,2,5,1])
result()
리스트의 길이는 짝수입니다.
최소값 : 1
최대값 : 5
중간값 : 3.0
# 리스트의 길이가 홀수일때
result = a_solve([1,2,4,8,9,7,5,3,1])
result()
리스트의 길이는 홀수입니다.
최소값 : 1
최대값 : 9
중간값 : 2.0
'Python' 카테고리의 다른 글
[파이썬 기초] 함수 (0) | 2025.01.08 |
---|---|
[파이썬 기초] 예외처리 (0) | 2025.01.08 |
[파이썬 기초] 반복문 (0) | 2025.01.08 |
[파이썬 기초] 조건문 (0) | 2025.01.08 |
[파이썬 기초] 불리언 (0) | 2025.01.08 |