yangbongsoo / blockStudy

1 stars 0 forks source link

python-final #32

Closed yangbongsoo closed 1 year ago

yangbongsoo commented 1 year ago

condition #21

  1. 윤년

    if ((A and B) or C) 윤년
    A : year % 4 == 0
    B : year % 100 != 0
    C : year % 400 == 0
  2. 3개 수 입력 받아 내림차순 정렬(이건 시험에 나온다고 한적은 없음 그냥 나올법해서 정리)

    
    n1, n2, n3 = input("입력 : ").split()

int 로 꼭 치환 해줘야함

n1 = int(n1) n2 = int(n2) n3 = int(n3)

총 3번 if 문 필요 (n1, n2) , (n2, n3), (n1, n2)

if n1 <= n2: n1, n2 = n2, n1

if n2 <= n3: n2, n3 = n3, n2

if n1 <= n2: n1, n2 = n2, n1

print("내림차순 성렬: {} {} {}".format(n1, n2, n3))


## data #22
1. 실수의 두가지 표현 방식. 2장 데이터pdf 4page

2. 변수명 규칙  2장 데이터 pdf 12,13page

보기 단어 중 변수의 이름이 될 수 없는 것은?

2nd_base : 숫자로 시작 할 수 없다.

money : # 문자 기호 사용 못함

varname$ : $ 특수 문자 사용 못함

id name : 중간에 공백 문자 사용 못함

for : 예약어 for 를 변수명으로 사용 못함 # print(keyword.kwlist)

변수명 규칙 : 영어 대소문자, 숫자 밑줄(_)로만 이뤄지는데, 영어 대소문자와 밑줄로만 시작 가능. 마지막으로 키워드들은 사용 불가


3. type 출력 이슈
```python
x = 10
intType = type(x)
print(intType)  # <class 'int'> 타입 이름 기억
x = 2.5
print(type(x))  # <class 'float'>
x = "Hello"
print(type(x))  # <class 'str'> string이 아니라 str 이다.

--- 
# 3.14 를 변수에 할당한 후(변수는 하나만 사용)
x = 3.14

# 문자열로 변환 후, 값과 데이터 형을 출력
x = str(x)
print(x, type(x))

# 변환된 문자열을 정수로 변환 후, 값과 데이터 형을 출력
x = int(float(x)) # 소수점 있는 문자열은 바로 int 변환 못하니까 float 거쳐서 int 로 변환한다
print(x, type(x))

# 변환된 정수를 실수로 변환 후, 값과 데이터 형을 출력
x = float(x)
print(x, type(x))

for #23

S = "하나씩건너서출력"
for k in range(0, len(S), 2):
    print(S[k], end="")

S = "뒤에서부터출력"
for j in range(len(S) - 1, -1, -1):  # 거꾸로 출력
    print(S[j], end="")

# TODO: list comprehension 는 시험에 반드시 나옴
a = [1, 2, 3, 4]
result = [num * 3 for num in a] # [3, 6, 9, 12]

# for문이 1번, if문이 2번, num * 3 이 3번 순서로 실행된다.
a = [1, 2, 3, 4]
result = [num * 3 for num in a if num % 2 == 0]  # [6, 12] 

# TODO: 시험에 나온다 외워라
L = list(int(x) for x in input("Numbers? ").split())
print(L)

TODO: for page17 코드(소수인지 판단) 응용해서 시험 나올수도 있음

N = int(input("N(> 1)? "))
primeChk = True
for k in range(2, N):
    if N % k == 0:
        primeChk = False
        break

if primeChk == True:
    print("prime")
else:
    print("not prime")

별찍기

for i in range(1, 6):
    for j in range(5-i):
        print(" ", end="")  # 빈칸 출력
    for j in range(1, i*2, 1):
        print("*", end="")  # "*" 출력
    print("")

    *
   ***
  *****
 *******
*********

- - - 

N = int(input("Enter # of lines : "))
for i in range(N, 0, -1):
    for j in range(i):
        print("*", end="")  # 빈칸 출력
    print()

Enter # of lines : 7
*******
******
*****
****
***
**
*
# 트리 형태이고 첫 줄은 중간에 * 하나 한 줄씩 띔, 마지막 5번째 줄은 * 9 개이고 빈칸없음
for i in range(1, 6):
    for j in range(5 - i):
        if i == 1 and j == 1:
            print(" ", end="")
        print(" ", end="")  # 빈칸 출력
    for j in range(1, i * 2, 1):
        if i == 6-1:
            print("*", end="")  # "*" 출력
        else:
            print("* ", end="")  # "*" 출력
    print("")

     * 
   * * * 
  * * * * * 
 * * * * * * * 
*********

io #24

10#20 와 같이 출력 하려면?
print("10", end="#")
print("20")
# 세 개의 수를 입력 받아, 그 합과 평균을 출력해라. 평균은 소수점 한자리까지 출력
n = input("정수 숫자 3개를 입력 : ")
n1, n2, n3 = n.split()
print("입력 받은 값 : {} {} {}".format(n1, n2, n3))

sum = int(n1) + int(n2) + int(n3)
avg = sum / 3
print("총합 : {}".format(sum))
print("평균 : %.1f" % avg)
s = "Good words cost nothing"
word = input("찾는 단어 입력 : ")

# 출력 시 포맷팅은 % operator 사용
count = s.count(word)
print("Good words cost nothing 문장에서는 work 단어가 %d 번 있습니다." % count)

list #25

# TODO: 리스트 만드는 방법 두가지 시험에 나옴
c = list()
d = []
# L = [1,2,3,4] --> L.insert(2,10) --> L.pop() 을 순서대로 수행한 결과 → [1,2,10,3]
L = [1, 2, 3, 4]
L.insert(2, 10)
L.pop()

print(L)  # [1, 2, 10, 3]

module&file #26

# TODO 파일 여는방법, 닫는방법만 외워라
# 파일 close() 하는거 까먹지 마라
# open 과 close 가 pair 로 꼭 들어가야함

fR = open("in_data.txt", 'r')
fW = open("out_data.txt", 'w')
s = fR.read()  # 한번에 모두 읽어 하나의 문자열로 저장
fW.write(s)  # 읽은 문자열 파일에 쓰기
fR.close()
fW.close()  # 두 파일 닫기
1 3 5
7 3
인 경우 file read 해서 결과 출력하기 
교재에 있는 readlines() 사용한 예시임 

fp = open("in_data.txt", "r")
s = fp.readlines()
print(s) # ['1  3 5\n', '7 3']

operator #27

import 방법 1 : from math import *  # p5
import 방법 2 :  import math as m

교수님은 as 쓰는 방법을 더 선호하셨던걸로 기억

math.trunc() # 소수점 이하 버려

# 17 을 4로 나눈 몫과 나머지를 같이 반환
a, b = divmod(17, 4)

# 반올림하는데 소수점 이하 4자리까지 보존함. 5번째에서 반올림 수행
print(round(3.123456, 4)) # 3.1235
print(round(3.1, 4)) # 3.1
print(round(3, 4)) # 3
x+=y 의 의미는 x = x+y

tuple/set/dict #28

빈 튜플 작성하는 2가지 방법 
t = tuple(),  t = () 

set 만드는 방법
S1 = {3, "cat", False}
S2 = set([1, 2, 3, 2])
# S3 = {1, 2, [3, 4]} 오류 TypeError 리스트는 원소로 올 수 없음

print(type(S1))  # <class 'set'>
print(type(S2))  # <class 'set'>

s1 = set([1, 2, 3])
s1.add(4)
print(s1)  # {1, 2, 3, 4}

s1.update([4, 5, 6])
print(s1)  # 존재하는 데이터 추가하면 변동 없음 {1, 2, 3, 4, 5, 6}

s1.remove(6)  # 원소 6을 지우라는 뜻 인덱스 아님
print(s1)  # {1, 2, 3, 4, 5}

s1.discard(6)  # 이미 없는 원소 삭제하면 무시(Error 안남)
print(s1.pop())  # 순서가 없어서 임의로 pop됌
s1.clear()  # 공집합 만듬
print(s1)  # TODO: 시험에 나옴. 빈 잡합 출력하면 {} 이게 아니다. set() 이렇게 나온다.

d = dict()
print(type(d))  # <class 'dict'>
d = {}
print(type(d))    # <class 'dict'>

두개 차이 알아라 A.intersection(B) : A & B 와 동일. A.intersection_update(B) : A 를 A & B 로 갱신

$$A \cap B$$

두개 차이 알아라 A.difference(B) : A - B 와 동일(B에는 없고 A에만 있는 원소의 집합 반환) A.difference_update(B) : A 를 A - B 로 갱신

 D = { "Kim":89,"Lee":56,"Yo":50 } --> list(D.values()) 출력 결과
→ [89,56,50]
L = {"a": 1}
print(L.get('e'))  # None
print(L.get('e', 0))  # 0

string #29

"{:8.3f}".format(3.141592) 출력 결과
(3개의 공백)3.142
# TODO: 시험에 나옴 e+02 에서 0이 붙은거는 그냥 외워라.
# 소숫점이하 3 자리 지수 (8자리) 
print("|{:8.3e}|".format(314.15926))  # |3.142e+02|

print("|{:9.2e}|".format(314.15926))  # | 3.14e+02|

print("|{:10d}|".format(12345)) # |     12345| (5개 공백있는거임)

# space bar 대신 0 을 넣는다. 총10개 문자 사용하라(쉼표도 문자에 포함)
print("|{:010,d}|".format(12345))  # |00,012,345|

# %는 곱하기 100하라는 뜻. 그리고 소수점 셋째자리까지 표현. % 까지 자동으로 표현
print("{:.3%}".format(1 / 3))  # 33.333%

x = "hello"
y = "abc"
print("{0[1]}, {1[2]}".format(x, y))  # 0 은 format 의 0 인덱스값이니까 hello를 의미 그리고 [1] 은 e. 1은 1인덱스니까 abc. 그리고 [2] 는 c
print("{:*^12}".format("center")) # ***center***
a = 5
b = 2
print(a // b, a % b, a ** 3) # 2 1 125

L = "Hi there!"
print(L[1::2]) # itee

while&function #31

TODO

빈칸 채우기 
(  ) get_max(a,b): 
  if a>b: 
    (   ) a 
  else:
    (   ) b
get_max(20,,10)
→ 답 : def return return

지역변수, 전역 변수 문제 나올 수 있음 에러나는 이유 설명하기 : 함수내에서 사용하는 a 는 지역변수다. 선언 먼저 하고 사용해야한다. 안그러면 아래와 같은 에러발생

def test():
    print(a)  # 컴파일 에러 UnboundLocalError: local variable 'a' referenced before assignment
    a = 20
    print(a)

a = 100  # a 전역변수
print(a)  # 100 출력
test()
print(a)