Python
79일차 2023-06-29
choi Hoon
2023. 6. 29. 17:30
Python
Statement04 폴더 생성
if1.py
#0,0.0,0+0j는 False와 같고 None,''(빈문자열) ,
#빈 이터레이터 객체([],{},(),set()등)는
#조건식으로 판단시 False로 간주된다
if not 0:
print('0은 False다')
if not None:
print('None은 False다')
if not '':
print('\'\'은 False다')
if not []:
print('[]은 False다')
#조건식은 모든 식이 될 수 있다
num1 =9
if num1:
print('num1은',num1)
if num1 % 2:
print('num1 % 2의 값은(산술식)',num1 % 2)
if num1 % 2==0 and num1 >=10:
print('%d는 짝수고 10보다 크거나 같은 수이다' % num1)
#파이썬에서 조건식을 수학에서 사용하는 방식으로 간편화 할 수도 있다.
if 5 < num1 < 15:#num1 > 5 and num1 < 15
print('{}는 5보다 크고 15보다 작다'.format(num1))
if num1 %2 ==0:
pass
if num1 % 2 ==0 :
print('num1은 %d이다' % num1)
print('{}는 짝수다'.format(num1))
'''
ord(문자) : 문자의 아스키코드나 유니코드값을 반환
chr(숫자) : 숫자(아스키코드값 혹은 유니코드값)에 대응하는 문자를 반환
'''
print('[문자를 아스키(유니)코드로 변환]',ord('가'),sep='\n')
print('[아스키(유니)코드를 문자로 변환]',chr(44032),sep='\n')
code = ord(input('한 문자를 입력하세요?'))
print(code)
'''
문]사용자가 입력한 문자가 숫자인지 판단하여라
숫자면 "숫자입니다"라고 출력하여라
숫자가 아니면 "숫자가 아닙니다"라고 출력하여라
'''
isNumber = '0' <= chr(code) <= '9'
if isNumber:
print('숫자입니다')
if not isNumber:
print('숫자가 아닙니다')
'''
문]사용자가 입력한 값이 숫자인지 먼저 판단하고
숫자라면 2의 배수인지를 판단하여
2의 배수인 경우만 '2의 배수입니다'라고 출력하여라.
2의 배수가 아닌 경우 '2의 배수가 아니다'라고 출력
문자 '0'의 아스키 코드값:48, '1':49 '2':50......
'''
#방법1]하나의 조건식안에서 논리 연산으로 처리
isMultiple = '0'<=chr(code) <='9' and (code-ord('0')) %2 ==0
if isMultiple:
print('2의 배수입니다')
if '0'<=chr(code) <='9' and (code-ord('0')) %2 !=0:
print('2의 배수가 아닙니다')
#방법2]if문 안의 if문으로 처리
if '0'<=chr(code) <='9':
isMultiple=(code-ord('0')) %2 ==0
if isMultiple:
print('2의 배수입니다')
if not isMultiple:
print('2의 배수가 아닙니다')
결과)
if2.py
num1 = int(input('숫자 입력?'))
print('[if문 형식 첫번째로 짝/홀수 판단]')
#조건식이 두번 실행됨.
if num1 % 2==0:
print('짝수')
if not num1 % 2==0:
print('홀수')
print('[if문 형식 두번째로 짝/홀수 판단]')
#조건식 한번만 실행됨.
if num1 % 2==0:
print('짝수')
else:
print('홀수')
#[조건부 표현식- 다른 언어에서는 삼항연산자라 함]
'''
if ~else문과 같다.
코드를 짧게 표현할때 주로 사용(if ~else문 대신에)
구문]
변수 = 값 if 조건문 else 값
'''
print('[조건부 표현식(삼항 연산자)로 짝/홀수 판단]')
print('짝수' if num1 % 2==0 else '홀수')
#※else는 항상 if문과 짝을 이루어야 한다. 단독 사용불가
if num1 % 2==0:
print('짝수')
pass
#[x]아래 else는 짝을 이루는 if문이 없다.
#else:
# print('홀수')
#문]한 문자를 입력받아 숫자인지 아닌지
# if ~else문 과 조건부 표현식를 이용하여 판단하여라.
ch = input('한 문자를 입력?')
print('[if~else문]')
if '0' <= ch <='9':
print('숫자')
else:
print('숫자가 아님')
print('[조건부 표현식]')
print('숫자' if '0' <= ch <='9' else '숫자가 아님')
결과)
if3.py
kor,eng,math = map(int,input('세 개의 숫자 입력(공백구분)?').split())
avg = (kor+eng+math)/3
if avg >=90:
print('A학점')
elif avg >=80:
print('B학점')
elif avg >=70:
print('C학점')
elif avg >=60:
print('D학점')
else:
print('F학점')
'''
문] 사용자로 부터 한 문자를 입력받아 숫자이면 "숫자"
알파벳이면 "알파벳"
숫자도 알파벳도 아니면 "기타"를 출력하여라.
if ~ elif ~ else 사용
'''
word = input('한 문자를 입력?')
if '0' <= word <= '9':
print('숫자')
elif 'a' <= word <='z' or 'A' <= word <= 'Z':
print('알파벳')
else:
print('기타')
#문](종합)세 숫자 중 최대 값을 구하는
# 로직을 작성하자(if문 형식 3가지중 아무거나 사용가능)
max = kor
if max < eng:
max = eng
if max < math:
max =math
print('최대값:',max)
결과)
switch.py
'''
파이썬에는 switch문이 없다
딕션너리 와 사용자 정의 함수를 이용해서 switch문 효과를 낼수 있다
'''
kor,eng,math = map(int,input('세 개의 숫자 입력(공백구분)?').split())
avg = (kor+eng+math)//30
"""
def switch(key):
'''
학점을 반환하는 함수
key:학점
return:학점을 나타내는 문자열
'''
return {10:'A학점',9:"A학점",8:'B학점',7:'C학점',6:'D학점'}.get(key,'F학점')
print('평균:%.2f,학점:%s' % ((kor+eng+math)/3,switch(avg)))
"""
def switch(key):
return {
10:lambda : 'A학점',
9: lambda: 'B학점',
8: lambda: 'C학점',
7: lambda: 'D학점',
6: lambda: 'F학점',
5: lambda: 'F학점',
4: lambda: 'F학점',
3: lambda: 'F학점',
2: lambda: 'F학점',
1: lambda: 'F학점',
0: lambda: 'F학점'
}[key]
#f = switch(avg)
#print('평균:%.2f,학점:%s' % ((kor+eng+math)/3,f()))
#위 두줄을 한줄로
print('평균:%.2f,학점:%s' % ((kor+eng+math)/3,switch(avg)()))
#print('value:{},type:{}'.format(f,type(f)))
결과)
for.py
'''
for 변수 in 반복가능한 객체:
반복가능한 객체(Iteratable):요소가 여러개 있다. 하나씩 꺼내올 수 있다
반복가능한 객체 인지는 dir(객체)를 통해서 알 수 있다
__iter__라는 함수가 있다며 그것은 반복 가능한 객체다
반복기(Iterator): 반복가능한 객체의 __iter__()함수 호출시 반환된 객체.
반복기의 __next__()함수를 통해 요소를 하나씩 꺼내온다
Iterator를 만드는 방법 두가지
1.class로 만든다(__iter__(self),__next__(self)함수 오버라이딩)
2.함수로 만들거나(yield키워드로 요소를 반환하는 함수)
[for문 작동방식]
for 변수 in 반복가능한객체:
pass
1. 반복가능한객체의 __iter__()함수가 실행되어 iterator객체 생성
2. 반복때마다 iterator객체.__next__()함수가 호출되어 요소를 하나씩 꺼내와서 변수에 저장
3. 모든 요소를 다 꺼내오면 Stopiteration발생하여 for문 중지
'''
print('[문자열에서 한 문자씩 꺼내오기]')
for element in 'PYTHON':
print(element)
print('[문자열 길이 만큼 반복은 하고 꺼내온 값을 사용하지 않을때]')
#문자열 길이 만큼 HELLO출력 6번 출력
#아래 _(UNDER BAR)는 스트링 객체에서 꺼내온 값을 무시하고자 할때
for _ in 'PYTHON':
print('HELLO')
print(_)
#range()함수(생성자)는 Iterable객체를 반환한다(range타입)
a=range(5)
print(dir(a))
print('value:{},type:{}'.format(a,type(a)))
it=a.__iter__()
print(it.__next__())
print(it.__next__())
for i in a:
print(i)
print('[문자열 길이만큼 반복하기-len()함수 사용]')
for i in range(len('PYTHON')):
print('i가 %d일때 : %s' % (i,'HELLO'))
#range()함수
print('[range(숫자)]')
for index in range(5):#끝숫자-1
print('HELLO',index)
print('[range(시작숫자,끝숫자)]')
for index in range(5,10):#끝숫자-1
print('HELLO',index)
print('[range(시작숫자,끝숫자,증감폭(양수))]')
for index in range(5,10,2):#끝숫자-1
print('HELLO',index)
print('[range(시작숫자,끝숫자,증감폭(음수))]')
for index in range(10,5,-2):#끝숫자+1
print('HELLO',index)
#반복문을 이용해서 1부터 10까지 누적합:1+2+3+4+5+6+7+8+9+10
sum =0
for i in range(1,11):
sum+=i
print('{}부터 {}까지 누적합:{}'.format(1,10,sum))
#1부터 10까지 숫자중 2의 배수의 합:2+4+6+8+10
#방법1]2씩 증가하도록 증감식 작성
sum=0
for i in range(0,11,2):
sum += i
print('{}부터 {}까지 2의배수의 누적합:{}'.format(1, 10, sum))
#방법2]1부터 1씩증가하면서 10까지 반복하면서
# i의 값이 2의 배수인 경우에만 누적
sum=0
for i in range(1,11):
if i % 2 ==0:
sum+=i
print('{}부터 {}까지 2의배수의 누적합:{}'.format(1,10,sum))
print('for문이 끝난 후 i의 값:',i)
'''
문]1부터 100까지 숫자중 3의 배수 이거나 5의 배수인
숫자의 합을 구해라
단, 3과5의 공배수인 경우 ,누적합에 단 한번만
포함시켜라.
3+5+6+9+10+12+15+18+20+21+24+25+27+30......
'''
sum=0
for i in range(1,101):
if i % 3==0 or i % 5==0:
sum+=i
print('{}부터 {}까지 3 및 5의 배수의 누적합:{}'.format(1,100,sum))
'''
문]1부터 100까지 숫자중 3의 배수 이거나 5의 배수인
숫자의 합을 구해라
단, 3과5의 공배수는 제외시켜라
즉 15,30,45,60..은 제외
3+5+6+9+10+12+18+20+....
'''
#방법1] or 하고 and연산 사용
sum=0
for i in range(1,101):
if (i % 3==0 or i % 5==0) and i % 15 !=0:
sum+=i
print('{}부터 {}까지 3 및 5의 배수의 누적합(공배수 제외):{}'.format(1,100,sum))
#방법2]^(XOR)연산 사용
sum=0
for i in range(1,101):
if (i % 3==0) ^ (i%5==0):
sum += i
print('{}부터 {}까지 3 및 5의 배수의 누적합(공배수 제외):{}'.format(1,100,sum))
'''
이중 for문 :for문 안의 for문
이중 for문에서 바깥 for문은 행(row)를 의미
안쪽 for문은 열(column)을 나타낸다
'''
repeat=0
for i in range(3):
for k in range(3):
repeat+=1
print('HELLO',repeat)
결과)