본문 바로가기

study

혼공 파이썬 2주차

■ 정수 나누기 연산자  : //    

1.5
1
2.44046
2.0
2

 

// 연산자는 소수점 이하의 내용을 버리는 것이다.

실습코드를 보면 float 실수형에 대해서는 결과값이 실수형으로 나온다.

정수형에 대해서는 정수형 결과가 나온다.

 

 

■ 나머지 연산자 : %

우리가 알고 있는 나머지 값을 추출합니다.

1
2.2022999999999993
2

화면과 같이 정수 / 실수에 따라서 계산하고 남은 나머지 값을 출력합니다.

 

 

■ 제곱 연산자 : ** 

print(1**6)
print(2**5)
print(3**4)
print(4**3)
print(5**2)
print(6**1)

 

 

 

 

■ 다른 언어 (c,java)사용하시다가 가장 처음 당황하는것

P.115) python은 변수를 정의할때, 자료형을 미리 정의하지 않습니다.

왼쪽 그림과 같이 정의하면 오류가 발생합니다.

 

 

 

 

 

■ 소수점이 있는 숫자 형식의 문자열을 int()함수로 변환하려고 할때

p.123

222.222로 int하면 222가 출력되지만, "222.222"를 int하면 오류가 발생한다.

오류가 발생할수 있으니, 문자열을 (정수or 실수)로 변환시 float사용을 권장함

 

 

222
222.222
222.222
222.222

str로 처리하는 경우 ""의 여부와 상관없이 잘 처리 됩니다.

 

 

 

 

 

https://pythontutor.com/

* 파이썬 코드 분석  ( 3.6 버전 까지만 지원)

■ 문자열의 format() 함수

  • "{} is {}".format(10, 20) // 이런 형태
  • "{} is very {}".format("aaa", "good") // 이런 형태
  • {} bind갯수가 더 많은 경우에는 오류가 발생하지  않는다.

■ format() 함수의 다양한 기능
    P.137 에 있는 내용

   {}을 사용하면, 그대로 string 문자열로 치환되어서 사용되지만, 조금 더 다양한 formatting이 사용될수 있습니다.

  • {} 대신에 {:d}를 입력하면 int형이 들어와야 한다 (인자값 체크)
    {:5d}는 총 5자리를 채우는 형태를 구성한다. // 자리수를 한정할때 사용한다.
    {:05d} 총 5자리 중에 빈 공간은 0으로 채우는 형태이다.

 

결과값))

52
   52
        52
00052
-0052




위에 예제에서 아래와 같은 패턴은 어떻게 동작할지 테스트 해보고 싶은 사항

Q1) {:05d} 0대신에 문자열을 넣으면 어떻게 될까?

A1) 오류가 발생합니다.

output_f = "{:A5d}".format(52) # ValueError: Invalid format specifier

Q2) {:3d}, {:03d}뒤에 bind되는 문자열이 3자리 이상이 되는 경우 어떠한 문자열을 출력할까?

A2) 길이를 정해놓았다고 해도, 최소 보장의 역활을 하고, 그 숫자를 넘어도 그대로 출력을 한다.

output_f = "{:3d}".format(1234567)      # 1234567
output_f = "{:d}".format(123)           # 123
output_f = "{:d}".format(1234567)       # 1234567
output_f = "{:03d}".format(1)           # 001
output_f = "{:05d}".format(1)           # 00001

 

■ 기호를 붙여서 출력하기 (p.138)
보통 양수면 별도로 + 기호를 출력하지 않는데, 의도적으로 부호를 출력하는 방법이다.
수식표기를 명확히 하는 방법인데, output_b, c의 경우 반대의 개념으로 음수표기&양수, 양수표기&음수로 되어 있는경우 결과값을

잘 살펴보길 바란다.

output_a = "{:+d}".format(52)   # +52 (예상했던 결과)
output_b = "{:-d}".format(52)   # 52 (음수표시를 했는데, 양수 인자값이 오는경우)
output_c = "{:+d}".format(-52)  # -52 (양수표시를 했는데, 음수 인자값이 오는경우)
output_d = "{:-d}".format(-52)  # -52 (예상한대로 음수표기와 음수값을 설정한 경우)

추가적으로 아래와 같은 패턴도 있다. (p.138)

조금 같은듯 다른듯한 패턴이다.

특정 길이를 정할수 있고, 명확히 기호를 표시하는 +, - 기호를 명시할수 있다.

a = "{: d}".format(52)      # < 52> 양수 : 기호 부분 공백
b = "{: d}".format(-52)     # <-52> 음수 : 기호 부분 공백
c = "{:5d}".format(52)      # <   52>
d = "{:+5d}".format(52)     # <  +52>   기호를 뒤로 밀기 : 양수
z = "{:+5d}".format(-52)    # <  +52>   기호를 뒤로 밀기 : 음수
e = "{:-5d}".format(52)     # <   52>
f = "{:=+5d}".format(52)    # <+  52>   기호를 앞으로 밀기 : 양수
g = "{:=+5d}".format(-52)   # <-  52>   기호를 앞으로 밀기 : 음수
i = "{:+05d}".format(52)    # <+0052>   0으로 채우기 : 양수
j = "{:+05d}".format(-52)   # <-0052>   0으로 채우기 : 음수

 

■ 부동소수점 / float형태를 표현하기

a = "{:f}".format(123.222)          # <123.222000>
b = "{:15f}".format(123.222)        # <     123.222000> 15칸 만들기
b = "{:+15f}".format(123.222)       # <    +123.222000> 15칸 부호 만들기
b = "{:+015f}".format(123.222)      # <+0000123.222000> 15칸 부호추가, 0으로 만들기
b = "{:+15.2f}".format(123.222)     # <        +123.22> 15칸 부호추가, 소수점 자리수 정하기
b = "{:.2f}".format(123.222)        # <123.22> 소수점을 정해서 표시하는 가장 일반적인 포맷으로 생각됨
  • 의미없는 소수점 제거하기
    {:g}를 사용해서 의미없은 0을 제거한다.
a = 52.0                        # 52.0
b = "{:g}".format(a)            # 52
c = "{:g}".format(52.00000)     # 52
d = "{:g}".format(000052.00000) # 52

 

■ 대소문자 바꾸기

  • upper(), lower()
    여기서 a 의 실제 값은 변경되지 않습니다.
  • P.141 // 이러한 원본을 변화시키지 않는 함수를 비파괴적 함수라고 합니다. (4장에서 구체적 설명)
a = "heLLO World"
b = a.upper()
c = a.lower()

■ 공백제거하기

보통 공백제거하면 trim이라는 함수가 생각이 난다.

python에서는 trim함수가 없습니다.  strip()을 이용합니다.

a = "   heLLO World    "
b = a.strip()       # <heLLO World>
# c = a.trim()      # 없음
c = a.rstrip()      # <   heLLO World> 오른쪽 공백 없음
d = a.lstrip()      # <heLLO World    > 왼쪽 공백 없음

 

■ 문자열의 구성 파악하기 : isOO() 

P.143

몇가지를 테스트 해보았다. 이런것은 잘 활용하면 코드작성시 Validation작성시 유용하게 코드 양을 줄일수 있다.

 

테스트 못해본 몇가지

 - isascii  : 파이썬 3.7 에서 새로 생긴 메서드. 문자열의 모든 문자가 ASCII 문자이면 True, 아니면 False를 반환한다. 공백 문자도 True를 반환한다. (https://bit.ly/3cm1pja)

- isnumberic : 숫자 관련된 부분이 decimal, digit등 여러가지가 있는데, 차이점 명확히 하기

- isprintable : 문자열이 모두 출력가능한 문자이면 True 반환, 그외는 False 반환.   

  ※ 출력 불가 문자 : Carrage Return 및 line feed (줄바꿈문자) https://homzzang.com/b/py-179

- istitle : 모든 단어의 첫 글자를 철자 문자열, 그렇지 않으면 거짓 대문자, 소문자와 참 다른 반환 인 경우

http://www.w3big.com/ko/python/att-string-istitle.html#gsc.tab=0

 

a = "   Hello   "
b = "Hello^^"
c = "World"
d = 123
d2 = 123.12
d3 = "123"
d4 = "123.12"
e = "   "
print(a.isalnum())    # False (공백애 있어서) 알파벳 또는 숫자로만 구성되어 있는지 파악
print(b.isalnum())    # False (특수문자가 있어서)
print(b.isalpha())    # False (특수문자가 있어서) 알파벳으로만 구성되어 있는지 파악
print(c.isalpha())    # True 알파벳으로만 구성되어 있는지 파악
print(c.isidentifier())    # True 문자열이 식별자로 사용할수 있는지 확인 (?? 의미파악이 잘 안됨)
print(a.isidentifier())    # False
print(b.isidentifier())    # False
print(d3.isdecimal())      # True 정수형태인지 파악(d, d2는 문자열이 아니기 때문에 isOOxx 함수를 사용못함)
print(d4.isdecimal())      # False (실수형이여서 False)
print(d3.isdigit())      # True 숫자로 인식될수 있는지 확인
print(d4.isdigit())      # False ?? 실수도 숫자형태인데, False를 return한다.
print(a.isspace())      # False 공백으로만 구성되어 있는지 확인
print(e.isspace())      # True 



■ 문자열 찾기 / 자르기

  • find / rfind  (오른쪽 부터 찾아서 위치반환) 
     find가 왼쪽 처음부터 찾으니, lfind가 필요없겠죠
  • in 
    True, False로 해당 문자열이 안에 포함되어 있는지 결과값 return
a = "Hello"
print ("He" in a) # True
  • split (문자열이 ▶ 리스트로 반환)
    문자열을 특정 문자로 자르는 역활을 한다. 
    결과값으로 리스트 ["a","b","c"] 형태를 반환한다.
    split에 사용한 문자열은 삭제되는 것을 볼수 있다. (두번째 실행 예제에서 l(영문) 없어진것을 확인가능
a = "Hello"
b = "h e l l o"
print (a.split())       # ['Hello']
print (a.split("l"))    # ['He', '', 'o']
print (b.split())       # ['h', 'e', 'l', 'l', 'o']

 

■ format vs f'{}' 문자열 구성

   {} 안에는 변수도 들어갈수 있고, python코드가 들어갈수 있다고 생각하면 됩니다.

  • f'{}' 형태는 python 3.6부터 지원함
  • f"""
    1+2 = {}
    2+2 = {}
    """
    이렇게 문장형태로 구성도 가능
  • p.149
    *에 대한 의미 //
    python에서 *, **의 구분을 보게 된다.
    * 는 전개연산자를 의미하는데, P.211에서 상세히 설명한다고 한다.

3장 

■ 비교 연산자

중요한 부분이라서 당연하지만, 다시한번 기록

==, !=

>, < 

<=, >=

print("bb" < "aa") # False
print("aa" < "bb") # True
print("가가" < "나나") # True
print("나나" < "가가") # False
x = 20
print( 10 < x < 30 ) # True

■ 논리 연산자

not , and , or

 

■ 참고

  • python datatime의 월(mon)은 0~11이다. 첫번째 1월달이 0으로 나온다

 

■ 기본 미션

p.187 3번 문제 
간단하게, 문자열을 입력하면 진행이 안되게 로직을 추가함

str_input = input("태어난 해를 입력해주세요.")

if (str_input.isdigit() != True):
    print("숫자 형태로 다시 입력하세요")
else:
    birth_year = int(str_input) % 12
    if birth_year == 0:
        print("원숭이 띠입니다.")
    elif birth_year == 1:
        print("닭 띠입니다.")
    elif birth_year == 2:
        print("개 띠입니다.")
    elif birth_year == 3:
        print("돼지 띠입니다.")
    elif birth_year == 4:
        print("쥐 띠입니다.")
    elif birth_year == 5:
        print("소 띠입니다.")
    elif birth_year == 6:
        print("범 띠입니다.")
    elif birth_year == 7:
        print("토끼 띠입니다.")
    elif birth_year == 8:
        print("용 띠입니다.")
    elif birth_year == 9:
        print("뱀 띠입니다.")
    elif birth_year == 10:
        print("말 띠입니다.")
    elif birth_year == 11:
        print("양 띠입니다.")

■ 선택 미션

  • if, else, elif
    여러조건이 조건식을 구성하는데 처음에는 if로 시작한다.
  • 조건절은 MECE적인 사고법으로 접근하는것이 좋다.
    • 조회하려는 조건이 모두 부족함 없이 다 채워지는 방식이다.
    • 원형 파이차트를 예를 들면 모든 색깔이 다 식별되어야 한다.
  • if로 elif로 중간중간 조건을 넣고 모든것에 해당이 안되면, else로 마지막 조건을 모두 포함하는 로직을 넣는다.
  •  

'study' 카테고리의 다른 글

혼공 파이썬 4주차  (0) 2022.07.31
혼공 파이썬 3주차  (0) 2022.07.24
혼공 파이썬 1주차  (0) 2022.07.04
혼공 머신러닝/딥러닝 6주차  (0) 2022.02.26
혼공 머신러닝/딥러닝 5주차  (0) 2022.02.18