728x90
반응형
SMALL

1. 스코프(scope)

  • 변수의 접근할 수 있는 범위
  • local: 가장 가까운 함수안의 범위
  • global: 함수 바깥의 변수 or import된 module
 

 
num1 = 10 # 글로벌 변수

def func1():
    num2 = 20 # 로컬 변수
    print(num2)
 
 

 
print(num1)
print(num2) # NameError: name 'num2' is not defined
 
 
 

 
num1 = 10 

def func1():
    num2 = 20 
    print(num2)
 

 
print(num1)
func1() # 로컬 변수를 가져오고싶으면 함수를 찍거나 리턴해서 가져오면 됌
 
10
20
 

 
# locals(): 로컬 변수를 확인해주는 함수
# globals(): r글로벌 변수를 확인해주는 함수

num1 = 10  # 글로벌 변수

def func1():
    num2 = 20 # 로컬 변수
    print('num1 로컬 변수: ', 'num1' in locals())
                              #num1 을 보낼때 문자열로 보내야함

def func2():
    num2 = 20 # 로컬 변수
    print('num2 로컬 변수: ', 'num2' in locals())

def func3():
    print('num1 글로벌 변수: ', 'num1' in globals())
 

 
func1()
func2()
func3()
 
num1 로컬 변수:  False
num2 로컬 변수:  True
num1 글로벌 변수:  True

 
num1 = 10

def func4():
    num1 = 20 # 지역변수가 우선순위
    print(num1)
 
 

 
func4() # 지역변수
 
20

 
print(num1) # 전역변수
 
10

2. global 키워드

  • 함수 내부에서 로컬변수가 아닌 글로벌 변수로 사용하게 함
 

 
num1 = 10
def func5():
    print(num1)

def func6(num):
    num1 = num # 로컬변수에 값을 저장했으므로 글로벌 변수의 값이 변경x
 
 

 
func5()
 
10
 

 
func6(5)
 

 
func5()
 
10

 
 
 
 
 

 
 
 
 
 
10
 

 
 
 
 
 
 

 
 
 
 
7

 

728x90
반응형
LIST

'파이썬' 카테고리의 다른 글

랜덤 모듈  (0) 2023.03.09
콜백 함수  (0) 2023.03.09
사용자 정의 함수(함수만들기)  (0) 2023.03.09
세트(set)  (0) 2023.03.08
자료구조- 딕셔너리(dictionary)  (0) 2023.03.08
728x90
반응형
SMALL

1. 함수

  • 변수 x,y에 대해 x값이 정해지면 그에 따라 y값을 결정하는것
  • 반복적으로 사용되는 가치있는 부분을 묶어서 하나의 집합으로 만듬
  • 코드를 재활용 하기 위한 목적
 

1-1. 이름만 있는 함수

def 함수명():
    함수가 호출되면 실행할 문장
    ...
함수명() # 호출
 

 
def func1():
    print('처음으로 만드는 함수!')
 
 

 
func1()
 
처음으로 만드는 함수!
 

 
func1()
func1()
 
처음으로 만드는 함수!
처음으로 만드는 함수!

 
for i in range(5):
    func1()
 
처음으로 만드는 함수!
처음으로 만드는 함수!
처음으로 만드는 함수!
처음으로 만드는 함수!
처음으로 만드는 함수!

1-2. 매개변수가 있는 함수

def 함수명(변수1, 변수2, ....):
    함수가 호출되면 실행할 문장
    ...
함수명(값1, 값2, ...) #호출

 
def func2(num):
    print(f'입력받은 숫자: {num}')
 

 
func2(10)
func2(4)
 
입력받은 숫자: 10
입력받은 숫자: 4

 
# start부터 end까지의 숫자를 더하는 함수
def func3(start, end):
    sum = 0
    for i in range(start, end + 1):
        sum += i
    print(f'{start}부터 {end}까지의 합: {sum}')
 

 
func3(1, 10)
func3(1, 100)
 
1부터 10까지의 합: 55
1부터 100까지의 합: 5050

1-3. 리턴값이 있는 함수

def 함수명(변수1, 변수2, ...):
    함수가 호출되면 실행할 문장
    ...
    return 값

값1 -> 변수1 값2 -> 변수2 리턴값 -> 변수

변수 = 함수명(값1, 값2, ...) # 호출
 

 
def func4():
    print('안녕하세요 python!')
 

 
# func4() 함수는 리턴값이없어서 a에 할당해줄 값은 없다.
a = func4()
print(f'a에 저장된 값: {a}')
 
안녕하세요 python!
a에 저장된 값: None
 

 
# 리턴값이 있는 함수는 재활용이 가능해서 많이 사용한다.
# 확장성(유연함) 이 있다.
def func5():
    return '🎁'
 
 

 
# 재활용
def hamsu():
    return '안녕하세요'
 

 
# 재활용
hamsu = hamsu()
print(hamsu, 'python')
 
안녕하세요 python
 

 
presents = func5()
print(f'presents에 저장된 값: {presents}')
 
presents에 저장된 값: 🎁
 

 
# num1.2는 함수가 실행될때만 동작하는 변수들이다.
# (함수안에서만 작동)(지역변수)
def func6(num1, num2):
    sum = num1 + num2
    return sum
 
 

 
result = func6(10) # TypeError: func6() missing 1 required positional argument: 'num2'
print(result)      # num2 의 값이 빠져있다는 뜻
 
 
 
 

 
result = func6(10, 5)
print(result)
print(sum) # 함수안의 변수
print(num1) # sum, num1, num2는
print(num2) # 함수밖에서 사용불가
 
 
 

1-4. 디폴트 매개변수

def 함수명(변수1=값1, 변수2=값2 ...):
    함수가 호출되면 실행할 문장  
    ...
    return 값
변수 = 함수명(값1, 값2 ...) # 호출
변수 = 함수명() # 호출

디폴트 매개변수를 첫번째 파라미터 하나에만 적용하는것은 불가

 

 
print(func6()) # TypeError: func6() missing 2 required positional arguments: 'num1' and 'num2'
# 매개변수가 지정되지 않음
 
 

 
# 디폴트 매개변수
def func6(num1 = 1, num2 = 1):
    sum = num1 + num2
    return sum
 
 

 
# 디폴트 매개변수
print(func6()) #매개변수가 없으면 디폴트값으로 계산
print(func6(10, 5)) # 매개변수를 넣을수도 있음
result = func6(7, 3) # 변수에 담아서도 사용가능
print(result) 
 
2
15
10
 

 
# 생략
# 디폴트 패러미터 생략은 뒷부분에만 가능하다
# 앞부분하나에만 적용하는것은 안됌
def func6(num1 = 1, num2):
    sum = num1 + num2
    return sum

# 올바른 예:
def func6(num1, num2 = 1):
    sum = num1 + num2
    return sum
 
 

 
func6()
 
2
 

1-5. 매개변수의 개수가 가변적인 함수

def 함수명(*변수):
    함수가 호출되면 실행할 문장
    ...
    return 값
# 호출
변수 = 함수명(값1, 값2, 값3 ....) # 여러개를 보내도 된다.
변수 = 함수명(값1) # 하나만 보내도 됌
변수 = 함수명() # 안보내도됌

가변적인 매개변수를 전달할 경우 함수 안에서 튜플 형태로 사용

 

 
# *args : 여러개의 매개변수를 받을때 관례적으로 사용하는 변수명
def func7(*args):
    result = 0
    # print(args) # 함수 안에서 print(args)를 찍으면 None 값이 같이 나옴
    for i in args:
        result += i
    return result
 

 
# 함수 안에서 print(args)를 찍으면 None 값이 같이 나옴
print(func7())
print(func7(10, 30, 20, 70))
print(func7(10))
 
0
130
10
 

1-6. 매개변수를 딕셔너리 구조로 전달받는 함수

def 함수명(**변수):
    함수가 호출되면 실행할 문장
    ...
    return 값
# 호출
변수 = 함수명(변수1=값1, 변수2=값2....) 

 
def func8(id, name, age):
    print(f'아이디: {id}')
    print(f'이름: {name}')
    print(f'나이: {age}')
 

 
# 매개변수명과 딕셔너리의 키가 같아야함
# 순서도 중요(생략도 가능해서 생략했을때 문제가 생김)
# 딕셔너리의 키는 반드시 문자열 형태
dic1 = {"id": 'apple', 'name':'김사과', 'age': 20}
 
 

 
# 딕셔너리는 **로 호출
# 함수에 프린트 적어놓아서 코랩에서는 프린트안쓴거
func8(**dic1)
 
아이디: apple
이름: 김사과
나이: 20

 
# * 데이터를 하나만 보낼경우 키가 저장됌
func8(*dic1)
 
아이디: id
이름: name
나이: age

 
# 딕셔너리로 만들어라
def func9(**args):
    # print(args)
    
    # id key를 딕셔너리에서 찾아서 호출
    # Json
    for i in args:
        if i == 'id':
            id = args[i]
    return id
 
 

 
# 딕셔너리로 만들어짐
user = func9(id = 'apple', name = '김사과', age = 20)
user
 
 

1-7. 리턴값이 여러개인 함수

def 함수명(변수1, 변수2 ...):
    함수가 호출되면 실행할 문장
    ...
    return 값1, 값2, ...

호출

원래는
변수 = 함수명(변수1, 변수2 ..) 이랬는데 이제는
변수1, 변수2, ... = 함수명(변수1, 변수2,...)
 

 
 
 
 
 

 
 
 
 
 
 

 
 
 
 
 
덧셈: 13, 뺄셈: 7, 곱셈: 30, 나눗셈: 3.3333333333333335
 

 
 
 
 
30

 

728x90
반응형
LIST

'파이썬' 카테고리의 다른 글

콜백 함수  (0) 2023.03.09
변수의 범위  (0) 2023.03.09
세트(set)  (0) 2023.03.08
자료구조- 딕셔너리(dictionary)  (0) 2023.03.08
제어문- 반복문(while, for)  (0) 2023.03.07
728x90
반응형
SMALL

1. 세트(Set)

  • 수학의 집합과 비슷한 형태로 순사가 없어 어떤값이 먼저 나올지 알 수 없고, 중복되는 데이터를 허용하지 않음
  • 딕셔너리처럼 중괄호{} 를 사용해서 선언하지만 key는 존재하지 않고 value만 존재
 

1-1. set 만들기

 

 
s1 = {} # 값이 비어있으면 데이터를 알수없어 딕셔너리가 생성 됌
print(s1)
print(type(s1))
 
{}
<class 'dict'>
 

 
s1 = {1, 3, 5, 7} # 값만 저장하게되면 set이 생성됌
print(s1)
print(type(s1))
 
{1, 3, 5, 7}
<class 'set'>
 

 
 
# list를 set으로 변환하기
li1 = [1, 3, 5, 7]
s2 = set(li1)
print(s2)
 
{1, 3, 5, 7}

 
# 중복된 값이 사라져있다.
s3 = {1, 3, 5, 3, 7, 9, 1}
print(s3)
 
{1, 3, 5, 7, 9}

 
li2 = [1, 3, 5, 3, 7, 9, 1]
print(li2)
s4 = set(li2) # set으로 변환하기
print(s4)
s4 = list(s4) # 다시 list로 변환
print(s4)
 
[1, 3, 5, 3, 7, 9, 1]
{1, 3, 5, 7, 9}
[1, 3, 5, 7, 9]

 
print(3 in s4)     # True
print(8 in s4)     # False
print(8 not in s4) # True
 
True
False
True
 

1-2. set 함수


 
 
# add(): set에 단일 데이터를 추가
s1 = {100, 200}
s1.add(150) # inplace 연산이라 바로 적용됌

print(s1)
s1.add(50) # 순서가 일정하지 않음
print(s1)
 
{200, 100, 150}
{200, 50, 100, 150}

 
# update(): set에 여러 데이터를 한번에 추가
s2 = {10, 20, 30}
s2.update([40, 50, 60, 20]) # 여러개를 넣을때는 대괄호 사용
print(s2)                   # 중복된 데이터는 사라진다.
 
{40, 10, 50, 20, 60, 30}
 

 
# remove(): set의 데이터를 제거, 제가할 데이터가 없으면 에러
s2.remove(50)
print(s2)
 
{40, 10, 20, 60, 30}

 
s2.remove(50) # KeyError: 50 없는것을 제거하려해서 에러
print(s2)
 
없는 것을 제거하려고 해서 에러가뜸

 


 
# discard(): set의 데이터를 제거. 제거할 데이터가 없어도 에러가 발생X
s2.discard(30)
print(s2)
 
{40, 10, 20, 60}

 
s2.discard(30)
print(s2)
 
{40, 10, 20, 60}

 
# copy(): set을 복사
# id(): 저장된 메모리 주소를 10진수로 표현
s3 = {10, 20, 30}
s4 = s3.copy()
print(s3)
print(s4)

print(id(s3))
print(id(s4))
# s3, s4는 다른 주소를 가지고 있다.
 
{10, 20, 30}
{10, 20, 30}
140193980010560
140193846584480
 

1-3. set의 연산자


 
 
 
s1 = {10, 20, 30, 40, 50}
s2 = {30, 40, 50, 60, 70}
 

 
# 합집합
result = s1 | s2
print(result)
result = s1.union(s2)
print(result)
 
{70, 40, 10, 50, 20, 60, 30}
{70, 40, 10, 50, 20, 60, 30}

 
# 교집합
result = s1 & s2
print(result)
result = s1.intersection(s2)
print(result)
 
{40, 50, 30}
{40, 50, 30}

 
# 차집합
result = s1 - s2
print(result)
result = s2 - s1
print(result)

result = s1.difference(s2)
print(result)
result = s2.difference(s1)
print(result)
 
{10, 20}
{60, 70}
{10, 20}
{60, 70}
 

 
 
# 대칭 차집합  (합집합 - 교집합)
result = s1 ^ s2
print(result)
result = s1.symmetric_difference(s2)
print(result)
 
{20, 70, 10, 60}
{20, 70, 10, 60}

2. set와 zip()함수


 
 
 
string = 'apple'
li = [1, 2, 3, 4, 5]
tu = ('김사과', '반하나', '오렌지', '이메론', '채애리')
 
 

 
print(zip(string, li, tu)) # <zip object at 0x7f8148338900> zip객체가 만들어진다
 
<zip object at 0x7f816c74de80>

 
print(list(zip(string, li, tu))) # 튜플로 반환된 zip객체를 list로 출력
 
[('a', 1, '김사과'), ('p', 2, '반하나'), ('p', 3, '오렌지'), ('l', 4, '이메론'), ('e', 5, '채애리')]
 

 
print(set(zip(string, li, tu))) # 튜플로 반환된 zip객체를 set로 출력
 
{('a', 1, '김사과'), ('p', 3, '오렌지'), ('e', 5, '채애리'), ('p', 2, '반하나'), ('l', 4, '이메론')}

 
 
print(dict(zip(string, li, tu))) # ValueError: dictionary update sequence element #0 has length 3; 2 is required
# 키랑 벨류를 분리 해주지않아서
 
 

# 키랑 벨류를 분리해줄수 없다고 에러가 뜬것


 
 
 
 
 
{1: '김사과', 2: '반하나', 3: '오렌지', 4: '이메론', 5: '채애리'}
 

 
 
 
 
 
{'a': '김사과', 'p': '오렌지', 'l': '이메론', 'e': '채애리'}
728x90
반응형
LIST

'파이썬' 카테고리의 다른 글

변수의 범위  (0) 2023.03.09
사용자 정의 함수(함수만들기)  (0) 2023.03.09
자료구조- 딕셔너리(dictionary)  (0) 2023.03.08
제어문- 반복문(while, for)  (0) 2023.03.07
제어문- 조건문(if 함수)  (0) 2023.03.07
728x90
반응형
SMALL

1. 딕셔너리(Dictionary)

  • 대응관계를 나타내는 자료형으로 key와 value라는 것을 한 쌍으로 갖는 형태
  • 하나의 딕셔너리의 key는 중복될 수 없다.
  • 하나의 딕셔너리의 value는 중복될 수 있음.
 

1-1. 딕셔너리 만들기

변수 = {키1: 값1, 키2: 값2....}

 
 
dic1 = {} # 빈 딕셔너리를 생성
print(dic1)
 
{}
 

 
 
# key에 다양한 여러가지 객체가 들어가기 가능
dic2 = {1:"김사과", 2:"반하나", 3: "오렌지", 4: "이메론"}
print(dic2)
 
{1: '김사과', 2: '반하나', 3: '오렌지', 4: '이메론'}

1-2. key를 통해 value찾기


 
 
dic2 = {1:"김사과", 2:"반하나", 3: "오렌지", 4: "이메론"}
# [1]은 키이지 인덱스가 아님
print(dic2[1])
 
김사과

 
 
dic3 = {"no": 1, "userid": 'apple', 'name': '김사과', 'hp': '010-1111-1111'}
print(dic3['no'])
print(dic3['userid'])
 
1
apple

1-3. 데이터 추가 및 삭제

 

 
 
dic4 = {1:'apple'}
print(dic4)

# 데이터 추가
dic4[100] = 'orange'
print(dic4)

dic4[50] = 'melon'
print(dic4)

print(type(dic4))

# 삭제
del dic4[1]
print(dic4)
 
{1: 'apple'}
{1: 'apple', 100: 'orange'}
{1: 'apple', 100: 'orange', 50: 'melon'}
<class 'dict'>
{100: 'orange', 50: 'melon'}

1-4. 딕셔너리 함수

 

 
dic3 = {"no": 1, "userid": 'apple', 'name': '김사과', 'hp': '010-1111-1111'}

# keys(): key의 리스트를 반환
print(dic3.keys())

# values(): value 리스트를 반환
print(dic3.values())

# items(): key와 value를 한쌍으로 묶는 튜플을 반환
print(dic3.items())

# get(): key를 이용해서 value를 반환
print(dic3.get('userid'))
 
dict_keys(['no', 'userid', 'name', 'hp'])
dict_values([1, 'apple', '김사과', '010-1111-1111'])
dict_items([('no', 1), ('userid', 'apple'), ('name', '김사과'), ('hp', '010-1111-1111')])
apple

 
print(dic3["age"]) # KeyError: 'age' 키가 없으면 에러
 
 

 
print(dic3.get('age')) # 키가 없으면 None 출력
print(dic3.get('age', '나이를 알수없음')) # None이 출력될때 대체할수 있는 값을 입력할수 있다.
 
None
나이를 알수없음
 

 
 
# in: key가 딕셔너리 안에 있는지 확인 Object class 이다
print('name' in dic3) # True
print('age' in dic3) # False
 
True
False

1-5. 반복문을 이용한 딕셔너리 활용

 

 
dic3 = {"no": 1, "userid": 'apple', 'name': '김사과', 'hp': '010-1111-1111'}
 
 

 
for i in dic3:
    print(i, end=" ") # 키만 복사해옴
 
no userid name hp 

 
for i in dic3.keys():
    print(i, end=" ") # 키만 복사해옴
 
no userid name hp 

 
 
for i in dic3.values():
    print(i, end=' ') # value만 복사
# 키를 찾을수 없는 방법이라 잘 사용안함
 
1 apple 김사과 010-1111-1111 

 
 
for i in dic3:
    print(dic3[i], end=" ") # 키를 가져와서 value를 반환
 
1 apple 김사과 010-1111-1111 

 
 
 
 
 
1 apple 김사과 010-1111-1111 

 
 
 
 
 
찾지 못했습니다.
key: userid values: apple
찾지 못했습니다.
찾지 못했습니다.
728x90
반응형
LIST

'파이썬' 카테고리의 다른 글

사용자 정의 함수(함수만들기)  (0) 2023.03.09
세트(set)  (0) 2023.03.08
제어문- 반복문(while, for)  (0) 2023.03.07
제어문- 조건문(if 함수)  (0) 2023.03.07
튜플(Tuple)  (0) 2023.03.07
728x90
반응형
SMALL

1. 반복문

 

1-1. 자료형 참/거짓 판단하기

  • 파이썬에서 사용하는 모든 자료형은 참 or 거짓으로 표현 가능
 

 
bool1 = True
print(bool1)
print(type(bool1))
 
True
<class 'bool'>
 
 

# int
# 0이 아닌 숫자는 모두 True, 0은 False
num1 = 10
print(num1)
print(type(num1))

print(bool(num1))

num2 = 0
print(num2)
print(type(num2))
print(bool(num2))
 
10
<class 'int'>
True
0
<class 'int'>
False
 
 

 
# str
str1 = "안녕"
print(str1)
print(type(str1))
print(bool(str1))
str2 = ""
print(str2)
print(type(str2))
print(bool(str2))
 
안녕
<class 'str'>
True

<class 'str'>
False
 
 

 
 
# list
list1 = [1, 2, 3]
print(list1)
print(type(list1))
print(bool(list1))

list2 = []
print(list2)
print(type(list2))
print(bool(list2))

 
[1, 2, 3]
<class 'list'>
True
[]
<class 'list'>
False
 
 

 
 
list1 = [1, 3, 5]

if list1: #값이 있어 True
    print('요소가 있습니다')
else:
    print('요소가 없습니다')
 
요소가 있습니다
 
 

1-2. 대입 연산자

  • =, +=, -=, *=, /=, %=
  • 왼쪽의 저장된 값과 오른쪽의 값을 연산한 뒤 다시 왼쪽에 대입 (inplace 연산)
 

 
num = 10

num += 1 # num = num + 1 과 같음
print(num)
 
11
 

 
 
num = 10
num -= 1 # num = num - 1
print(num)
 
9
 
 

 
num = 10
num *= 10
print(num)
 
100
 

 
num = 10
num /= 10
print(num)
 
1.0
 

 
num = 10
num %= 2
print(num)
 
0
 
 

1-3. while 문

while 조건식:
    조건식의 결과가 True인 동안 반복할 문장
    ...
 

 
 
# 무한루프
while true:
    print('끝나지 않는 반복')
 
 

 
i = 1

while i <= 5:
    print('Hello python')
    i += 1
print('현재 i의 값은:', i)
print('루프가 %d번 반복하였습니다' % (i-1))

 
Hello python
Hello python
Hello python
Hello python
Hello python
현재 i의 값은: 6
루프가 5번 반복하였습니다
 

 
print(f'현재 i의 값:{i}')
 
현재 i의 값:6
 

 
# 1 ~ 10까지의 총합
# 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10
'''
sum = 0, 1, 3, 6, 10, 15, 21, 28, 36, 45, 55 -> print
i   = 1, 2, 3, 4,  5,  6,  7,  8,  9, 10, 11
'''

i = 1
sum = 0

while i <= 10:
    sum += i
    i += 1
print(f'1부터 10까지의 합: {sum}')
 
1부터 10까지의 합: 55
 
 

문제 1

  • 1 ~ 100짝수의 총합을 구하는 프로그램을 작성해보자
 

 
i = 0
sum = 0

while i <= 100:
    if i % 2 == 0:
        sum += i
        i += 2
#    else:
#        i += 1
print(f'1~100까지의 짝수의 합: {sum}')
 
1~100까지의 짝수의 합: 2550
 
 

 
# 선생님 답안

i = 1
sum = 0

while i <= 100:
    if i % 2 == 0:
        sum += i
    i += 1
print(f'1부터 10까지의 합: {sum}')
 
1부터 10까지의 합: 2550
 
 

문제 2

  • 원하는 단을 입력받아 해당 단의 구구단을 출력하는 프로그램을 작성해보자
 

 
# 원하는 단을 입력하세요: 7
# 7단
# 7 * 1 = 7
# 7 * 2 = 14
# ...
# 7 * 9 = 63

dan = int(input('원하는 단을 입력하세요: '))
print('%d단' % dan)

i = 1

while i <= 9:
    print('%d * %d = %d' % (dan, i, dan * i))
    i += 1
 
원하는 단을 입력하세요: 5
5단
5 * 1 = 5
5 * 2 = 10
5 * 3 = 15
5 * 4 = 20
5 * 5 = 25
5 * 6 = 30
5 * 7 = 35
5 * 8 = 40
5 * 9 = 45
 
 

 
# 선생님 답안
dan = int(input('원하는 단을 입력하세요: '))
print(f'{dan} 단')

i = 1

while i <= 9:
    print(f'{dan} * {i} = {dan * i}')
    i += 1
 
원하는 단을 입력하세요: 5
5 단
5 * 1 = 5
5 * 2 = 10
5 * 3 = 15
5 * 4 = 20
5 * 5 = 25
5 * 6 = 30
5 * 7 = 35
5 * 8 = 40
5 * 9 = 45
 
 

1-4. for in 문

for 변수 in iterable 객체:
    이터러블 객체의 요소 갯수만큼 반복할 문장
    ...
  • ★★★ iterable 객체: 순서가 있고 요소가 있는객체
 

 
list1 = [10, 20, 30, 40]

for li in list1:
    print(li)

 
10
20
30
40
 

 

 
# isintance(이터러블한 객체인지 확인하고자 하는객체, collections.Iterable)
import collections

isinstance(list1, collections.Iterable)
 
True
 
 

 
# range(): 범위를 생성해주는 함수
# range(시작인덱스, 종료인덱스(여기 직전까지임), 증가값)
num = range(0, 10, 1)
print(num)
 
range(0, 10)
 

 
for i in num:
    print(i, end=" ")
 
0 1 2 3 4 5 6 7 8 9 
 

 
 
# import collections 해줘야 함
isinstance(num, collections.Iterable)
 
True
 
 

 
num = 10
# print(num)

for i in num:
    print(i, end=' ')
# TypeError: 'int' object is not iterable
 
 
 

 
isinstance(num, collections.Iterable)
 
False
 

 
# 증가값을 생략하면 기본값은 1
for i in range(0, 10):
    print(i, end=' ')
 
0 1 2 3 4 5 6 7 8 9 
 
 

 

 
# 시작값을 생략하면 기본값은 0
for i in range(10):
    print(i, end=' ')
 
0 1 2 3 4 5 6 7 8 9 
 

 
# 시작값은 1, 종료값은 10, 증가값은 2
for i in range(1, 10, 2):
    print(i, end=' ')
 
1 3 5 7 9 
 
 

문제

  • for in 문을 이용하여 1 ~ 100까지 짝수의 총합을 구하는 프로그램을 작성하기
 

 
sum = 0
for i in range(0, 101, 2):
    sum += i
print(sum)
 
2550
 

 
# 선생님 답안
sum = 0
for i in range(0, 101, 2):
    sum += i

print(f'1부터 100까지 짝수의 총합: {sum}')
 
1부터 100까지 짝수의 총합: 2550
 
 

1-5. enumerate

  • 반복문 사용시 몇번째 반복인지 인덱스 번호로 확인
  • 인덱스 번호와 요소를 튜플 형태로 반환
 

 
 
 
 
(0, 10)
(1, 20)
(2, 30)
(3, 40)
(4, 50)
 

 
 
 
 
 
index:0, value:10
index:1, value:20
index:2, value:30
index:3, value:40
index:4, value:50
 
 

1-6. zip() 함수

  • 객체가 담고 있는 원소를 엮어서 튜플의 형태로 반환
  • 매개변수의 길이가 다를 때는 짧은 매개변수 기준으로 데이터가 엮이고, 나머지는 버려짐
li1 = [10, 20, 30]
li2 = ['apple', 'banana', 'orange']
# (10, 'apple')
# (20, 'banana')
# (30, 'orange')

for i in range(len(li1)):
    print((li1[i], li2[i]))

# li1, li2의 요소 갯수가 같기때문에 괜찮지만 
# 다를경우도 있기 때문에 좋은 코드는 아니다.
 
(10, 'apple')
(20, 'banana')
(30, 'orange')

 
 
for l1, l2 in zip(li1, li2):
    print((l1, l2))
# 위의 코드의 더 좋은 버전
# for 변수1, 변수2 zip(이터러블객체1, iterable2):
 
(10, 'apple')
(20, 'banana')
(30, 'orange')

 
 
# 튜플의 형태로 반환한다.
for li in zip(li1, li2):
    print(li)
 
(10, 'apple')
(20, 'banana')
(30, 'orange')

 
# 3개도 튜플로 묶기 가능
for n, A, a in zip('12345', 'ABCDE', 'abcde'):
    print((n, A, a))
 
('1', 'A', 'a')
('2', 'B', 'b')
('3', 'C', 'c')
('4', 'D', 'd')
('5', 'E', 'e')

 
 
# 가장 객체가 적은것 기준으로 돌린다.
for n, A, a in zip('12345', 'ABCDEF', 'abcdef'):
    print((n, A, a))
 
('1', 'A', 'a')
('2', 'B', 'b')
('3', 'C', 'c')
('4', 'D', 'd')
('5', 'E', 'e')

1-7. list와 tuple을 for문과 함께 사용하기

 

 
 
# 리스트에서 for문 사용하기
li1 = ['apple', 'banana', 'orange', 'melon']

for i in li1:
    print(i, end=' ')
 
apple banana orange melon 

 
# 튜플에서 for문 사용하기
li1 = ('apple', 'banana', 'orange', 'melon')

for i in li1:
    print(i, end=' ')
 
apple banana orange melon 
 

문제 1

아래 score 리스트에 저장된 점수가 60점 이상인 학생이 몇명인지 알아보는 프로그램을 작성해보자

  • score = [90, 30, 50, 60, 80, 70, 100, 40, 20, 10]

 
score = [90, 30, 50, 60, 80, 70, 100, 40, 20, 10]
num = 0
for i in score:
    if i >= 60:
        num += 1
print(f"60 점 이상인 학생은{num}명 입니다.")    
 
60 점 이상인 학생은5명 입니다.

 
# 선생님 답안
score = [90, 30, 50, 60, 80, 70, 100, 40, 20, 10]
count = 0

for i in score:
    if i >= 60:
        count += 1
print(f'60점 이상인 학생의 수는 {count}명 입니다')
 
60점 이상인 학생의 수는 5명 입니다

2. 다중 반복문

  • 반복문이 2개 이상 겹쳐져 있는 형태

 
 
for i in range(1, 4):
    print(f'😎i: {i}')
    for j in range(1, 4):
        print(f'{" " * 4}😍j: {j}')
 
😎i: 1
    😍j: 1
    😍j: 2
    😍j: 3
😎i: 2
    😍j: 1
    😍j: 2
    😍j: 3
😎i: 3
    😍j: 1
    😍j: 2
    😍j: 3

 
 
# '😈'를 이용하여 아래와 같은 도형을 만들어 보자. (다중반복문으로!!!)
'''
😈 😈 😈 😈 😈
😈 😈 😈 😈 😈
😈 😈 😈 😈 😈
😈 😈 😈 😈 😈
😈 😈 😈 😈 😈
'''

for i in range(5):
    for j in range(5):
        print('😈', end=" ") # 25번 옆으로찍힌다.
    print() # print가 엔터키 역할

 
😈 😈 😈 😈 😈 
😈 😈 😈 😈 😈 
😈 😈 😈 😈 😈 
😈 😈 😈 😈 😈 
😈 😈 😈 😈 😈 

문제 1

'😈'를 이용하여 아래와 같은 도형을 만들어 보자. (다중반복문으로!!!)

😈 😈 😈 😈 😈
😈 😈 😈 😈
😈 😈 😈
😈 😈
😈


 
 
for i in range(5):

    for j in range(i, 5):           
        print('😈', end=" ")
    print()
    
 
😈 😈 😈 😈 😈 
😈 😈 😈 😈 
😈 😈 😈 
😈 😈 
😈 

 
 
# 선생님 답안
for i in range(5):
    for j in range(i, 5):
        print('😈', end=" ") 
    print() 
 
😈 😈 😈 😈 😈 
😈 😈 😈 😈 
😈 😈 😈 
😈 😈 
😈 

문제 2

'😈'를 이용하여 아래와 같은 도형을 만들어 보자. (다중반복문으로!!!)

😈
😈 😈
😈 😈 😈
😈 😈 😈 😈
😈 😈 😈 😈 😈


 
 
# for i in range(5):

for j in range(5):
    j += 1  
    print()      
    print(f"{'😈' * (j)}", end=" ")
        
 
😈 
😈😈 
😈😈😈 
😈😈😈😈 
😈😈😈😈😈 
 

 
 
# 선생님 답안
for i in range(5):
    for j in range(0, i + 1):
        print('😈', end=" ") 
    print() 
 
😈 
😈 😈 
😈 😈 😈 
😈 😈 😈 😈 
😈 😈 😈 😈 😈 

 
# 2단부터 9단까지 구구단을 출력하는 프로그램을 작성
# 2단
# 2 * 1 = 2
# 2 * 2 = 4
# ...

# 9단
# 9 * 1 = 9
# ...
# 9 * 9 = 81

for i in range(2,10):#단
    print(f'{i}단')
    # 2 * 1 = 2
    # 2 * 2 = 4
    for j in range(1,10):
        print(f'{i} * {j} = {i * j}')
    print()
 
2단
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
2 * 6 = 12
2 * 7 = 14
2 * 8 = 16
2 * 9 = 18

3단
3 * 1 = 3
3 * 2 = 6
3 * 3 = 9
3 * 4 = 12
3 * 5 = 15
3 * 6 = 18
3 * 7 = 21
3 * 8 = 24
3 * 9 = 27

4단
4 * 1 = 4
4 * 2 = 8
4 * 3 = 12
4 * 4 = 16
4 * 5 = 20
4 * 6 = 24
4 * 7 = 28
4 * 8 = 32
4 * 9 = 36

5단
5 * 1 = 5
5 * 2 = 10
5 * 3 = 15
5 * 4 = 20
5 * 5 = 25
5 * 6 = 30
5 * 7 = 35
5 * 8 = 40
5 * 9 = 45

6단
6 * 1 = 6
6 * 2 = 12
6 * 3 = 18
6 * 4 = 24
6 * 5 = 30
6 * 6 = 36
6 * 7 = 42
6 * 8 = 48
6 * 9 = 54

7단
7 * 1 = 7
7 * 2 = 14
7 * 3 = 21
7 * 4 = 28
7 * 5 = 35
7 * 6 = 42
7 * 7 = 49
7 * 8 = 56
7 * 9 = 63

8단
8 * 1 = 8
8 * 2 = 16
8 * 3 = 24
8 * 4 = 32
8 * 5 = 40
8 * 6 = 48
8 * 7 = 56
8 * 8 = 64
8 * 9 = 72

9단
9 * 1 = 9
9 * 2 = 18
9 * 3 = 27
9 * 4 = 36
9 * 5 = 45
9 * 6 = 54
9 * 7 = 63
9 * 8 = 72
9 * 9 = 81


문제

  • 2단부터 9단까지 구구단을 출력하는 구구단을 while문으로 작성해보자

 
 
dan = 2
while dan < 10:
    num = 1 # 한바퀴 돌고나면 다시 곱해지는 숫자가 1이 되어야 곱셈을 연산하기때문에
            # while문 안에서 변수를 계속 갱신할수 있게 지정해준다
    print(f'{dan}단')
    while num < 10:
        print(f'{dan} * {num} = {dan * num}')
        num += 1 #곱하기 한번하면 곱할숫자를 하나씩 늘려준다.
    dan += 1 #곱셈연산이 끝나면 단의 수를 하나 더해준다.
    print() #엔터키.
 
2단
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
2 * 6 = 12
2 * 7 = 14
2 * 8 = 16
2 * 9 = 18

3단
3 * 1 = 3
3 * 2 = 6
3 * 3 = 9
3 * 4 = 12
3 * 5 = 15
3 * 6 = 18
3 * 7 = 21
3 * 8 = 24
3 * 9 = 27

4단
4 * 1 = 4
4 * 2 = 8
4 * 3 = 12
4 * 4 = 16
4 * 5 = 20
4 * 6 = 24
4 * 7 = 28
4 * 8 = 32
4 * 9 = 36

5단
5 * 1 = 5
5 * 2 = 10
5 * 3 = 15
5 * 4 = 20
5 * 5 = 25
5 * 6 = 30
5 * 7 = 35
5 * 8 = 40
5 * 9 = 45

6단
6 * 1 = 6
6 * 2 = 12
6 * 3 = 18
6 * 4 = 24
6 * 5 = 30
6 * 6 = 36
6 * 7 = 42
6 * 8 = 48
6 * 9 = 54

7단
7 * 1 = 7
7 * 2 = 14
7 * 3 = 21
7 * 4 = 28
7 * 5 = 35
7 * 6 = 42
7 * 7 = 49
7 * 8 = 56
7 * 9 = 63

8단
8 * 1 = 8
8 * 2 = 16
8 * 3 = 24
8 * 4 = 32
8 * 5 = 40
8 * 6 = 48
8 * 7 = 56
8 * 8 = 64
8 * 9 = 72

9단
9 * 1 = 9
9 * 2 = 18
9 * 3 = 27
9 * 4 = 36
9 * 5 = 45
9 * 6 = 54
9 * 7 = 63
9 * 8 = 72
9 * 9 = 81


 
 
# 선생님 답안

# i = 2
# j = 1
# while i <= 9:
#     print(f'{i}단')
    
#     while j <= 9:
#         print(f'{i} * {j} = {i * j}')
#         j += 1
#     i += 1
#     j = 1
#     print()
 
 

문제

  • 아래 score 리스트의 요소를 모두 출력하는 프로그램을 작성해보자
  • score = [[80, 90, 50], [40, 70, 30], [90, 50, 100]]

 
 
score = [[80, 90, 50], [40, 70, 30], [90, 50, 100]]

for i in range(0, 3):
    for j in range(0, 3):
        print(score[i][j], end=" ")
 
80 90 50 40 70 30 90 50 100 

 
 
score = [[80, 90, 50], [40, 70, 30], [90, 50, 100]]
i = 0
j = 0
while i < 3:
    while j < 3:
        print(score[i][j], end=" ")
        j += 1   # j 인덱스 증가
    i += 1 # i 인덱스 증가
    j = 0 # j 초기화

 
80 90 50 40 70 30 90 50 100 

 
 
# 선생님 답안

# for i in range(3):    ### 상수를 고정해서 사용하면 데이터가 바뀌게 되었을때 
#     for j in range(3):### 코드를 변경하여야 하기때문에 아래 방법
#         print(score[i][j], end=" ")### 객체를 지정해버리는 것 이 더 좋다
### 파이썬에서만 사용가능한 방법임(아래)

for i in score:
    for j in i:
        print(j, end=" ")
 
80 90 50 40 70 30 90 50 100 
 

3. 컴프리헨션(Comprehension)

  • 이러블한 오브젝트를 생성하기 위한 방법 중 하나로 파이썬에서 사용할수 있는 유용한 기능
 

 
 
n = range(0, 10, 1)
print(n)
 
range(0, 10)

[ ]n = 10 result = [0 for i in range(n)] # 0 ~ 9 까지 반복하면서 각각에 0을 대입하고 리스트형태로 만들어  # result 라는 변수에 대입해라 print(result)
 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

 
 
arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

result = [n*n for n in arr]
# arr의 갯수만큼 반복하면서 요소를 n에 대입
# 그후 n*n 값을 뽑아서 리스트 형태로 출력하란 뜻
print(result)
 
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

 
 
arr = ['apple', 'banana', 'orange', 'melon']

result = [len(string) for string in arr]
# arr의 갯수만큼 반복하면서 요소를 string에다 대입,
# 그후 string의 요소의 길이를 result에 대입하여 리스트로 출력
print(result)
 
[5, 6, 6, 5]

 
 
# if 문도 사용 가능
result = [n for n in range(10) if n % 2 == 0]
print(result)
 
[0, 2, 4, 6, 8]
 

 
 
# 0 ~ 100의 숫자 중 3의 배수이며, 홀수인 숫자만 리스트에 저장하기

result = [n for n in range(101) if n % 3 == 0 if n % 2 != 0]
print(result)

result = [n for n in range(101) if n % 3 == 0 and n % 2 != 0]
print(result)

# 이 두가지 경우는 같은 이야기 이다.
 
[3, 9, 15, 21, 27, 33, 39, 45, 51, 57, 63, 69, 75, 81, 87, 93, 99]
[3, 9, 15, 21, 27, 33, 39, 45, 51, 57, 63, 69, 75, 81, 87, 93, 99]

 
 
arr = [-1, 0, -4, 24, 5, -10, 2]

# 양수는 리스트에 그대로 저장하고, 음수는 0으로 변환해서 저장하기

result = [n if n > 0 else 0 for n in arr] # 삼항연산자
print(result)
 
[0, 0, 0, 24, 5, 0, 2]
 

 
 
 
 
 
 
[1, 2, 2, 4, 3, 6]
[1, 2, 2, 4, 3, 6]

 
 
 
 
 
 
[[0, 0], [0, 0], [0, 0]]

728x90
반응형
LIST

'파이썬' 카테고리의 다른 글

세트(set)  (0) 2023.03.08
자료구조- 딕셔너리(dictionary)  (0) 2023.03.08
제어문- 조건문(if 함수)  (0) 2023.03.07
튜플(Tuple)  (0) 2023.03.07
자료구조- list  (0) 2023.03.06
728x90
반응형
SMALL

1. 제어문

  • 프로그램의 흐름을 제어하는 문장
    • 조건문 (if)
    • 반복문 (while, for)
 

2. 조건문

 

 

2-1 비교 연산자

  • '<' 오른쪽이 크다
  • '>' 왼쪽이 크다
  • '<=' 오른쪽이 왼쪽보다 크거나 같다
  • '>=' 왼쪽이 오른쪽보다 크거나 같다
  • '==' 좌우가 같다
  • '!=' 다르다
  • 항상 결과는 bool형으로 반환
 
print(10 > 5)
print(10 < 5)
print(10 >= 5)
print(10 <= 5)
print(10 == 5)
print(10 != 5)
 
True
False
True
False
False
True
 
 

2-2 if문

if 조건식(결과가 True or False가 나오는 문장):
    조건식이 True인경우 실행할 문장
    ...
 
bool1 = True

if bool1:
  print('결과는 참입니다')
print('프로그램을 종료합니다')
 
결과는 참입니다
프로그램을 종료합니다
 
 

 
bool2 = False

if bool2:
  print('결과는 참입니다')
print('프로그램을 종료합니다')
 
프로그램을 종료합니다
 
 
age = int(input('나이를 입력하시오: '))

if age > 19:
    print("성인입니다.")

print('입력한 나이:', age)
 
나이를 입력하시오: 5
입력한 나이: 5
 
 

 
age2 = int(input('나이를 입력하시오: '))

if age2 > 19:
    print("성인입니다.")
    print('넷플릭스 성인영화를 감상할 수 있습니다.')
print('입력한 나이:', age2)
 
나이를 입력하시오: 20
성인입니다.
넷플릭스 성인영화를 감상할 수 있습니다.
입력한 나이: 20
 
 

 
age3 = int(input('나이를 입력하시오: '))

if age3 > 19: print("성인입니다.") 
    # ':' 이 그다음문장 한줄만 영역으로 판단해줘서
    #     옆으로 작성 가능하다.

print('입력한 나이:', age3)
 
나이를 입력하시오: 15
입력한 나이: 15
 
 

2-3. if ~ else문

if 조건식(결과가 True or False가 나오는 문장):
    조건식이 True인경우 실행할 문장
    ...
else:
    조건식이 False인 경우 실행할 문장
    ...
 

 
age = int(input('나이를 입력하시오: '))

if age > 19:
    print("성인입니다.")
else:
    print("미성년입니다.")

print('입력한 나이:', age)
 
나이를 입력하시오: 10
미성년입니다.
입력한 나이: 10
 
 

 
age = int(input('나이를 입력하시오: '))

if age > 19:
    print("성인입니다.")
    print("넷플릭스 성인영화를 감상할 수 있습니다.")
else:
    print("미성년입니다.")
    print("디즈니를 보세요.")

print('입력한 나이:', age)
 
나이를 입력하시오: 20
성인입니다.
넷플릭스 성인영화를 감상할 수 있습니다.
입력한 나이: 20
 
 

2-4. if ~elif ~else 문

if 조건식1 (결과가 True or False가 나오는 문장):
    조건식1이 True인경우 실행할 문장
    ...

elif 조건식2:
    조건식1이 False, 조건식2가 True 경우 조건식2를 실행할 문장:
    ...

elif 조건식3:
    조건식1,2가 False, 조건식3가 True 경우 조건식2를 실행할 문장:

else:
    모든 조건식이 False인 경우 실행할 문장
    ...

* else는 필수가 아니다.
 

 
 
age = int(input('나이를 입력하시오: '))

if age > 19: # 조건문이 False일경우 그 아래의 조건문을 실행
    print("성인입니다.")

elif age > 14:
    print('청소년입니다.')

elif age > 6:
    print('어린이입니다.')

elif age > 0:
    print('유아입니다.')

elif age == 0:
    age2 = int(input('몇개월 인가요?: '))
    print('귀하는', age2, '개월 입니다.' )

    if age2 > 11: #조건문 안의 조건문도 가능
        print('1살로 다시 입력해주세요.')
    
    elif age2 > 5:
        print('어부바 하세요.')

    else:
        print('안고 입장해주세요.')
    print('더 자라고 오세요')
    
else:
    print("입력을 확인하시오.")

print('입력한 나이:', age)
 
나이를 입력하시오: 0
몇개월 인가요?: 4
귀하는 4 개월 입니다.
안고 입장해주세요.
더 자라고 오세요
입력한 나이: 0
 
 

2-5. 산술 연산자

  • +
  • -
  • '*'
  • /
  • %
  • //
  • '**'
 

 
print(10 + 3)
print(10 - 3)
print(10 * 3)
print(10 / 3)
print(10 % 3)
print(10 // 3)
print(10 ** 3)
 
13
7
30
3.3333333333333335
1
3
1000
 
 

2-6. 삼항 연산자 (if문인데 한줄짜리 문법)(elif가 없다)

'결과가 True일 때 실행할 문장' 'if' '조건식' 'else' '결과가 False일때 실행할 문장'
 

 
# 입력받은 숫자가 짝수인지 홀수인지
num = int(input('숫자를 입력하세요: '))

if num % 2 == 0:
    print('짝수')
  
else:
    print('홀수')
 
숫자를 입력하세요: 11
홀수
 
 

 
 
# 삼항 연산자
# 영어 문법이랑 비슷한 구조같다
# "프린트해라 짝수를 나머지가 0이라면
#  아니면 홀수를 프린트 해라"
num = int(input('숫자를 입력하세요: '))

print('짝수') if num % 2 == 0 else print('홀수')
 
숫자를 입력하세요: 13
홀수
 
 

문제.

  • 국어점수, 영어점수, 수학점수를 입력받아 총점, 평균, 학점을 구하는 프로그램을 작성해보자.
  • 단, 학점은 평균 기준이며 90점 이상은 A, 80점 이상은 B, 70점이상은 C, 60점 이상은 D, 나머지는 F로 함
 

 
kor = int(input('국어점수를 입력하시오: '))
eng = int(input('영어점수를 입력하시오: '))
math = int(input('수학점수를 입력하시오: '))
avr = (kor + eng + math) / 3
print('당신의 총점은 %d 입니다.' % (kor + eng + math))
print('당신의 평균은 %3.2f 입니다.' % avr )

if avr >= 90:
    print('당신의 학점은 A입니다.')
elif avr >= 80:
    print('당신의 학점은 B입니다.')
elif avr >= 70:
    print('당신의 학점은 C입니다.')
elif avr >= 60:5
    print('당신의 학점은 D입니다.')
else:
    print("당신은 F입니다.")
 
국어점수를 입력하시오: 55
영어점수를 입력하시오: 55
수학점수를 입력하시오: 5
당신의 총점은 115 입니다.
당신의 평균은 38.33 입니다.
당신은 F입니다.
 
 

 
# 선생님 답안지
kor, eng, math = input("국어, 영어, 수학 점수를 차례로 입력하시오: ").split(" ")
tot = int(kor) + int(eng) + int(math)
avg = tot / 3

hak = 'F학점'
if avr >= 90:
    print('당신의 학점은 A입니다.')
elif avr >= 80:
    print('당신의 학점은 B입니다.')
elif avr >= 70:
    print('당신의 학점은 C입니다.')
elif avr >= 60:
    print('당신의 학점은 D입니다.')

print('총점: ', tot)
print('평균: ', avr)
print('학점: ', hak)
 
국어, 영어, 수학 점수를 차례로 입력하시오: 15 75 75
당신의 학점은 A입니다.
총점:  165
평균:  100.0
학점:  F학점
 
 

 
 
# 삼항 연산자
kor, eng, math = input("국어, 영어, 수학 점수를 차례로 입력하시오: ").split(" ")
sum = int(kor) + int(eng) + int(math)
avr = sum / 3
print(print("당신의 학점은 A") if sum / 3 >= 90 else print("당신의 학점은 B") if sum / 3 >= 80 else print("당신의 학점은 C") if sum / 3 >= 70 else print("당신의 학점은 D") if sum / 3 >= 60 else print("당신은 낙제 입니다."), "당신의 총점은 %d 점 이고 평균은 %3.2f점 입니다." %(sum, avr))
 
국어, 영어, 수학 점수를 차례로 입력하시오: 15 15 15
당신은 낙제 입니다.
None 당신의 총점은 45 점 이고 평균은 15.00점 입니다.
 
 

 
# 삼항 연산자
kor, eng, math = input("국어, 영어, 수학 점수를 차례로 입력하시오: ").split(" ") 
print(print("당신의 학점은 A") if (int(kor) + int(eng) + int(math)) / 3 >= 90 else print("당신의 학점은 B") if (int(kor) + int(eng) + int(math)) / 3 >= 80 else print("당신의 학점은 C") if (int(kor) + int(eng) + int(math)) / 3 >= 70 else print("당신의 학점은 D") if (int(kor) + int(eng) + int(math)) / 3 >= 60 else print("당신은 낙제 입니다."), "당신의 총점은 %d 점 이고 평균은 %3.2f점 입니다." %((int(kor) + int(eng) + int(math)),(int(kor) + int(eng) + int(math))/3))
 
국어, 영어, 수학 점수를 차례로 입력하시오: 100 100 100
당신의 학점은 A
None 당신의 총점은 300 점 이고 평균은 100.00점 입니다.
 
 

문제 2.

  • 숫자를 입력받아 2의 배수인지, 3의 배수인지 아니면 2,3의 배수가 모두 아닌지를 판별하는 프로그램을 작성해보자
 

 
num = int(input("숫자를 입력하시오: "))

if num % 2 == 0:
    print("2의 배수입니다")

elif num % 3 == 0:
    print("3의 배수입니다")

else:
    print("2,3의 배수가 모두 아닙니다")
 
숫자를 입력하시오: 69
3의 배수입니다
 
 

 
# 선생님 답안
num = int( input('숫자를 입력하세요: '))

if num % 2 == 0:
    if num % 3 == 0:
        print(f'{num}은(는) 2와 3의 배수')
    else:
        print(f'{num}은(는) 2의 배수')
elif num %3 == 0:
    print(f'{num}은(는) 3의 배수')
else:
    print(f'{num}은(는) 2와 3의 배수가 아님')
 
숫자를 입력하세요: 7
7은(는) 2와 3의 배수가 아님
 
 
# 삼항연산자
num = int(input("숫자를 입력하시오: "))
print("2와3의 배수입니다") if num % 6 == 0 else print("2의 배수입니다") if num % 2 == 0 else print("3의 배수입니다") if num % 3 == 0 else print("2,3의 배수가 모두 아닙니다")
 
숫자를 입력하시오: 24
2와3의 배수입니다
 
 
# 삼항연산자 선생님답안
num = int(input('숫자를 입력하세요: '))

print(f'{num}은(는) 2의 배수') if num % 2 == 0 else print(f'{num}은(는) 3의 배수') if num % 3 == 0 else print(f'{num}은(는) 2,3의 배수가 아님')
 
숫자를 입력하세요: 7
7은(는) 2,3의 배수가 아님
 
 

2-7. 논리연산자(AND)

식(T) AND 식(T) = True
  • 양쪽 두식의 값이 True인 경우 결과가 True가 되는 연산자
AB결과
True True True
True False False
False True False
False False False

ex) 정보처리 기사 자격을 취득하기 위해서는 모든 과목을 40점 이상, 평균이 60점 이상이 되어야 함

 
# 로그인 프로그램 만들기
# 아이디: admin, 비밀번호: 1234

userid = input('아이디를 입력하세요: ')
userpw = input('비밀번호를 입력하세요: ')

if userid == 'admin' and userpw == '1234':
    print('로그인 되었습니다.')
else:
    print('아이디 또는 비밀번호를 확인하세요.')

 
아이디를 입력하세요: admin
비밀번호를 입력하세요: 1234
로그인 되었습니다.
 
 

2-8. 논리 연산자(OR)

  • 양쪽의 두 식의 값이 하나라도 True인 경우 결과가 True가 되는 연산자
AB결과
True True True
True False True
False True True
False False False

엄빠 모셔와!

 
# 주민등록 번호에 의한 성별을 판별하는 프로그램 만들기
# 0010113068518
num = input('주민번호를 -없이 입력하세요: ')

if num[6] == '1' or num[6] == '3' or num[6] == '5' or num[6] == '9':
    print("남자")
else:
    print("여자")

 
주민번호를 -없이 입력하세요: 0010113068518
남자
 
 

2-9. 논리 연산자(NOT)

  • bool의 값을 반대로 변경해주는 연산자
 

 
bool1 = True

if bool1:
    print('결과는 참입니다.')
else:
    print('결과는 거짓입니다.')
 
결과는 참입니다.
 
 

 
bool1 = True

if not bool1:
    print('결과는 참입니다.')
else:
    print('결과는 거짓입니다.')
 
결과는 거짓입니다.
 
 

과제

아래와 같이 출력되는 이유를 알아보자

 

[165]
 
0초
3.3333333333333335
 
 
False
 
 

실수가 메모리에 저장될때 메모리에 32칸을 차지한다고 하면 그중 정수부분과 실수부분을 나누어 앞과 뒤의 칸에 2진법으로 저장을 하게 되는데 0.1단위 소숫점을 2진법으로 표현하면 무한히 길어지게 되어 일정부분을 컷하고 저장을하게 된다. 그 컷한만큼의 오차율이 있기때문에 0.1+1.1=1.2 가 False 값으로 나오게 되고 10/3=3.333...5 로 표기 된다.

# 앱실론(실제 가격의 편차가 나는것)

728x90
반응형
LIST

+ Recent posts