1. return

  • return은 함수의 결괏값을 돌려주는 명령어입니다.
  • 함수는 입력값을 받아 어떤 처리를 한 후에 결과값을 돌려주는 형태입니다.
  • 함수에서는 결괏값을 오직 return 명령어로만 돌려받을 수 있습니다.
  • 만약 결과값이 없는 경우라면 반환값으로 None을 출력할 것입니다.

ex)

def format_name(f_name, l_name):
  formated_f_name = f_name.title()
  formated_l_name = l_name.title()
  return f"{formated_f_name} {formated_l_name}"

print(format_name("red", "blue"))

 

1) 실습예제

exercise) 

def is_leap(year):
  if year % 4 == 0:
    if year % 100 == 0:
      if year % 400 == 0:
        return True
      else:
        return False
    else:
      return True
  else:
    return False

def days_in_month(year, month):
  month_days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]  
  
 
 
 
 
 
  year = int(input("Enter a year: "))
month = int(input("Enter a month: "))
days = days_in_month(year, month)
print(days)

위 코드는 수정하지 않고 중간에 days_in_month(year, month)함수를 수정하여 입력한 달은 몇일까지 있는지 또 윤년인 2월은 29를 출력하는 코드를 작성하세요

 

Solution)

def is_leap(year):
  if year % 4 == 0:
    if year % 100 == 0:
      if year % 400 == 0:
        return True
      else:
        return False
    else:
      return True
  else:
    return False
    
    def days_in_month(year, month):
  month_days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]  
  if is_leap(year) and month == 2:
    return 29
  return month_days[month - 1]
    
    
    year = int(input("Enter a year: "))
month = int(input("Enter a month: "))
days = days_in_month(year, month)
print(days)

 

2. 계산기

Exercise) 두 수를 입력받아 사칙연산을 수행하는 프로그램을 작성하세요(단, 함수정의 및 호출을 이용해야 합니다.)

 

Solution)

def add(n1 ,n2):
  return n1 + n2

def subtract(n1, n2):
  return n1 - n2

def multiply(n1, n2):
  return n1 * n2

def divide(n1, n2):
  return n1 / n2

n1 = float(input("First number?\n"))
n2 = float(input("Second number?\n"))

operator = input("which operator do you want? +,-,*,/\n")

if operator == "+":
  print(add(n1 ,n2))
elif operator == "-":
  print(subtract(n1 ,n2))
elif operator == "*":
  print(multiply(n1 ,n2))
elif operator == "/":
  print(divide(n1 ,n2))

 

1. Dictionary

  • 딕셔너리는 키(key)와 값(value)이 한 쌍이 하나의 대응 관계를 가지고 있는 자료형 입니다.
  • 예를 들면 "김씨" : "여자", "박씨" : "남자" 이런식으로 "김씨"라는 Key가 열쇠고 그 "김씨"의 값으로 "여자"라는 것이 쌍을 이루는 자료형 입니다.

딕셔너리 = { 키: 값 }

딕셔너리 = { Key1: Value1, Key2: Value2, Key3: Value3, Key4: Value4}

 

ex) 

programming_dictionary = {
  "Bug": "An error in a program that prevents the program from running as expected.", // key1: value1
  "Function": "A piece of code that you can easily call over and over again.",// key2 : value2
}

 

2. 리스트와 딕셔너리 중첩

  • 딕셔너리의 기본 형태는 {key: value}이지만 value의 값에 단순한 값을 넣는 것이 아니라, 리스트나 딕셔너리를 넣을 수 있다. 
  • 즉, 딕셔너리에서 중첩이란 그 안에 다른 리스트나, 딕셔너리를 넣는 것을 말한다. 

ex) 딕셔너리 안의 리스트

 

travel_log = {
  "France": ["Paris", "Lille", "Dijon"],
  "Germany": ["Berlin", "Hamburg", "Stuttgart"],
}

 

ex) 딕셔너리 안의 딕셔너리

 

travel_log = [
{
  "country": "France", 
  "cities_visited": ["Paris", "Lille", "Dijon"], 
  "total_visits": 12,
}

 

1) 실습예제

Exercise) 해당 코드는 수정하지 않고 중간에 코드를 추가하여 travel_log에 딕셔너리를 추가하는 코드를 작성하세요(단, 함수를 정의하여 그 함수를 사용해 추가해야합니다.)

travel_log = [
{
  "country": "France",
  "visits": 12,
  "cities": ["Paris", "Lille", "Dijon"]
},
{
  "country": "Germany",
  "visits": 5,
  "cities": ["Berlin", "Hamburg", "Stuttgart"]
},
]








add_new_country("Russia", 2, ["Moscow", "Saint Petersburg"])
print(travel_log)

 

Solution)

travel_log = [
{
  "country": "France",
  "visits": 12,
  "cities": ["Paris", "Lille", "Dijon"]
},
{
  "country": "Germany",
  "visits": 5,
  "cities": ["Berlin", "Hamburg", "Stuttgart"]
},
]


def add_new_country(country, visits, cities):
  new_country = {}
  new_country["country"] = country
  new_country["visits"] = visits
  new_country["cities"] = cities
  travel_log.append(new_country)
  
  
  
  add_new_country("Russia", 2, ["Moscow", "Saint Petersburg"])
print(travel_log)

'Python Study' 카테고리의 다른 글

Python Study(return)  (0) 2023.03.08
Python Study(함수 정의 및 호출 응용)  (0) 2023.03.02
Python Study(반복문(While))  (0) 2023.02.18
Python Study(함수 정의 및 호출/들여쓰기)  (0) 2023.02.18
Python Study(반복문(for))  (0) 2023.02.05

1. 함수정의 및 호출 (매개변수 여러개)

  • 함수를 정의할때 함수의 매개변수를 여러개 정의하여 사용할 수 있습니다.
  • 함수를 호출할 때도 마찬가지로 정의한 매개변수만큼 똑같은 개수로 호출해야 합니다.

ex) def function (name, location)

           print(f"Hello {name}")

           print(f"waht is like in {location}?")

      function("red", "Seoul")

 

2. 함수정의 및 호출 (키워드인자)

  • 함수 호출시 인수의 이름을 지정하여 값을 전달하는 방식이다. 이 방식은 인자의 이름에 전달하고자 하는 값을 직접 지정하여 호출한다.
  • 함수 호출시 인자의 순서는 1순위로 순서에 의한 매칭이 완료되고 나서 키워드 인수 매칭이 되기 때문에 순서 지정에 신경써야 한다

 

1) 실습예제

Exercise)

test_h = int(input("Height of wall: "))
test_w = int(input("Width of wall: "))
coverage = 5
paint_calc(height=test_h, width=test_w, cover=coverage)

위 코드는 수정하지 않고 해당코드 위에 코드를 추가하여 페인트칠에 필요한 페인트통이 몇개 필요한지 알려주는 코드를 작성하세요

** 필요한 페인트통 계산법 = height*width/cover

 

Solution)

import math

def paint_calc(height, width, cover):
    paint = math.ceil(height * width / cover)
    print(f"You'll need a {paint} cans of paint")


test_h = int(input("Height of wall: "))
test_w = int(input("Width of wall: "))
coverage = 5
paint_calc(height=test_h, width=test_w, cover=coverage)

 

2) 실습예제

Exercise)

n = int(input("Check this number: "))
prime_checker(number=n)

위 코드는 수정하지 않고 해당코드 위에 코드를 추가하여 입력받은 수가 소수인지 아닌지 판별해주는 코드를 작성하세요

** 소수 판별법: 예를들어 입력받은 수가 7이면 7은 1과 자기자신으로밖에 나누어지지않기 때문에 소수에 해당합니다.

 

Solution)

def prime_checker(number):
    is_prime = True
    for checker in range(2, number):
        if number % checker == 0:
            is_prime = False
    if is_prime:
        print("It's a prime number")
    else:
        print("It's not a prime number")


n = int(input("Check this number: "))
prime_checker(number=n)

'Python Study' 카테고리의 다른 글

Python Study(return)  (0) 2023.03.08
Python Study(딕셔너리)  (0) 2023.03.06
Python Study(반복문(While))  (0) 2023.02.18
Python Study(함수 정의 및 호출/들여쓰기)  (0) 2023.02.18
Python Study(반복문(for))  (0) 2023.02.05

1. While문

  • while문이란 조건식이 참(True)인 경우 실행문이 계속적으로 실행되는 파이썬 문법을 말합니다.
  • for문과 동일하게 실행문이 반복 실행하지만, 그 반복횟수를 알 수 없는 경우 while문을 사용하여 효과적으로 코딩할 수 있습니다.

ex)

i = 0                     # 초기식
while i < 100:            # while 조건식
     print('Hello, world!')    # 반복할 코드
     i += 1                    # 변화식
  • i=0.으로 시작하여 while문에서 조건을 판별한 뒤 참일경우 밑에 코드를 실행합니다.
  • 거짓일 경우 반복문을 끝내고 빠져나와 다음코드를 수행합니다.

 

1) 실습예제

Exercise) 다음 프로그램을 이용해 함수 정의 및 반복문을 사용해서 깃발까지 로봇이 도달하고 깃발에 도달 시 멈추게 되는 프로그램을 만드세요

 

Solution)

 

2) 실습예제

Exercise) 다음 프로그램을 이용해 함수 정의 및 반복문을 사용해서 깃발까지 로봇이 도달하고 깃발에 도달 시 멈추게 되는 프로그램을 만드세요

 

Solution)

1. 함수 정의 및 호출

  • 코드의 반복을 줄이거나 어떠한 용도를 위해 특정 코드들을 모아둔 것을 함수라고 한다.
  • 한 번 작성해두면 해당 코드가 필요할 때 함수를 호출해서 쉽게 재사용 할 수 있고, 용도에 따라 분리가 가능해 가독성이 좋다.

1) 사용방법

def 함수명(매개변수):

   <수행할 문장>//함수 정의

함수명(매개변수)// 함수 호출

 

ex) 

def my_function():
  print("Hello")
  print("Bye")

my_function()

 

2) 실습예제

Exercise) 다음 프로그램을 이용해 함수를 정의하여 한바퀴돌아 다시 제자리로오는 프로그램을 만드세요

 

Solution)

 

2. 들여쓰기

  • 코딩을 할 때, 가독성을 위해 들여쓰기를 합니다.
  • 다른 프로그램 언어에서는 {}을 사용하여 영역을 지정합니다. 하지만 파이썬은 들여쓰기를 사용하여 영역을 지정합니다. 그렇기 때문에 파이썬에서 들여쓰기란 문법적인 강제사항입니다.
  • 코드 블럭을 구성하기 위해 if, for, class, def 등등 을 작성하면서 나오는 : 다음 아랫 줄은 반드시 들여쓰기를 해야합니다. 들여쓰기의 방법은 한칸, 두칸, 4칸, 탭 등 여러가지 방식이 있습니다.

ex)

if a == 10:
print('10입니다.') 
# 들여쓰기 문법 오류
if a == 10:
     print('10입니다.')

'Python Study' 카테고리의 다른 글

Python Study(함수 정의 및 호출 응용)  (0) 2023.03.02
Python Study(반복문(While))  (0) 2023.02.18
Python Study(반복문(for))  (0) 2023.02.05
Python Study(리스트/중첩 리스트)  (0) 2023.02.01
Python Study(random모듈)  (0) 2023.02.01

1. for(반복문)

for문은 원하는 명령을 반복할 때 쓰입니다

 

ex) 리스트를 만들어 for문을 시용해 리스트의 원소들을 출력해 보겠습니다

fruits = ["Apple", "Peach", "Pear"]
for fruit in fruits:
    print(fruit)
    
결과: Apple
	Peach
	Pear

 

1) 실습예제

Exercise)

student_heights = input("Input a list of student heights ").split()
for n in range(0, len(student_heights)):
    student_heights[n] = int(student_heights[n])

위 코드는 수정하지 않고 코드를 추가하여 입력한 키들의 평균을 출력하는 프로그램을 작성하세요

 

Solution)

student_heights = input("Input a list of student heights ").split()
for n in range(0, len(student_heights)):
    student_heights[n] = int(student_heights[n])
    
total_height = 0
for sum_height in student_heights:
    total_height += sum_height

len_height = 0
for sum_len_height in student_heights:
    len_height += 1

avg_height = total_height / len_height
print(round(avg_height))
  • 먼저 키의 합계를 담을 변수를 선언합니다
  • for문 안에 total_height += sum_height는 다음과 같은 수식을 의미합니다
  • total_height = total_height + sum_height
  • 따라서 반복문을 통해 입력된키를 최종키에 더하고 그 최종키를 다시 다음 입력된키와 더해서 모든 입력된 키들의 합을 구합니다
  • 평균키를 구하려면 키의합계를 사람수대로 나누면됩니다
  • 키의개수는 반복문을 통해 계속 1씩더하고 새로운 변수를 만들어 평균키를 저장하여 출력합니다.

 

2. for문과 range()함수

  • 앞에서는 리스트를 이용해 for문을 사용하는 방법이었습니다.
  • 이번에는 숫자를 이용해 1 부터 100까지의 합과 같은 사람이 계산하기에 시간이 많이드는 계산을 하는 방법입니다.

ex) 1부터 100까지 합을 구하는 for문을 만들어보겠습니다

total = 0
for number in range(1, 101):
    total += number
print(total)
  • 최초합계는 0으로 저장합니다
  • for문 안에 number라는 변수를 선언하고 1부터 100까지(1, 100은 1부터 99를 의미합니다) 반복하게 합니다
  • 처음은 합계의 1을더해 total변수에 저장하고 그 다음은 total변수의 1에 2를 더한 값을 total에 저장하는 방식으로 100까지 반복합니다
  • 최종적으로 계산한 값을 출력합니다.

 

1) 실습예제

Exercise) 1부터 100까지 짝수만 더한 값을 출력하는 프로그램을 만드세요

 

Solution)

total = 0
for number in range(2, 101, 2):
    total += number
print(total)
  • total변수를 선언합니다
  • range(a, b, c)는 a부터 b-1까지 c만큼 건너뛴 숫자들을 반복하라는 뜻입니다 즉, (2, 101, 2)는 2부터 100까지 2만큼 건너서 숫자들을 계산하라는 뜻입니다 (ex)2+4+6+8+10+...
  • total변수에 더한값들을 저장해 반복합니다
  • 최종적으로 계산한 값을 출력합니다

 

3. 비밀번호 생성기

Exercise)

import random

letters = [
    'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
    'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D',
    'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
    'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
]
numbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
symbols = ['!', '#', '$', '%', '&', '(', ')', '*', '+']

print("Welcome to the PyPassword Generator!")
nr_letters = int(input("How many letters would you like in your password?\n"))
nr_symbols = int(input(f"How many symbols would you like?\n"))
nr_numbers = int(input(f"How many numbers would you like?\n"))

위 코드는 수정하지 않고 코드를 추가하여 랜덤한 비밀번호를 만들어주는 프로그램을 작성하세요(단, 문자와숫자,기호의 위치는 고정되어도 괜찮습니다)

 

Solution)

import random

letters = [
    'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
    'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D',
    'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
    'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
]
numbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
symbols = ['!', '#', '$', '%', '&', '(', ')', '*', '+']

print("Welcome to the PyPassword Generator!")
nr_letters = int(input("How many letters would you like in your password?\n"))
nr_symbols = int(input(f"How many symbols would you like?\n"))
nr_numbers = int(input(f"How many numbers would you like?\n"))


password = ""
for f_letters in range(1, nr_letters+1):
  ch_letters = random.choice(letters)
  password += ch_letters

for f_numbers in range(1, nr_numbers+1):
  ch_numbers = random.choice(numbers)
  password += ch_numbers

for f_symbols in range(1, nr_symbols+1):
  ch_symbols = random.choice(symbols)
  password += ch_symbols

print(password)

 

1. 리스트

  • 파이썬에서는 기본 데이터 타입인 숫자형 타입, 불리언 타입, 문자열 타입과는 별도로 이들로 구성되는 다양한 컨테이너 형태의 데이터 구조를 제공합니다.
  • 그 중에서도 가장 많이 사용되는 것이 바로 리스트(list) 타입입니다.
  • 리스트는 데이터들을 잘 관리하기 위해서 묶어서 관리할 수 있는 자료형 중의 하나 입니다.

 

1) 리스트 만들기

  • 파이썬에서 리스트는 다음과같은 구조로 만들 수 있습니다

변수이름 = [요소1,요소2]

  • 이렇게 대괄호를 이용해서 리스트를 만들 수 있으며, 리스트 내부에 값은 문자열이 오든, 숫자가 오든 데이터 타입이 통일되지 않아도 상관없습니다.

ex)

states_of_america = ["Delaware", "Pennsylvania", "New Jersey", "Georgia"]
print(states_of_america)

[결과]: ['Delaware', 'Pencilvania', 'New Jersey', 'Georgia']

 

2) 리스트에 값 추가하기

  • 리스트의 append 함수를 이용해서 리스트의 끝에 값을 추가할 수 있습니다

 

ex)

states_of_america = ["Delaware", "Pennsylvania", "New Jersey", "Georgia"]

states_of_america.append("Texas")

print(states_of_america)

[결과]: ['Delaware', 'Pencilvania', 'New Jersey', 'Georgia', 'Texas']

 

2-1 리스트에 여러값들을 추가하기

  • 리스트에 한가지 값이 아닌 여러가지 값들을 추가하고 싶을때는 extend 함수를 이용해서 추가할 수 있습니다

 

ex)

states_of_america = ["Delaware", "Pennsylvania", "New Jersey", "Georgia"]

states_of_america.extend(["New York", "Ohaio"])

print(states_of_america)

[결과]: states_of_america = ['Delaware', 'Pennsylvania', 'New Jersey', 'Georgia', 'New York', 'Ohaio']

 

3) 리스트 값 삭제하기

  • 리스트의 remove함수를 이용해서 특정 값을 리스트에서 삭제할 수 있습니다

 

ex)

fruits_vegetables = [
    "Strawberries", "Spinach", "Kale", "Nectarines", "Apples", "Grapes",
    "Peaches", "Cherries", "Pears", "Tomatoes", "Celery", "Potatoes"
]

fruits_vegetables.remove("Strawberries")

print(fruits_vegetables)

[결과]: ['Spinach', 'Kale', 'Nectarines', 'Apples', 'Grapes', 'Peaches', 'Cherries', 'Pears', 'Tomatoes', 'Celery', 'Potatoes']

 

4) 실습 예제

Exercise)

names_string = input("Give me everybody's names, separated by a comma. ")
names = names_string.split(", ")

위 코드를 수정하지 않고 코드를 추가하여 입력된 이름을 랜덤으로 뽑아 밥값을 내는 프로그램을 작성하세요

*Hint* 리스트를 사용하고, len()함수를 사용해 보세요

 

Solution)

names_string = input("Give me everybody's names, separated by a comma. ")
names = names_string.split(", ")

import random

len_names = len(names)

rand_name = random.randint(0, len_names - 1)

person = names[rand_name]

print(f"{person} is going to buy the meal today")
  • 랜덤 모듈을 불러옵니다
  • 입력된 이름이 몇개인지 len()함수로 개수를 셉니다
  • 랜덤하게 뽑기 위해 random.randint함수를 사용합니다
  • 랜덤으로 뽑힌 값을 리스트에 대입해야 하기 때문에 0부터 시작하여 변수에서 1을 뺀 숫자까지만 뽑게 합니다
  • person이라는 변수에 랜덤하게 뽑힌값을 names리스트에 넣어줍니다
  • 그렇게 되면 예를 들어 이름이 5개면 0부터 4까지 랜덤하게 값을 뽑고 3이 뽑혔다면 names[3]이 되어 names 리스트의 3자리의 위치한 이름이 출력됩니다
  • f스트링으로 person변수를 대입해 밥값낼 사람이 누구인지 출력합니다  

 

2. 중첩 리스트

  • 중첩 리스트는 리스트안에 또다른 리스트가 있는것으로 즉, 두개의 리스트를 하나로 합친것입니다.

ex)

list1 = [1,2,3,4,5]

list2 = ["a","b", "c", "d", "e"]

list3 = [list1, list2]

print(list3[1],[1])

  • 위 코드의 내용은 list1,list2 두개의 리스트를 list3로 묶어서 list3의 1번 리스트에 1번요소를 출력하란 내용입니다
  • 즉 출력문은 b입니다

 

Exercise)

fruits = ["Strawberries", "Nectarines", "Apples", "Grapes", "Peaches", "Cherries", "Pears"]
vegetables = ["Spinach", "Kale", "Celery", "Potatoes"]

dirty_dozen = [fruits, vegetables]
print(dirty_dozen[0][1])
  • fruits와 vegetables라는 두개의 리스트를 만듭니다
  • dirty_dozen이라는 리스트로 두개의 리스트를 묶습니다
  • dirty_dozen리스트의 0번째 리스트에서 1번째 요소를 출력합니다

 

1) 실습예제

Exercise)

row1 = ["⬜️", "⬜️", "⬜️"]
row2 = ["⬜️", "⬜️", "⬜️"]
row3 = ["⬜️", "⬜️", "⬜️"]
map = [row1, row2, row3]
print(f"{row1}\n{row2}\n{row3}")
position = input("Where do you want to put the treasure? ")




print(f"{row1}\n{row2}\n{row3}")

위 코드를 수정하지 않고 중간에 코드를 추가하여 두자리의 정수를 입력받았을 때 행렬의 위치로 x가 표시되는 프로그램을 작성하세요

ex) 입력값: 23

2행3열의 위치에 X가 표시되면 됩니다.

row1 = ["⬜️", "⬜️", "⬜️"]
row2 = ["⬜️", "⬜️", "X"]
row3 = ["⬜️", "⬜️", "⬜️"]

 

Solution)

row1 = ["⬜️", "⬜️", "⬜️"]
row2 = ["⬜️", "⬜️", "⬜️"]
row3 = ["⬜️", "⬜️", "⬜️"]
map = [row1, row2, row3]
print(f"{row1}\n{row2}\n{row3}")
position = input("Where do you want to put the treasure? ")

first_position = int(position[0])
second_position = int(position[1])

select_map = map[first_position - 1]
select_map[second_position - 1] = "x"

print(f"{row1}\n{row2}\n{row3}")
  • 입력받은 두자리 정수를 리스트를 이용해 0번째와 1번째 수로 나눕니다
  • 만약 13을 입력했다면 첫번째 수는 1이지만 이를 0번째부터 시작하는 리스트에 대입해야 하기때문에 해당 변수에 -1을 하여 map리스트에 대입합니다
  • 따라서 13의 첫번째 자리인 1은 map리스트의 0번째인 row1리스트가 출력됩니다
  • 두번째 자리인 3은 아까 선택된 row1리스트에서 2번째 요소이고 그 안에 x를 대입합니다

 

3. 가위바위보 게임

Exercise)

rock = '''
    _______
---'   ____)
      (_____)
      (_____)
      (____)
---.__(___)
'''

paper = '''
    _______
---'   ____)____
          ______)
          _______)
         _______)
---.__________)
'''

scissors = '''
    _______
---'   ____)____
          ______)
       __________)
      (____)
---.__(___)
'''

위 코드는 수정하지 않고 코드를 추가하여 컴퓨터와 가위바위보 게임을 하는 프로그램을 만드세요

* 조건은 0은 바위 1은 보 2는 가위로 생각합니다 

Solution)

rock = '''
    _______
---'   ____)
      (_____)
      (_____)
      (____)
---.__(___)
'''

paper = '''
    _______
---'   ____)____
          ______)
          _______)
         _______)
---.__________)
'''

scissors = '''
    _______
---'   ____)____
          ______)
       __________)
      (____)
---.__(___)
'''


list = [rock, paper, scissors]

human = input(
    "What do you choose? Type 0 for Rock, 1 for Paper or 2 for Scissors\n")

int_human = int(human)
human_list = list[int_human]

print(human_list)

print("Computer chose:\n")

import random

rand_computer = random.randint(0, 2)

int_computer = rand_computer

computer_list = list[int_computer]

print(computer_list)


if human_list == computer_list:
  print("You Draw")
elif int_human == 0 and int_computer == 1:
  print("You Lose")
elif int_human == 0 and int_computer == 2:
  print("You Win")
elif int_human == 1 and int_computer == 0:
  print("You Win")
elif int_human == 1 and int_computer == 2:
  print("You Lose")
elif int_human == 2 and int_computer == 0:
  print("You Lose")
elif int_human == 2 and int_computer == 1:
  print("You Win")
  • 리스트를 만들어 그안에 가위,바위,보를 삽입합니다
  • 사용자가 어떤것을 낼지 입력받습니다
  • 선택한 숫자를 문자형에서 정수형으로 변환합니다
  • 정수형으로 변환한 숫자를 list에 값으로 넣고 human_list 변수에 저장합니다
  • 사용자가 선택한 타입을 출력합니다
  • 컴퓨터가 낼 타입을 만들기 위해 랜덤모듈을 불러옵니다
  • random.randint함수로 0부터 2까지 랜덤하게 뽑게 합니다
  • 마찬가지로 뽑은 수를 list에 값으로 넣고 computer_list 변수에 저장합니다
  • 컴퓨터가 선택한 타입을 출력합니다
  • if문을 이용해 사용자와 컴퓨터가 선택한 숫자가 똑같으면 비겼다고 알려주고, 경우의 수를 하나하나 조건문으로 만들어서 승부의 결과를 출력합니다

 

Solution2)

rock = '''
    _______
---'   ____)
      (_____)
      (_____)
      (____)
---.__(___)
'''

paper = '''
    _______
---'   ____)____
          ______)
          _______)
         _______)
---.__________)
'''

scissors = '''
    _______
---'   ____)____
          ______)
       __________)
      (____)
---.__(___)
'''


list = [rock, paper, scissors]

human = input(
    "What do you choose? Type 0 for Rock, 1 for Paper or 2 for Scissors\n")

int_human = int(human)
human_list = list[int_human]

print(human_list)

print("Computer chose:\n")

import random

rand_computer = random.randint(0, 2)

int_computer = rand_computer

computer_list = list[int_computer]

print(computer_list)


if int_human == 0 and int_computer == 2:
    print("You Win")
elif int_computer == 0 and int_human == 2:
    print("You Lose")
elif int_human < int_computer:
    print("You Lose")
elif int_human > int_computer:
    print("You Win")
else:
    print("You Draw")
  • 하지만 위와같은 방식은 코드가 길어지고 코드가 계속 길어질경우 프로그램의 효율성이 떨어집니다
  • 이런 문제점을 보완하기 위해 코드를 단축할 수 있으면 최대한 단축하는게 프로그래밍을 잘하는 방법입니다
  • 따라서 조건문을 좀 더 간단하게 바꾸어 보겠습니다
  • 사람이 0을 선택했을 때와 컴퓨터가 2를 선택했을 때 그리고 반대의 경우는 조건을 상세하게 넣어서 조건문을 만듭니다
  • 위 조건들이 거짓일 경우 밑에 elif문으로 사용자가 컴퓨터가 낸 값보다 클경우와 작을 경우의 조건문을 만듭니다
  • 그외에 경우는 숫자가 같을 경우이기 때문에 비겼다는 출력문을 출력합니다

1. random 모듈

  • random 모듈은 파이썬에서 난수를 구하는 모듈입니다
  • random 모듈은 import random이라고 코딩한 뒤 random.함수이름()으로 random 모듈에 존재하는 함수들을 가져와 사용합니다

 

1) 함수 종류

1-1 random.random()

random의 대표함수로 0부터 1까지 소수점자리의 숫자를 무작위로 추출합니다.

()안에 넣을 수 있는 값은 없습니다.

 

ex)

random_float = random.random()
print(random_float)

[결과]: 0.46562559068679643

 

1-2 random.randint(a,b) / random.randrange(a,b)

a부터 b까지 범위의 정수를 무작위로 추출합니다

 

ex)

random_inteager = random.randint(1, 10)
print(random_inteager)

[결과]: 4

range = random.randrange(1, 10)
print(range)

[결과]: 6

 

1-3 random.uniform(a, b)

a부터 b까지 범위의 실수를 무작위로 추출합니다

 

ex)

random_uni = random.uniform(1, 10)
print(random_uni)

[결과]: 8.130202289656387

 

1-4 random.shuffle(seq)

random.shuffle(seq) 함수는 순서형 자료(sequence)를 뒤죽박죽으로 섞어놓는 함수입니다.

random.suffle(seq) 의 반환은 없고, 인자로 들어온 리스트 내부의 데이터를 무작위로 섞습니다.

해당 함수는 내부의 값을 무작위로 섞는 함수이기 때문에 내부인자를 변경할 수 있는 리스트만 가능합니다(문자열,튜플 X)

 

ex)

array = [0,1,2,3,4,5,6]
random.shuffle(array)
print(array)

[결과]: [1, 5, 3, 0, 6, 2, 4]

 

1-5 random.choice(seq)

random.choice(seq) 함수는 매개변수로 seq 타입을 받아 무작위로 하나의 원소를 추출하는 함수입니다.

해당 함수에서는 문자열,튜플,리스트,range도 사용 가능합니다

 

ex)

array = [0,1,2,3,4,5,6]
array_choice = random.choice(array)
print(array_choice)

[결과]: 5

 

2) 실습예제

Exercise)

랜덤 모듈을 이용하여 동전의 앞면과 뒷면을 출력하는 프로그램을 작성하세요

조건은 0은 뒷면 1은 앞면으로 생각하면 됩니다.

 

Solution)

import random

coin = random.randint(0, 1)

if coin == 0:
  print("Tails")
else:
  print("Heads")
  • 먼저 random모듈을 불러옵니다
  • coin 변수를 만들어 0부터 1까지 정수형으로 랜덤하게 추출되도록 합니다
  • if문을 사용하여 0이면 뒷면이 출력되고, 1이면 앞면이 출력되도록 합니다

1. if / else 조건문

  • 파이썬에서 if문은 "만약에"에 대한 처리를 파이썬에서는 if 조건문을 이용해서 처리를 합니다.
  • 파이썬 문법을 이용하여 if 를 만들면 다음과 같이 됩니다.

if 배가 고프면:

  밥을 먹는다.

else: 

  음료를 마신다.

 

if -> 만약에

else -> 만약에 그렇지 않으면

  • 자세히 보면 if와 else 문자의 끝에 콜론(:)이 있습니다.
  • 이것은 쉽게 말하면 파이썬에서 조건이 참이면 "다음 문구를 실행합니다." 라는 것을 알려주는 것입니다.
  • 그리고 그 다음줄에는 위의 if, else 문 다음 문장은 한단계 들여쓰기 하여서 문법을 작성합니다.
  • 그 이유는  파이썬 문법으로 위에 있는 if, else 에 포함된 문장이라는 것을 인식하게됩니다.
  • 파이썬에서는 들여쓰기를 잘못해도 문법오류가 발생해 프로그램 실행이 안될 수 있습니다.

 

1) 실습예제

Exercise)

number = int(input("Which number do you want to check? "))

위의 코드는 수정하지 않고 코드를 추가하여 입력받은 정수를 홀수인지 짝수인지 알려주는 프로그램을 만드세요

 

Solution)

number = int(input("Which number do you want to check? "))

if (number % 2 == 0):
    print("This is an even number")
else:
    print("This is an odd number")
  • 이번문제는 생각보다 간단합니다 짝수는 2로 나누었을때 나누어 떨어지므로 나머지가 0이고 홀수는 나머지가 1이 남기 떄문에 이 논리를 이용하면 쉽게 풀립니다
  • 나머지를 구하는 연산자인 % 연산자를 사용해 2로 나누었을때 나머지가 0이면 짝수이고
  • 그 외에는 홀수다 라는 출력문을 출력하면 됩니다.

 

2. 중첩 if / elif

 

1) 중첩 if

  • 중첩 if문은 간단히 말해 if문 안에 또다른 if문을 삽입하는 것입니다.
  • 중첩 if문은 횟수 제한없이 무한으로 계속 넣을 수 있습니다.
  • 중첩 if문을 예시로 만들면 다음과 같습니다.

x = 10

 

if x >= 8:

  print("8이상입니다.")

  if x == 10

      print("10입니다")

  if x == 15

      print("15입니다")

 

2) elif

  • elif는 else if라는 뜻으로 if문 없이 독단적으로 사용할 수 없습니다.
  • elif는 위의 if문의 조건이 거짓일때 실행되는 조건문입니다.

 

1-1 실습예제

Exercise)

height = float(input("enter your height in m: "))
weight = float(input("enter your weight in kg: "))

저번에 만들었던 BMI 계산기입니다. 이번엔 더 업그레이드하여 계산된 BMI수치에 따라 저체중, 적정체중, 과체중, 비만으로 분류해서 알려주는 프로그램을 만드세요

 

Solution)

height = float(input("enter your height in m: "))
weight = float(input("enter your weight in kg: "))

BMI = round(weight / (height * height), 1)

if BMI < 18.5:
    print("Your BMI is" + str(BMI) + ", you are underweight")
elif BMI < 25:
    print("Your BMI is" + str(BMI) + ", you have a normal weight.")
elif BMI < 30:
    print("Your BMI is" + str(BMI) + ", you are slightly overweight.")
elif BMI < 35:
    print("Your BMI is" + str(BMI) + ", you are obese.")
else:
    print("Your BMI is" + str(BMI) + ", you are clinically obese.")
  • 먼저 저번과 똑같이 BMI를 계산해주는 수식을 만들어 변수에 저장해줍니다.
  • 저장된 변수의 값에 따라 조건문을 이용해 체중수준을 알려줍니다.
  • 처음은 if문을 이용해 BMI가 18.5미만이면 저체중이라고 출력합니다.
  • 다음은 elif문을 이용해 위 if문의 조건이 거짓일때 다음 elif문을 실행합니다.
  • 위와같은 방식으로 조건을 설정하여 마지막에는 위 조건들이 다 거짓일 경우 비만이라고 출력합니다.

 

1-2 실습예제

Exercise)

year = int(input("Which year do you want to check? "))

위의 코드는 수정하지 않고 코드를 추가하여 년도를 입력받으면 해당 년도가 윤년인지 알려주는 프로그램을 만드세요

 

* 윤년 계산법은 다음과 같습니다.

1. 해당 년도를 4로 나누어떨어질때 즉 나머지가 0이여야 하고

2. 해당 년도를 100으로 나누었을때 나머지가 0이 아니면 윤년입니다. 하지만 나머지가 0이여도 윤년인 다른 조건이 있습니다.

3. 해당 년도를 100으로 나누었을 때 나머지가 0이 아니여도 400으로 나누었을 때 나머지가 0이면 윤년입니다. 

 

Solution)

year = int(input("Which year do you want to check? "))

if year % 4 == 0:
    if year % 100 != 0:
        print("Leap year")
    elif year % 400 == 0:
        print("Leap year")
    else:
        print("Not leap year")
else:
    print("Not leap year")
  • 처음은 if문으로 4로 나누었을 때 나머지가 0인지 확인하는 조건문을 만듭니다.
  • 참일경우 아래 if문으로 내려가 100으로 나누었을 때 나머지가 0이 아닌지 확인하는 조건문을 만듭니다.
  • 위 두조건이 모두 참일 경우 윤년이라는 출력문이 출력됩니다.
  • 만약 100으로 나누었을 때 나머지가 0이면 거짓이므로 다음 elif문으로 넘어갑니다.
  • 400으로 나누었을 때 나머지가 0인지 확인하는 조건문을 만듭니다.
  • 위 3개의 조건은 4로 나누어지고 100으로 안나누어져도 400으로 나누어지면 윤년이라는 출력문이 출력되는 조건들이 만들어집니다.
  • 400으로 나누었을 때 나머지가 0이 아니면 거짓이므로 밑에 else문이 실행되어 윤년이 아니라는 출력문이 출력됩니다.
  • 마지막 else문은 처음 조건이 거짓이면 바로 맨 밑으로 내려가 윤년이 아니라는 출력문이 출력됩니다.

 

3. 논리 연산자

  • 논리연산은 '둘중 하나가 참이면 참이다', '둘다 참(true) 이면 이 조건문은 참(true)이다' 처럼.
    조건문이 참(True)인지 거짓(False)인지 판단하는 것을 의미합니다.
  • 논리 연산자의 종류에는 다음과 같습니다

and

or

not

 

1) and, or, not

1-1 A and B

  • 조건 A 와 조건 B가 모두 참이면 참(True)을 반환합니다.
  • 조건 A 나 조건 B 중 둘 중 하나라도 거짓이면 거짓(False)를 반환합니다.
  • 당연히 조건 A, B가 둘다 거짓이면 거짓(False)를 반환합니다.

1-2 A or B

  • or 연산은 조건 A, B 둘중 하나라도 True 이면 True가 나오게 됩니다.
  • 둘다 False가 인 경우에만 False 이고, 조건중 하나라도 True 이면 True 입니다.

1-3 not A

  • not 조건은 조건을 반대로 해석하면 됩니다.
  • A가 거짓이라면 참(True)를 반환하고 A가 참이라면 거짓(False)를 반환합니다.

 

4. 보물찾기 게임

Exercise)

print('''
*******************************************************************************
          |                   |                  |                     |
 _________|________________.=""_;=.______________|_____________________|_______
|                   |  ,-"_,=""     `"=.|                  |
|___________________|__"=._o`"-._        `"=.______________|___________________
          |                `"=._o`"=._      _`"=._                     |
 _________|_____________________:=._o "=._."_.-="'"=.__________________|_______
|                   |    __.--" , ; `"=._o." ,-"""-._ ".   |
|___________________|_._"  ,. .` ` `` ,  `"-._"-._   ". '__|___________________
          |           |o`"=._` , "` `; .". ,  "-._"-._; ;              |
 _________|___________| ;`-.o`"=._; ." ` '`."\` . "-._ /_______________|_______
|                   | |o;    `"-.o`"=._``  '` " ,__.--o;   |
|___________________|_| ;     (#) `-.o `"=.`_.--"_o.-; ;___|___________________
____/______/______/___|o;._    "      `".o|o_.--"    ;o;____/______/______/____
/______/______/______/_"=._o--._        ; | ;        ; ;/______/______/______/_
____/______/______/______/__"=._o--._   ;o|o;     _._;o;____/______/______/____
/______/______/______/______/____"=._o._; | ;_.--"o.--"_/______/______/______/_
____/______/______/______/______/_____"=.o|o_.--""___/______/______/______/____
/______/______/______/______/______/______/______/______/______/______/_____ /
*******************************************************************************
''')
print("Welcome to Treasure Island.")
print("Your mission is to find the treasure.")

위 코드는 수정하지 않고 코드를 추가하여 조건문들을 이용해 사용자의 선택에 따라 엔딩이 달라지는 게임을 만드세요

 

Solution)

print('''
*******************************************************************************
          |                   |                  |                     |
 _________|________________.=""_;=.______________|_____________________|_______
|                   |  ,-"_,=""     `"=.|                  |
|___________________|__"=._o`"-._        `"=.______________|___________________
          |                `"=._o`"=._      _`"=._                     |
 _________|_____________________:=._o "=._."_.-="'"=.__________________|_______
|                   |    __.--" , ; `"=._o." ,-"""-._ ".   |
|___________________|_._"  ,. .` ` `` ,  `"-._"-._   ". '__|___________________
          |           |o`"=._` , "` `; .". ,  "-._"-._; ;              |
 _________|___________| ;`-.o`"=._; ." ` '`."\` . "-._ /_______________|_______
|                   | |o;    `"-.o`"=._``  '` " ,__.--o;   |
|___________________|_| ;     (#) `-.o `"=.`_.--"_o.-; ;___|___________________
____/______/______/___|o;._    "      `".o|o_.--"    ;o;____/______/______/____
/______/______/______/_"=._o--._        ; | ;        ; ;/______/______/______/_
____/______/______/______/__"=._o--._   ;o|o;     _._;o;____/______/______/____
/______/______/______/______/____"=._o._; | ;_.--"o.--"_/______/______/______/_
____/______/______/______/______/_____"=.o|o_.--""___/______/______/______/____
/______/______/______/______/______/______/______/______/______/______/_____ /
*******************************************************************************
''')
print("Welcome to Treasure Island.")
print("Your mission is to find the treasure.")

direction = input("Where do you want to go? Type 'left' or 'right'\n")

if direction == "left":
    print("You eaten by a dragon. Game Over")
elif direction == "right":
    act = input(
        "You've come to a lake. There is an island in the middle of the lake. Type 'wait' to wait for a boat. Type 'swim' to swim across.\n"
    )
    if act == "wait":
        print("You starved to death")
    elif act == "swim":
        color = input(
            "You arrive at the island unharmed. There is a house with 3 doors. One 'red', one 'yellow' and one 'blue'. Which colour do you choose?\n"
        )
        if color == "red":
            print("You found the treasure! You Win!")
        elif color == "yellow":
            print("You enter a room of beasts. Game Over.")
        else:
            print("You get attacked by an angry trout. Game Over.")
  • 처음은 방향을 입력받아 왼쪽 오른쪽에 따른 게임결과를 조건문으로 만듭니다.
  • 저는 오른쪽을 선택했을 때 게임이 계속 진행되도록 만들었습니다.
  • 다음은 강가에 도착했다며 기다릴것인지 수영할것인지 선택하라고 하는 출력문을 만듭니다.
  • 저는 수영을 선택했을 때 게임이 계속 진행되도록 만들었습니다.
  • 다음은 3개의 문이 있는 집에 도착하여 빨간문, 노란문, 파란문을 선택할고 하는 출력문을 만듭니다.
  • 만약 빨간문을 선택했다면 보물을 찾았다며 당신이 이겼다는 출력문이 출력되고 게임이 종료됩니다.

1. 기본 데이터 형식

  • Numeric Type: int(정수), float(실수)
  • Sequence Type: str(문자열), list(리스트)
  • Boolean Type: bool(불리언/참 거짓)

 

1) Numeric Type

  • int(정수형): 숫자형의 하나로 소수점이 없는 정수
  • float(실수형): 숫자형의 하나로 소수점이 있는 실수

 

2) Sequence Type

  •  문자열이란 문자, 단어 등으로 구성된 문자들의 집합을 의미한다
  • 문자형은 문자를 다룰 수 있는 다양한 추가,삽입,수정,삭제 기능을 제공한다
  • 리스트를 사용하여 데이터를 묶어서 사용할 수 있다
  • 불필요하게 각 각의 변수를 생성하여 데이터를 하나씩 담아줘야하는 문제점을 개선
  • 리스트는 문자형처럼 인덱싱과 슬라이싱 사용 가능

 

3) Boolean Type

  • 불 자료형은 참(True)과 거짓(False)로 나타내는 자료형이다

 

1-1 실습예제

Exercise)

print("Hello")

위의 코드를 수정하여 리스트를 이용해 o가 출력되도록 코드를 작성하세요

 

Solution)

print("Hello"[4])
  • Hello 문자열에서 0부터 시작하여 4번째 자리에 오는 문자가 o이기 때문에 위의 코드로 수정하면 o문자가 출력됩니다

 

1-2 실습예제

Exercise)

two_digit_number = input("Type a two digit number: ")

위의 코드는 수정하지 않고 코드를 추가하여 입력받은 두 정수를 더한 값이 출력되게 코드를 작성하세요

 

Solution)

two_digit_number = input("Type a two digit number: ")
first_digit_number = two_digit_number[0]
second_digit_number = two_digit_number[1]
result = int(first_digit_number) + int(second_digit_number)
print(result)
  • 먼저 입력받은 두 수를 리스트를 사용해 각각 변수에 담아둡니다
  • 현재까지 입력받은 두 수는 정수가 아닌 문자열(str)이므로 형변환을 통해 정수로 바꿔주고 연산을 합니다
  • 연산한 값을 담은 변수를 출력합니다

 

2. 수학 연산

  • 덧셈(+) / 뺄셈(-)
  • 곱셈(*) / 나눗셈(/)
  • 거듭제곱(**)
  • 몫(//)
  • 나머지(%)

 

1) 연산자의 연산 순서

  • 파이썬에서 수학 연산을할 때 연산순서는 다음과 같다

괄호() -> **(거듭제곱) -> 곱셈(*), 나눗셈(/) -> 덧셈(+), 뺄셈(-)

 

1-1 실습예제

Exercise)

height = input("enter your height in m: ")
weight = input("enter your weight in kg: ")

위의 코드는 수정하지 않고 코드를 추가하여 BMI 계산을 해주는 프로그램 코드를 작성하세요(단, 키는 cm가 아닌 m단위로 입력 받으세요)

* BMI 계산 공식: 몸무게 / 키 * 키

 

Solution)

height = input("enter your height in m: ")
weight = input("enter your weight in kg: ")

new_height = float(height)
new_weight = float(weight)
bmi = new_weight / new_height**2
print(int(bmi))
  • 키는 cm가 아닌 m단위로 입력받아야 하기때문에 정수형이 아닌 실수형으로 형변환을 해야합니다
  • 몸무게도 소수점자리까지 생각해서 실수형으로 형변환을 해줍니다
  • BMI를 계산하는 수식을 만들어 변수에 담아줍니다
  • 수식은 위 공식을 참고하여 만들면 됩니다 
  • BMI값을 보기좋게 정수형으로 소수점을 짤라내고 출력합니다

 

3. F-String

  • f-string은 문자열 포맷팅으로 문자열안에 변수를 넣어 출력하게 해줍니다
  • f-string이 편한 이유는 원래 기본 출력문안에서 문자형이 아닌 변수를 넣으려면 str(변수) 이런식으로 하나하나 묶어서 넣어줘야 하지만 f-string은 그런거 없이 {변수}만 넣으면 출력이 가능하기 때문이다

 

1) 실습예제

Exercise)

age = input("What is your current age?")

위의 코드는 수정하지 않고 코드를 추가하여 입력받은 나이에서 90살까지 산다고 했을 때 몇일, 몇주, 몇달이 남았는지 계산해주는 코드를 작성하세요

 

Solution)

age = input("What is your current age?")

new_age = int(age)
day = 32850 - (365 * new_age)
week = 4680 - (52 * new_age)
month = 1080 - (12 * new_age)
print(f"You have {day} days, {week} weeks, and {month} months left.")
  • 먼저 문자형인 age를 정수형으로 형변환 해줍니다
  • 90세까지 산다고 했을 때 일로 계산하면 32850일입니다 따라서 입력받은 나이에 365를 곱하고 32850에서 해당 일수만큼 뺀값을 변수에 저장합니다
  • 주로 계산하면 90세까지 4680주 이므로 입력받은 나이에 52를 곱하고 4680에서 해당 주만큼 뺀값을 변수에 저장합니다
  • 달로 계산하면 90세까지 1080달 이므로 입력받은 나이에 12를 곱하고 1080에서 해당 달만큼 뺀값을 변수에 저장합니다
  • f-string을 사용해 아까 각 값들을 담아둔 변수들을 출력문에 삽입하여 출력합니다

 

4. 팁 계산기

  • 최종적으로 팁계산기라는 프로그램을 만들어보겠습니다
  • 이 프로그램은 총 지불해야하는 금액과 내고싶은 팁의 퍼센트, 총 금액을 같이 내야하는 인원 수를 입력받습니다
  • 입력받은 팁까지 포함한 총 금액을 인원수만큼 더치페이하여 각자 내야하는 금액을 소수점2자리까지만 반올림하여 출력하세요

ex) 지불해야하는 총 금액 = 150.00

      지불하고싶은 팁의 퍼센트 = 12

      같이 지불해야하는 인원 수 = 7

(150 * (12 / 100) + 150) / 7

 

Solution)

print("Welcome to the tip calculator")
bill = input("What was the total bill? ")
tip = input("How much tip would you like to give? ")
person = input("How many people to split the bill? ")

new_bill = float(bill)
new_tip = float(tip)
new_person = int(person)

total = (new_bill * (new_tip / 100) + 150) / new_person
print(round(total, 2))
  • 입력받은 값들을 각 변수에 저장합니다
  • 각 변수들을 문자형에서 정수/실수형으로 형변환을 해줍니다
  • 계산식을 만들어 정수/실수형 변수들을 각각 해당하는 곳에 삽입합니다
  • round(반올림)함수를 이용해 소수점2자리까지 출력합니다

 

+ Recent posts