본문 바로가기
일/Python

Python) 학습 - 기본2일차(if, for, while)

by 멜랑멀리 2022. 12. 21.
SMALL

[ 5_if ]

# 제어문 또는 제어구조 : 코드에 대한 실행의 흐름을 제어하기 위해 제공되는 문법

# 1. 분기
# 2. 반복



# 조건에 따른 분기: if -> 어떤 조건이 참일 때 특정 코드를 수행하는 문법

# 사용방법
# if 조건식:          <- 반드시 콜론으로 끝나야 함.
# 다른 언어는 중괄호로 구분: {} , 파이썬은 중괄호를 사용하지 않음. (들여쓰기를 사용함. (1칸 이상, 4칸 권장))
# .... 조건식이 참일때 수행할 코드
#   ^--- 파이썬에서는 기존코드와 특정코드를 구분하기 위해 들여쓰기를 사용함. (4칸 들여쓰기 권장)     

num1 = 2
num2 = 1
if num1 > num2:
    print("OK")
    print("OK")
else :
    print("notOK")
    print("notOK")
  



# 사용자로부터 정수를 입력 받아 그 값이 0인지 아닌지를 판별

num = int(input("입력="))

if num == 0:
    print(f"입력={num}, 0이 맞음")
#else :
if num != 0 :
    print(f"입력={num}, 0이 아님")


# 연습문제1. 사용자로부터 자연수를 입력받아 짝수/ 홀수를 판별 (입력은 정수)

num = int(input("입력="))
if (num % 2) != 0 : 
    print("홀수")
if (num % 2) == 0 : 
    print("짝수")    
# else : 
#    print("짝수")    


# 이전의 코드는 경우에 따라 불필요한 연산이 발생.
# 파이썬은 상호베타적 처리를 위해 if ~ else 라는 문법을 제공.

# 사용방법 
# if 조건식:
# .... 조건식이 참일때 수행할 코드
# .... 조건식이 참일때 수행할 코드
# else:
# .... 조건식이 거짓일때 수행할 코드
# .... 조건식이 거짓일때 수행할 코드

num = int(input("입력="))
if num == 0:
    print(f"입력={num}, 0이 맞음")
else :
    print(f"입력={num}, 0이 아님")

# 연습문제2 1과 똑같은데, 연산은 1번만.

num = int(input("입력="))
if (num % 2) != 0 : 
    print("홀수")
else : 
    print("짝수")  

# 입력된 값이 0 인지 양수인지 음수 인지 판별하는 프로그램

num = int(input("입력="))
if (num > 0) : 
    print("양수")
elif (num < 0) : 
    print("음수")
else : 
    print("영(0)")

[ 6_if (2) ]

# 입력된 값이 0 인지 양수인지 음수 인지 판별하는 프로그램

num = int(input("입력="))

if (num > 0) : 
    print("양수")
else:
    if (num < 0) : 
        print("음수")
    else : 
        print("영(0)")  



# 이전의 코드는 분기의 중첩으로 코드의 가독성이 떨어지는 단점.
# 파이썬은 다중분기 if ~ elif ~ else 를 지원함.


num = int(input("입력="))

if (num > 0) : 
    print("양수")
elif (num < 0) : 
    print("음수")
else : 
    print("영(0)")  


# 연습문제 : 사용자로 부터 나이를 입력 받아 출력하는 프로그램. (나이는 정수) 
# 나이는 1~150, 이를 벗어나면 오류메세지

# 나이 입력(1~150): 20
# 당신의 나이는 20세 입니다.

num = int(input("나이 입력(1~150): "))

# if (num < 1 ) :
#     print(f"잘못 입력하셨습니다.")
# elif (num >= 150 ) :
#     print(f"잘못 입력하셨습니다.")
# else  :
#     print(f"당신의 나이는 {num}세 입니다.")

if (num < 1 ) | (num >= 150 ) :
    print(f"잘못 입력하셨습니다.")
else  :
    print(f"당신의 나이는 {num}세 입니다.")

# 논리 연산자 : 논리 타입의 값을 피연산자로 하는 연산자
# 1. and
# 2. or
# 3. not


# 1. and 연산자: 2개의 피연산자가 모두 참인 경우에만 참을 반환하고 나머지는 거짓을 반환
#                       논리곱 연산자
print( True and  True) # 1 and 1 = 1
print( True and False) # 1 and 0 = 0
print(False and  True) # 0 and 1 = 0
print(False and False) # 0 and 0 = 0

# 2. or 연산자: 2개의 피연산자중 하나만 참이어도 참을 반환하는 연산자
#                       논리합 연산자
print( True or  True) # 1 or 1 = 1
print( True or False) # 1 or 0 = 1
print(False or  True) # 0 or 1 = 1
print(False or False) # 0 or 0 = 0

# 3. not 연산자: 단항 연산자로 피연산자의 값을 반전
print( not True ) # not 1 = 0
print( not False) # not 0 = 1

num = int(input("나이 입력(1~150): "))

if (num < 1) or (num > 150) :
    print(f"잘못 입력하셨습니다.")
else  :
    print(f"당신의 나이는 {num}세 입니다.")
    

# 논리연산자를 더 파이썬스럽게 보이게 만든다.

num = int(input("나이 입력(1~150): "))

# 등호를 연쇄적으로 사용.
if (1 <= num <= 150): # comparison chaining - # 파이썬에서만 안전함을 보장함. 다른 언어는 보장못함.
    print(f"당신의 나이는 {num}세 입니다.")
else:
    print(f"잘못 입력하셨습니다.")

# switch - case 문을 지원하지 않음.

 

[ 7_for ]

# 반복
# 1. 원소 기반
# 2. 조건 기반


# 자료 구조
# 데이터와 데이터에 적용할 수 있는 함수나 명령의 모음. -> 장바구니

# 파이썬이 기본으로 제공하는 자료구조
# 1. 리스트
# 2. 튜플
# 3. 딕셔너리
# 4. 셋

# 리스트: 데이터의 추가된 순서가 유지되고 중복을 허용하는 선형 자료구조

# 리스트 생성 방법:
# [값1,값2,값3,...]
#   ^--- 원소, 요소, 항목

print([4,1,3,2]) # 추가된 순서가 유지
print([1,1,1,1]) # 중복을 허용

# 파이썬이 제공하는 모든 타입의 값을 저장할수 있음.
print([10,3.14,"hello",True,[1,2,3]])

# 원소 기반의 반복문 사용법
# for 변수명 in 리스트: <- 콜론(:)으로 끝나야함.
# ....반복할 코드 (들여쓰기로 구분자 사용.)
# ....반복할 코드 (들여쓰기로 구분자 사용.)

# hello x 5
for cnt in [1,2,3,4,5]: # 반복의 회수(원소의 개수)를 list로 작성.
#    print(cnt,"hello")
    print(f"{cnt} hello")

for cnt in [10,3.14,"hello",True]: # 이렇게도 됨.(원소의 개수:4 만큼 반복)
    print(f"{cnt} hello")

# 파이썬에서 반복문에서 변수를 사용하지 않을 경우, 관례적으로 변수명은  _ 을 사용.
for _ in [1,2,3,4,5]: # 무의미한 변수명 선언: _  (반복문안에서 사용하지 않는 변수명의 사용방법) # 주석보다 더 좋은 방법은 코드가 주석이 되는것.
    print(f"hello")




# 연습문제 : 구구단 2~9단

num1 = int(input("구구단 입력(2~9): "))

if( 2<num1 <9) :
    for num2 in [1,2,3,4,5,6,7,8,9]:
        print(f"{num1} x {num2} = {num1*num2}")
else :
    print(f"구구단은 2~9단으로 설정하세요: {num1}")        

# hello, world x 10 
for _ in [1,2,3,4,5,6,7,8,9,10]:
    print("hello,world")

# 100번, 1000번은?

# 정수 집합을 생성하는 함수: range

# 사용방법: range(start, stop, step)
# - start: 시작값
# - stop : 끝값(포함하지 않음) -> 반개구간 [start, stop)
# - step : 값사이의 간격

for var in range(1,11,1):
     print(f"{var}", end=" ")
print() # 단순개행하는 역할

for var in range(1,10+1,1):
    print(f"{var}", end=" ")



# 연습문제 : 구구단 2단 (range 사용)

num1 = int(input("구구단 입력(2~9): "))

for num2 in range(1,9+1,1):
    print(f"{num1} x {num2} = {num1*num2}")

# 연습문제 : 1이상의 자연수를 받아서 1부터 입력된 값 사이의 모든 자연수의 총합 (입력은 1이상의 자연수, 반복문사용)
# 자연수 입력(1이상): 10
# 1부터 10까지 자연수의 총합: 55

num1 = int(input("자연수 입력(1이상): "))
sum = 0
for num2 in range(1,num1+1):
    sum=num2+sum
    if (num1==num2):
        print(f"1부터 {num1}까지 자연수의 총합: {sum}")

# 프로그래밍 분야에서 일반적으로 수를 셀때, 0부터 시작(zero base)
# hello, world x5
for cnt in range(0, 4+1, 1):
    print(cnt, "hello, world")
    

# range 함수의 특징 1. 만약 간격(step)이 1이라면 이를 생략할수 있다.
# hello, world x5
for cnt in range(0, 4+1):
    print(cnt, "hello, world")

# range 함수의 특징 2. 만약 간격이 생략되어 있고 시작값이 0이면 이를 생략할수 있다.
# hello, world x5
for cnt in range(4+1):
    print(cnt, "hello, world")

# 반복횟수만 쓰면 5번반복해서 사용함.
for cnt in range(5):
    print(cnt, "hello, world")

for cnt in range(10):
    print(cnt, "hello, world")

# 연습문제, 2단부터 9단까지 한번에 출력 - 단사이에 빈줄 삽입

# for dan in range(2,9+1):
#     print(f"< {dan} 단 >")
#     print(f"{dan} x 1 = {dan*1}")
#     print(f"{dan} x 2 = {dan*2}")
#     print(f"{dan} x 3 = {dan*3}")
#     print(f"{dan} x 4 = {dan*4}")
#     print(f"{dan} x 5 = {dan*5}")
#     print(f"{dan} x 6 = {dan*6}")
#     print(f"{dan} x 7 = {dan*7}")
#     print(f"{dan} x 8 = {dan*8}")
#     print(f"{dan} x 9 = {dan*9}")
#     print()

for dan in range(2,9+1):
    print(f"< {dan} 단 >")
    for num in range(1,9+1):
        print(f"{dan} x {num} = {dan*num}")
    print()

# 반복문도 중첩이 가능.

for i in range(2):
    for j in range(3):
        print("hello")

# 연습문제 : 2단 - 9단 출력 (반복의 중첩)

for dan in range(2,9+1):
    print(f"< {dan} 단 >")
    for num in range(1,9+1):
        print(f"{dan} x {num} = {dan*num}")
    print()

# 1이상의 자연수 입력:5 
#  *
#  **
#  ***
# ****
# *****


num = int(input("1이상의 자연수 입력:"))

for repeat in range(1,num+1):
    for repeat2 in range(1,repeat+1):
        print(f"*",end="")
    print(f" ")

 

[ 8_while ]

# while: 조건 기반 반복문
# 사용방법: 
# while 조건식: 
# .... 조건식이 참인동안 반복 수행.
# .... 조건식이 참인동안 반복 수행.



# hello, world x3
for _ in range(3):
    print("hello, world")

print()

# while 의 경우 반복 횟수를 파이썬이 제어하지 않으므로 이를 직접 수행해야함.

cnt_num = 0
while (cnt_num<3):
    print("hello, world")
    cnt_num=cnt_num + 1


# 연습문제 구구단을 받아서 만드는

in_num = int(input("구구단 입력(2~9): "))
cnt_repeat = 1
while (cnt_repeat <10):
    print(f"{in_num} * {cnt_repeat} = {in_num * cnt_repeat}")
    cnt_repeat += 1


# 무한 반복하는 방법
# while True:
#.... 무한 반복할 코드
#.... 무한 반복할 코드

# break: 반복을 즉시 중단하고 반복문을 탈출하는 키워드


print ("# 메뉴 #")
print ("")

# 1부터 100 사이의 임의의수 구하는 방법
#import random 
#random.randint(시작값, 끝값) - 끝값을 포함함.
#print(random.randint(1,10))

# 연습문제: 숫자 알아맞히기 게임

# 숫자 알아맞히기 게임을 시작합니다.
# 1~100 값을 입력해주세요.
# 입력: 50
# 50보다 크다.
# 입력: 75
# 75보다 작다.
# 입력 63
# 정답입니다. 3번만에 맞춤.

import random 
get_random = random.randint(1,100)
cnt=1
print("1~100 값을 입력해주세요.")
while (True):   
    in_num = int(input("입력: "))
    if(get_random ==in_num):
        print(f"정답입니다. {cnt}번만에 맞춤.")
        # 1.바로 종료
        print("게임을 종료 합니다.")
        break;
        # 2. 반복, 종료 선택.
        # print(f"게임을 다시하시겠습니까?")
        # re_game = (input("다시(Y/N): "))
        # if(re_game=="Y"):
        #     get_random = random.randint(1,100)
        #     cnt=1
        #     print("1~100 값을 입력해주세요.")
        # else:
        #     print("게임을 종료 합니다.")
        #     break;
    elif(get_random>in_num):
        print(f"{in_num}보다 크다.")
    else:
        print(f"{in_num}보다 작다.")    
    cnt+=1

# 반복의 흐름을 제어하는 키워드
# 1. break   : 반복을 즉시 중단하고 반복문을 탈출하는 키워드
# 2. continue: 반복을 즉시 중단하고 그다음 반복을 수행하는 키워드

# 1~ 10까지의 자연수중 짝수만 출력.
for n in range(1,11):
    if(n%2) !=0:
        continue
    print(n, end=" ")
    
# cnt = 0;
# while (True):
#     cnt += 1
#     if(cnt%2==0):
#         print(f"{cnt}",end=" ")
#         if(cnt==10):
#             break
#     else:
#         continue




# while 도 중첩이 됨.
# 보통 while로 중첩을 잘하지는 않음.
LIST