알쏭달쏭 공부한거 쓰기
7/3 수업 중 작성 본문
#중간고사 소개
#수업 진도
review
함수-프로그램을 이루는 각각의 기능을 의미한다.
함수에 들어가는 값:매개변수
함수에 내보내는 값: 반환값-1개 이상 가능하다.
반환문(return)>아마 필기 시험으로 물어볼것 같다
여러개 값을 반환하는 다중 반환문
return n1, n2 ---
리스트로 분리후 변수 여러개 둬서 1개씩 가져가는 것 처럼
반환값도 여러개 오면 변수 여러개 둬서 한개씩 가져가게 할 수 있다.
c는 1개만 반환하지만 , python 은 여러개 반환할 수 있다.
#전역 변수와 #지역변수
함수 밖에서 선언된 변수: 전역 변수
함수 내부에서 선언된 변수: 지역 변수
내부의 값은: 100+200인 300이 출력된다
외부의 값은 :10+20인 30이 출력된다.
하지만 함수 내부에서 global a,b라고 전역변수로 선언한 경우에는
함수 내부의 값은 100+200=300이고
함수 외부의 값도 전역변수 a,b에 의해 값이 변경되어서 동일하게 300의 값을 가지게 된다.
#디폴트 인자
함수 호명시 매개변수n을 입력하지 않으면 에러가 발생하지만
함수에 인자를 작성하지 않는 경우 디폴트 값을 갖도록 하는 디폴트 인자를 이용하면 매개 변수n이 없어도 에러가 발생하지 않는다.
인자의 값은 숫자, bool값,문자열, 리스트 etc...
인자를 2개를 받아야 하는 경우
def div(a=1, b=1):
이때
div()> a=1,b=1
div(3)>a=3,b=1> 1개만 인자 입력시 앞에 있는 인자에 할당된다.
div(3,2) >a=3,b=2
def shappy(a=2,b):
shappy(4) 4의 값도 a에게 가고 b는 값을 못 받았으므로 오류가 생긴다.
즉, 디폴트 매개변수는 뒤에 있는 애부터
인자 전달 방식
1) 위치인자 전달>순서대로 할당된다.
2) 키워드 인자 전달 > 인자의 위치가 중요하지 않아서 상관없지만
3)혼용시> 반드시 위치 인자가 키워드 인자 앞에 와야한다. cf) 마지막 변수가키워드 변수가 아니면 오류가 생긴다.
#가변인자=인자의 수가 정해지지 않을 때 이용
names란 변수에 값을 튜플의 요소로 받는다 .
names는 튜플이 저장되어 있다.
## 2. 아래 함수를 작성하고 테스트하시오.
1. 원의 반지름을 매개 변수로 받아 면적과 둘레의 길이를 반환하는 함수 circle_area_preim(radius)
- 위 함수를 사용해 반지름이 3인 원의 면적과 둘레의 길이를 출력하시오.
2. 이차 방정식 ax^2+bx+c = 0의 두 해를 반환하는 함수 get_root(a, b, c)
- 단, a=/=0
- 위 함수를 사용하여 $x^2+4x-21=0$의 두 해를 출력하시오.
3.n의 배수m개를 반환하는 함수 multiplies(n,m)
-위 함수를 사용해 3의 배수 4개를 출력하세요
sol)
import math as m
def circle_area_preim(radius):
return (radius*radius*m.pi),(2*radius*m.pi)
a,p=circle_area_preim(3)
print(f'{a:.2f},{p:.2f}')
areaandlen=circle_area_preim(3)
for i in areaandlen:
print(f'{i:.2f}',end=', ')
print('\b\b ')
print()
def get_root(a,b,c):
det=(b**2-4*a*c)**.5
x1=(-b-det)/(2*a)
x2=(-b+det)/2/a
return x1, x2
r1,r2=get_root(1,4,-21)
print(r1,r2)
roots=get_root(1,4,-21) #튜플로 받는다.
print(roots)
def multiplies(n,m):
mul=[]
for i in range(1,m+1):
mul.append(n*i)
print(f'{n}의 배수:{mul}')
multiplies(3,4)
#가변인자 함수 day6 3,4
## 3. 가변 인자를 사용하는 sum_nums() 함수를 작성하시오. sum_nums() 함수는 인자들을 출력한 후 모든 값들의 합과 평균을 다음과 같이 출력한다.
```
3 개의 인자 (10, 20, 30)
합계 : 60 , 평균 : 20.0
```
```
5 개의 인자 (10, 20, 30, 40, 50)
합계 : 150 , 평균 : 30.0
```sol)
def sum_nums(*gap):
print(f'{len(gap)}개의 인자 {gap}')
print(f'합계:{sum(gap)} , 평균{sum(gap)/len(gap):.1f}')
def day6_3():
sum_nums(10,20,30)
sum_nums(10,20,30,40,50)
day6_3()
## 4. 가변 인자를 사용하는 함수 min_nums() 함수를 구현하시오. 이 함수는 정수를 인자로 받아 그 중 최솟값을 출력한다.
```
min_nums(20, 40, 50, 10) 호출 시 아래 내용 출력됨.
최솟값은 10
```
sol)
def min_nums(*nums):
print(f'최솟값은:{min(nums)}')
min_nums(20,40,50,10)
## 5.23 한 사람의 정보가 이름, 나이, 성별, 키, 몸무게의 5개 항목 형식으로 저장되어 있다고 하자. 홍길동이라는 사람이 20세에 남자이면서 180cm 키에 100kg의 몸무게라면 ['홍길동', 20, 1, 180.0, 100.0]와 같이 리스트로 표현할 수 있다. 두 번째 사람이 자스민이라는 22세의 여성으로 162cm의 키에 60kg의 몸무게라고 하면 ['자스민', 22, 0, 162.0, 60.0]으로 표현할 수 있다. 남녀 성별은 여자는 0, 남자는 1로 표현한 것이다. 두 사람의 정보를 모두 모으면, ['홍길동', 20, 1, 180.0, 100.0, '자스민', 22, 0, 162.0, 60.0]와 같이 표현할 수 있고, 이렇게 여러 명의 정보를 담을 수 있다.
### (1) 어떤 리스트에 다음과 같은 사람들이 있으며 이 정보를 바탕으로 만든 person_list가 있을 때, 몇 명의 정보가 person_list에 담겼는지를 출력하는 함수를 작성해 보라. 이를 위하여 how_many_persons() 함수를 작성하여라.
```
person1 = ['온달', 20, 1, 180.0, 100.0]
person2 = ['이사부', 25, 1, 170.0, 70.0]
person3 = ['평강', 22, 0, 169.0, 60.0]
person4 = ['혁거세', 40, 1, 150.0, 50.0]
person_list = person1 + person2 + person3 + person4
n_persons = how_many_persons(person_list) # 여러분이 작성할 함수입니다
#아래와 같이 인원수 출력
```
---------
실행결과
```
4명의 정보가 담겨 있습니다.
```
### (2) 이 문제에서 저장하는 방식으로 사람들의 정보를 담은 어떤 리스트에 담긴 사람들의 평균 나이를 계산하는 프로그램을 슬라이싱을 이용하여 구현해 보라.
```
person_list = person1 + person2 + person3 + person4
average_age = compute_average_age(person_list)
#아래 예시와 같이 average_age 출력
```
---------
실행결과
```
평균 나이는 26.75세입니다.
```
### (3) 주어진 리스트에 저장된 사람들의 성별을 분석하여 남자의 수와 여자의 수를 출력하라.
```
person_list = person1 + person2 + person3 + person4
#코드 작성 = count_males_females(person_list)
#아래 양식과 같이 남녀 수 출력
```
---------
실행결과
```
리스트에는 남자가 3명, 여자가 1명입니다.
```
### (4) 주어진 리스트에 포함된 정보를 각각의 사람별로 다음과 같이 출력해 보라.
```
person_list = person1 + person2 + person3 + person4
display_persons(person_list) # 여러분이 작성할 함수입니다
```
---------
실행결과
```
['온달', 20, 1, 180.0, 100.0]
['이사부', 25, 1, 170.0, 70.0]
['평강', 22, 0, 169.0, 60.0]
['혁거세', 40, 1, 150.0, 50.0]
```
sol)
def how_many_persons(person_list):
person=[x for x in person_list if str(x).isalpha()==True ]
return len(person) #len(person)//5
def compute_average_age(person_list):
person_ages=person_list[1::5]
return sum(person_ages)/len(person_ages)
def count_males_females(person_list):
person_sex=person_list[2::5]
w=person_sex.count(0)
m=person_sex.count(1)
return w,m
def display_persons(person_list):
display=[]
n=how_many_persons(person_list)#사람 수
for i in range(n):
display.append(person_list[5*i:5*(i+1)])
#extend는 리스트 + 시키는애 append는 리스트를 집어 넣는애
return display
def daye():
person1 = ['온달', 20, 1, 180.0, 100.0]#0~5미만
person2 = ['이사부', 25, 1, 170.0, 70.0]#5~10미만
person3 = ['평강', 22, 0, 169.0, 60.0]#10~15미만
person4 = ['혁거세', 40, 1, 150.0, 50.0]#15~20미만
person_list = person1 + person2 + person3 + person4
n_persons = how_many_persons(person_list)
print(f'{n_persons}명의 정보가 담겨 있습니다.')
average_age = compute_average_age(person_list)
print(average_age)
w,m=count_males_females(person_list)
# 아래 양식과 같이 남녀 수 출력
print(f'리스트에서 남자가 {m}명 여자가{w}명 입니다.')
display=display_persons(person_list) # 여러분이 작성할 함수입니다
for i in display:
print(i, end='\n')
daye()
#튜플의 패킹과 언패킹
패킹: 하나의 변수에 여러개의 값을 넣는것
언패킹: 패킹된 변수가 있으면, 여기에서 여러 값을 꺼내옴
#튜플의 연산:
+ 가능, 연결된 튜플을 하나로 만들어준다., 다른 형식과는 +성립 안된다.
*반복, 하나의 튜플을 횟수만큼 반복하여 하나의 튜플로 만들어준다.
sol)
def lab6_6():
the_day=(1919,3,1)
year,month,day=the_day
print(f'{year}년{month}월{day}일은 삼일절 입니다.')
wow=tuple([10,20,30])
a,b,c=wow
print(f'{a}\n{b}\n{c}\n')
sol)
def lab6_7():
person=('홍길동',2019001, 179)
print(person)
person=list(person)
person[1]=2019003
person=tuple(person)
print(person)
#person[1]=2019003 오류 발생
#person=('홍길동',2019003,179) 아예 새 튜플 기입시
#이게 주소id가 달라짐 앞은,,,?다른 새 튜플 만들어질것으로 알고 있음
풀어보기
>>> print('hello'*3)
hellohellohello
>>> print(('hello',)*3) 1개의 원소로 이루어진 튜플
('hello', 'hello', 'hello')
#집합 공집합 만드는 방법-dict아니게 만드는것
#len 레이닞, 리스트, 문자열, 튜플, 집합
#여러 성분 집합에 추가하려면 >update 이용
#삭제 discard
#추가 add
#공집합 clear
#합 uniom + a|b
#차집합 difference -
#교집합 intersection &
#issubser,isuperset,iddisjoint()
# 'hello' 'hi'의 공통 문자만 구하기
#교집합 뺀 부분을 알고 싶을 때 symmetric_difference
## 6.8 주어진 튜플 tup에서 한 번 이상 나타나는 원소를 찾아 출력하라.
---
실행결과
```
주어진 튜플은: (1, 2, 5, 4, 3, 2, 9, 1, 4, 7, 8, 9, 9)
중복 원소는: {1, 2, 4, 9}
```
sol)
def day7_6_8():
t=(1, 2, 5, 4, 3, 2, 9, 1, 4, 7, 8, 9, 9)
t=list(t)#[1, 2, 5, 4, 3, 2, 9, 1, 4, 7, 8, 9, 9]
copy=t[:]
mul=[]
for _ in copy:
a=t.pop()
if a in t:
mul.append(a)
mul=set(mul)
print(mul)
day7_6_8()
def day7_6_8v2():
t=(1, 2, 5, 4, 3, 2, 9, 1, 4, 7, 8, 9, 9)
a=list(set(t))#[1,2,5,4,3,7,8,9]
t=list(t)#[1, 2, 5, 4, 3, 2, 9, 1, 4, 7, 8, 9, 9]
for i in a:
t.remove(i)
t=set(t)
print(t)
## 6.9 중복 요소를 가진 튜플 tup에서 중복 요소가 하나만 나타나도록 수정한 튜플을 생성하라.
---
```
주어진 튜플: (1, 2, 5, 4, 3, 2, 1, 4, 7, 8, 9, 9, 3, 7, 3)
중복 제거 튜플: (1, 2, 3, 4, 5, 7, 8, 9)
```
sol)
def day7_6_9():
t=(1, 2, 5, 4, 3, 2, 1, 4, 7, 8, 9, 9, 3, 7, 3)
t=set(t)
t=tuple(t)
print(t)
튜플의 메소드.
#count()
#index()
튜플 슬라이싱 가능=문자열=리스트
#집합- 순서가 없는 중복이 허용되지 않음
빈집합 set()으로 만들자!! {}은 dict형으로 지정된다.
순서가 없으므로 index이용x
add(원소)
discard(원소)
clear()> 모든원소 삭제
union()합집합, | or
difference() 차집합 -
intersection() 교집합 & and
symmertric_difference() 대칭차집합 ^
issubset() 부분집합이가?를 구한다.T/F반환
issuperset() 상위집합인가?를 구한다. T/F반환
isdisjoint() 서로서인가? T/F를 반환한다.
'파이썬 -23여름학기(ㄱㅎㅈ)' 카테고리의 다른 글
HW 6-튜플, 집합 추가문제 (0) | 2023.07.04 |
---|---|
중간고사 대비-hw별 문제풀이 가능여부 및 연습 (0) | 2023.07.03 |
중간고사 족보 대비 (0) | 2023.07.03 |
HW5 과제 풀이 (0) | 2023.07.02 |
7/2 python 내용 복습 (0) | 2023.07.02 |