zero-base 취업스쿨/스터디노트/1주차/파이썬 기초 #2

Sea Yoon·2023년 8월 3일

파이썬 기초,중급

목록 보기
2/8
post-thumbnail

산술연산자(곱셈 연산자)

str='Hi'
result = str * 7 
print('result:{}'.format(result))
#실행결과 result:HiHiHiHiHiHiHi

문자(열)을 곱할때는 숫자(정수,실수)를 이용하여 곱셈하는 것과 다르게 문자열을 반복하여 나타내는것을 알 수 있다.

나눗셈 연산자

num1 = 10
num2 = 3
result = num1 / num2 
print('result : %.2f' % result)
#실행결과 result : 3.33

%.nf 표현은 소수점 n자릿수까지만 나타내는 표현으로 위 식의 경우 10을 3으로 나누었을때 그 결과가 실수로 나오니 n 뒤에는 실수형 형식 문자인 %f를 붙이는 것이다. (만약 정수형 형식문자 %d 를 붙일 경우 결과값은 정수로 표현됨)

  • 0을 나눗셈하는 경우는 결과가 항상 0

  • 0으로 나누는 경우는 에러가 뜬다
    (ZeroDivisionError:division by zero)

  • 나눗셈 결과는 항상 float 이다.

num1=20
num2=5
result = num1 / num2
print(type(result))
#실행결과 <class 'float'>
  • 실습
korScore = int(input('국어점수:'))
engScore = int(input('영어점수:'))
matScore = int(input('수학점수:'))
total = korScore + engScore + matScore
print('합계점수는:{}'.format(total))
print('평균점수는:{}'.format(total/3))
#실행결과 
국어점수:80
영어점수:100
수학점수:80
합계점수는:260
평균점수는:86.66666666666667

나머지 연산자

나눗셈 나머지만 구함
'%' 기호를 이용하여 구함

num1 = 10 
num2 = 3
result =num1 % num2 
print(result)
#실행결과 1

몫 연산자

  • 나눗셈 결과 몫만 구함
    '//'기호를 이용하여 구함
num1 = 10
num2 = 3
result =num1 // num2
print(result)
#실행결과 3

나머지와 몫을 한번에 구하기

  • divmod()함수 이용
num1 = 10
num2 = 3
result = divmod(num1, num2)
print('result: {}'.format(result))
#실행결과 result: (3, 1)

여기에서 각각의 요소를 또 끄집어 낼수 있는데
인덱스라는걸 이용하면된다. (강의에서 훅 지나가는 말로 인덱스라고 했는데 용어를 구글링해보니 꽤 많이 중요한것같다..)

위 예제 소스코드에서 몫과 나머지 각각을 끄집어내려면 다음과 같이 작성하면 된다.

print('result: {}'.format(result[0])) #-->몫
print('result: {}'.format(result[1])) #-->나머지

왜 0과 1을 집어넣어야하는지 찾아보니 첫번째값은 무조건 0 이고 그 다음부터 순서가 이어진다고 한다. 즉 두번째값은 1이 되는것.
왜 첫번째값을 0 번째라고 지정해야하는지 이해못했지만 이해못하고 그냥 그렇다고 지나가는것이 좋을것같다...😅

거듭제곱 연산자

num1=2
num2=3
result= num1 ** num2 
print(result) 
#실행결과 8 

2의 3제곱이니 답은 8이 나온다.

제곱근 공식

n ** (1/m)

  • 예제
    2의 3 제곱근 구하기
result =2 ** (1/3) 
print('2의 3제곱근 %f' % result) 
#실행 결과 1.259921 

참고사항으로 python에는 math 모듈이라는것이 있는데
math 모듈에 제곱근을 구하는 sqrt()함수와 거듭제곱을 구하는 pow()함수가 있지만 그래도 위에서 얘기한 제곱근 공식, 거듭제곱 공식을 알아야한다.

왜냐.. 거듭제곱공식은 상관없지만 제곱근을 구하는 sqrt()함수는 2제곱근만 가능하기 때문.

import math
print('3의 제곱근 %f' % math.sqrt(3)) 
#실행결과> 3의 제곱근 1.732051

오늘 실습코딩 중 어려웠던 문제..🥲
<문제내용> "아들이 엄마한테 용돈을 받는데, 첫달에는 200원을 받고 매월 이전 달의 2배씩 인상하기로 했다. 12개월째 되는 달에는 얼마를 받을 수 있는지 계산해보자"

firstMoney = 200
after12Month = ((firstMoney * 0.01) ** 12)*100 
print(after12Month) 
#실행결과 409600.0
#이것을 다시 이쁘게 원화표시로 고치려면 format 이라는 함수를 사용하면 됩니다. 
#format 함수는 세자릿수마다 ','(쉼표)를 넣어주게됩니다. 
after12Month = int(after12Month) 
after12MonthFormated = format(after12Month,',')
print(after12MonthFormated,'원')
#실행결과 409,600 원

복합연산자

+= 덧셈 연산 후 할당
-= 뺄셈 연산 후 할당
*= 곱셈 연산 후 할당
/= 나눗셈 연산 후 할당
%= 나머지 연산 후 할당
//= 몫 연산 후 할당
**= 거듭제곱 연산 후 할당

비교연산자

  • 숫자 비교
    : >,>=,==(같다),!=(같지않다)

  • 예제

num1 = 5
num2 = 10
result = num1 != num2
print(result)
print(type(result))
#실행결과: True
<class 'bool'>
#모든 비교연산자의 결과는 bool 임을 알 수 있다. (True,False)
  • 문자비교
    : 아스키 코드를 이용한 비교연산
num1 = 'A'
num2 = 'S' 
print(num1 > num2) 
#실행결과 False, A를 십진법으로 나타냈을때 S보다 낮은 숫자여서 False 가 나옴. 
.
#알파벳을 입력하면 아스키 코드르 출력하는 코드 작성
a = input('알파벳 입력:')
print('{}'.format(ord(a)))
#아스키코드를 입력하면 문자를 출력하는 코드 작성 
a = int(input('아스키 코드 입력:'))
print('{}'.format(chr(a)))

논리연산자

A and B: A와 B 모두 True 인 경우만 결과값으로 True
A or B: A와 B 중 어느하나만 True이면 결과 값은 True
*not A: A의 상태를 부정하는 결과를 나타냄

  • 실습

<문제내용>"백신 접종 대상자는 20세 미만 또는 65세 이상자에 한합니다.'를 논리연산자를 이용해서 코딩해보자. "

age= int(input('나이 입력:'))
vaccine = (age<20) or (age>=65)
print('age:{}'.format(age))
print('result:{}'.format(vaccine))
#실행결과 
나이 입력:17
age:17
result:True

operator 모듈

operator 모듈을 사용하여 연산자를 대신하여 작성할 수 있다.
사용법은 import operator 를 쓰고 난뒤 작성한다.

  • 예시
import operator
num1 = 10 
num2 = 2
print(operator.mod(num1,num2))
#나눗셈 나머지를 구하는 함수로 실행결과는 0 이다. 
  • 실습

역시나 이 문제도 강의 보고 다시 직접 혼자서 풀었는데 쉽게 타자가 쳐지지 않고 모니터만 바라봤음..ㅠㅠ

<문제내용> "random 과 operator 모듈을 사용해서 10부터 100사이의 난수 중 십의 자리와 일의 자리가 각각 3의 배수인지 판단하는 코드를 작성해보자."

#랜덤 모듈, 오퍼레이터 모듈 불러오기
import random
import operator
#랜덤으로 난수 뽑기
randomNumber = random.randint(10,100)
#난수의 십의 자리 숫자 도출
num10 = operator.floordiv(randomNumber,10)
num1 = operator.mod(randomNumber,10)
print(randomNumber)
print('십의 자리는 3의 배수이다.: {}'.format(operator.mod(num10,3)==0))
print('일의 자리는 3의 배수이다.: {}'.format(operator.mod(num1,3)==0))
#실행결과 
43
십의 자리는 3의 배수이다.: False
일의 자리는 3의 배수이다.: True

조건식

<True if 조건 else False>
: 조건이 참이면 True의 내용을 돌려주고 거짓이면 False의 내용을 돌려준다.

*예제
<문제내용>
"적설량을 입력하고 적설량이 30 mm 이상이면 대설경보를 발령하고 그렇지 않으면 대설 경보를 해제하는 코드를 작성해보자"

snowAmount = int(input('적설량 :'))
MaxSnowAmount = 30
print('적설량 : {}mm,{}'. format(snowAmount, '대설경보 발령'))if snowAmount > MaxSnowAmount else\
print('적설량 : {}mm,{}'. format(snowAmount,'대설경보 해제' ))

조건식(if문,양자택일 조건문,다자택일 조건문)

  • if 조건식: (★콜론쓰기 중요!)
    (★들여쓰기 중요!)실행문
    -if 조건식이 참이면 실행문을 실행시키고 거짓이면 실행되지 않는다.
    -들여쓰기된 실행문을 코드블럭이라고 한다.
  • if~else문
#나이가 65세 이상이면 교통요금 무료를 적용하는 프로그램을 만들어보자
age = int(input('나이:'))
if age >= 65:
    print("교통요금 무료")
else:
    print("교통요금 유료")
#실행결과 
나이:24
교통요금 유료
#소수점 첫 번째 자리에서 반올림하는 프로그램을 만들어보자.
floatNumber = float(input('숫자를 입력하세요 :'))
print(int(floatNumber))
if floatNumber - int(floatNumber) > 0.5:
    print('올림: {}'.format(int(floatNumber)+1))
else:
    print('버림: {}'.format(int(floatNumber)))
#실행결과
숫자를 입력하세요 :3.7
3
올림: 4
#비올 확률을 입력하고 비올 확률이 55% 이상이면 '우산을 챙기세요'를 그렇지 않으면 '양산을 챙기세요'출력하는 코드를 작성하자.
rainyPercent = int(input('비올 확률:'))
if rainyPercent >= 55:
    result = '우산을 챙기세요'
else:
    result = '양산을 챙기세요'
print('비올 확률: {}%, {}'.format(rainyPercent, result))
#실행결과
비올 확률:55
비올 확률: 55%, 우산을 챙기세요
#계절을 입력하면 영어로 번역되는 프로그램을 만들어보자
season = input('계절을 입력해주세요:')
answer = ''
if season == '봄':
    answer = 'Spring'
elif season == '여름':
    answer = 'Summer'
elif season == '가을':
    answer = 'Fall'
else:
    answer = ('Winter')
print('{}'.format(answer))
#실행결과 
계절을 입력해주세요:가을 
Winter

오늘의 짧막한 공부후기

  1. 조건문 쓸때 ':' 안써서 오류 계속 남. 들여쓰기 안해서 오류남. else 는 들여쓰기 안해야하는데 들여쓰기해서 오류남
    오늘은 아주 오류의 연속인 날이였다😂
    계속 코드 쓰다보면 언젠가 익숙해지겠지..?

  2. 강의듣고 코드 이해한거랑 문제보고 혼자 스스로 푸는건 정말 다른문제였다....

profile
우직한 거북이

0개의 댓글