1. SSRF?

  • CSRF가 클라이언트 측에서 위조된 요청을 보내는 거라면 SSRF는 서버 측에서 위조된 요청을 보내도록 하는 취약점이다.
  • SSRF 취약점을 이용해서 공격자는 웹앱과 같은 서버측 프로그램이 임의의 주소로 HTTP 요청을 보내게 된다. 그러면 일반적으로 사용자들이 접근할 수 없었던 서버 내부 자원에 접근해서 API key와 같은 중요 데이터가 유출되거나 내부 네트워크 스캔 그리고 경우에 따라 임의 코드 실행이나 임의 파일 쓰기 등의 허가받지 않은 행위가 가능할 수 있다.

SSRF 공격과정

 

1) SSRF 공격

1. 홈페이지에 접속합니다

 

2. 상품을 클릭해 재고개수를 알려주는 check stock을 클릭합니다.

 

3. api 기능을 이용하여 재고개수를 가져오는 stockApi구문을 확인합니다

 

4. "stockApi= http://127.0.0.1/admin" 해당 페이로드를 삽입하여 관리자 페이지에 접속할 수 있습니다.

 

'Web Hacking' 카테고리의 다른 글

XXE Injection  (0) 2023.03.03
E2E 암호화  (0) 2023.03.01
웹 모의 해킹 취약점 항목 분석(#1)  (0) 2023.02.11
불충분한 인증/인가 취약점  (0) 2023.01.17
파일 업로드 취약점  (0) 2023.01.04

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. 일반 공통 항목

 

1) SQL Injection

  • SQL Injection 이란 악의적인 사용자가 보안상의 취약점을 이용하여, 임의의 SQL 문을 주입하고 실행되게 하여 데이터베이스가 비정상적인 동작을 하도록 조작하는 행위 입니다. 인젝션 공격에 성공할 경우 큰 피해를 입힐 수 있습니다.

SQL Injection 진행과정

1-1 SQL Injection의 종류

- Error Based SQL Injection

  • SQL 쿼리에 고의적으로 오류를 발생시켜, 출력되는 에러의 내용을 통해 필요한 정보를 찾아낸다.

- UNION Based SQL Injection

  • 2개 이상의 쿼리를 요청하여 결과를 얻는 UNION이라는 SQL 연산자를 이용한 SQL Injection 공격을 말하며 공격자는 이 연산자를 이용하여 원래의 요청에 한개의 추가 쿼리를 삽입하여 정보를 얻어낸다

- Blind SQL Injection

  • Blind SQL Injection은 서버가 쿼리에 대한 결과가 참인지 거짓인지에 따라 다른 응답을 주는 점을 이용하여 정보를 얻어내는 공격이다

 

2) 악성파일 업로드

  • 파일 업로드 기능이 존재하는 웹 사이트의 확장자 필터링이 미흡할 경우 공격자가 악성 파일을 업로드 하여 시스템을 장악할 수 있는 취약점이다
  • 서버상에서 악성 스크립트를 실행하여 쉘을 획득하는 공격으로 시스템 권한을 획득하거나 서버를 변조시키는 등의 방법으로 웹 서버를 장악한다.

악성파일 업로드 공격과정

 

3) 부적절한 이용자 인가 여부

  • 부적절한 이용자 인가 여부 취약점은 중요 정보를 다루는 페이지에 대한 인증 절차가 미흡할 경우 발생하는 취약점이다.
  • 인증 기능(로그인, 중요 페이지에 대한 추가 인증)은 구형하였으나 추측 가능한 패스워드, 취약한 인증 프로세스로 구현되어 우회하거나 무력화하여 접근할 수 있다.

 

4) 이용자 인증정보 재사용

  • OTP/SMS/계좌 인증의 사용되는 일회성 인증정보가 일회성으로 휘발되지 않고 재사용되고있는 취약점이다
  • 중간자공격등에 의해 인증정보가 탈취되었을 경우 공격자가 인증정보를 재사용하여 공격할 수 있다.

 

5) 고정된 인증정보 이용

  • SMS/ARS등 이용자 인증을 위해 사용되는 인증정보가 무작위로 계속 바뀌면서 생성되지않고 고정적으로 똑같은 인증정보가 생성되는 취약점이다

 

6) 유추가능한 인증정보 이용

  • 비밀번호와 PIN번호 설정시 유추가능한 비밀번호로 설정하는 취약점이다
  • 이용자의 생년월일, 핸드폰 번호등 신상정보나 1234같은 연속문자, 너무짧은 비밀번호 설정시 해당 취약점이 발생한다.

 

7) 유추가능한 초기화 비밀번호 이용

  • 해당 취약점은 비밀번호를 잊어버려 초기화할 때 유추가능한 비밀번호로 초기화되는 취약점이다
  • 이용자의 생년월일, 핸드폰 번호, 이름등으로 초기화할 시 해당 취약점이 발생한다

 

8) 파일 다운로드

  • 파일 다운로드 기능 사용 시 임의의 문자나 주요 파일의 입력을 통해 웹 서버의 홈 디렉터리를 벗어나 임의의 위치에 있는 파일을 열람하거나 다운 가능한 취약점(passwd, 중요파일/백업, 데이터베이스, 소스코드 정보 등)

파일다운로드 공격과정

 

9) 유추가능한 세션ID

  • 세션ID를 발급할 때 복잡하지 않고 단순하여 유추가 가능하거나 무차별 대입공격 시 취약한 취약점입니다.

 

10) 운영체제 명령 실행

  • 운영체제 명령실행 이라는 취약점은, 웹에서 시스템 명령어를(system, exec) 실행 시킬 수 있는 환경을 제공한 대상에게 실행되는 취약점 입니다.
  • 시스템 명령어 호출로 인한 백도어 설치 및 관리자 권한 탈취 등의 문제가 발생 할 수 있으므로 이에대한 대비가 가능 하여야 합니다.

'Web Hacking' 카테고리의 다른 글

E2E 암호화  (0) 2023.03.01
SSRF  (0) 2023.02.24
불충분한 인증/인가 취약점  (0) 2023.01.17
파일 업로드 취약점  (0) 2023.01.04
CSRF  (0) 2022.12.27

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자리까지 출력합니다

 

1. 출력

  • 파이썬으로 화면에 결과물을 출력하기 위해서는 print()함수를 사용해야 합니다.
  • 파이썬 GUI 프로그래밍이 아닐 경우 print()출력을 사용하며 디버깅을 위한 오류출력에도 자주 사용됩니다.

 

1) 문자열 출력

  • 문자열을 출력할 시 괄호 안에 ""(큰따옴표), ''(작은따옴표)를 넣고 그 안에 문자를 입력합니다.

ex) print("Hello World")

      print('Hello World')

  • 작은따옴표 안에 큰따옴표를 넣어서 단어나 문구를 강조할 수 있습니다.
  • 반대로 큰따옴표 안에 작은따옴표를 넣어서 단어나 문구를 강조할 수 있습니다.

ex) print("My 'age' is 28")

      print('My "age" is 28')

  • 출력문 안에 \n을 삽입하여 줄바꿈을 할 수 있습니다.

ex) print("Hello World\nHello")

* 위 코드를 입력하여 출력하면 다음과 같은 결과가 화면에 출력됩니다.

> Hello World

   Hello

  • 문자열들을 + 기호를 이용해 문자열을 합칠 수 있습니다.

ex) print("Hello" + "red")

> Hellored

  • 문자열 사이에 공백을 추가하여 공백까지 출력 할 수 있습니다.

ex) print("Hello" + " " + "red")

> Hello red

 

1-1 실습예제

Exercise)

print(Day 1 - String Manipulation")
print("String Concatenation is done with the "+" sign.")
  print('e.g. print("Hello " + "world")')
print(("New lines can be created with a backslash and n.")

위 예제들을 바탕으로 다음과 같은 문장이 출력되도록 하는 코드를 작성해 보겠습니다.

Day 1 - String Manipulation
String Concatenation is done with the "+" sign.
e.g. print("Hello " + "world")
New lines can be created with a backslash and n.

 

 

Solution)

print("Day 1 - String Manipulation")
print('String Concatenation is done with the "+" sign.')
print('e.g. print("Hello " + "world")')
print("New lines can be created with a backslash and n.")
  • 1번 문장은 문장이 시작되는 Day 1 앞부분에 ""(큰따옴표)가 빠져있으므로 추가하여 수정합니다. 
  • 2번 문장은 중간쯤에 "+"가 있는데 이 부분도 문자열로 출력되게 해야합니다. 따라서 전체 문장을 감싸는 ""(큰따옴표)를 사용하게 되면 ""(큰따옴표가) 2번 나오게 되서 문법오류가 발생하게 됩니다.
  • 이 문제를 해결하기 위해서 전체 문장을 ''(작은따옴표)로 감싸면 "+"이 부분까지 문자열로 출력됩니다.
  • 3번 문장은 들여쓰기가 되어있어서 문법적인 오류가 발생합니다 파이썬에서는 들여쓰기를 잘못해도 오류가 발생합니다. 따라서 들여쓰기를 제거하여 코드를 수정합니다.
  • 4번 문장은 print()함수에 괄호가 하나 더 있으므로 오류가 발생합니다. 괄호를 하나 지워서 코드를 수정합니다.

 

2. 입력함수

  • 입력함수는 input()함수를 사용하여 사용자로부터 입력을 받는 함수입니다.
  • input()함수가 호출되면 명령 프롬프트로부터 사용자의 입력을 받을 수 있습니다.
  • input()함수의 반환으로 사용자가 입력한 것을 "문자열" 타입으로 반환하게 됩니다.
  • 입력은 엔터가 입력될 때까지 타이핑한 문자를 모두 받는다.

 

1) 실습예제

Exercise)

사용자의 이름을 입력받아 이름의 철자 개수를 출력하는 코드를 만드세요.

ex) red

> 3

 

Solution)

print(len(input("Waht is your name?")))
  • 먼저 input()함수로 사용자의 이름을 입력받고 len()함수로 이름의 철자 개수를 출력하게 합니다

* len()함수는 문자열의 길이를 알려주는 함수입니다.

 

3. 변수

  • 변수란 '변할 수 있는것'으로 어떠한 값을 담는 '상자'라고 생각하면 됩니다.
  • 예를 들어 a=10이라고 하는것은 10을 a라고 하는 상자에 담아줘 라는 의미입니다.

 

1) 변수 이름

변수를 선언할때 변수의 이름은 마음대로 지어도 되지만 몇 가지 지켜야할 규칙이 있다.

  • _혹은 영문자로 시작해야 합니다.
  • 숫자로 시작할수 없습니다.
  • 특수문자(+,-,%,^)는 사용할 수 없습니다.
  • 변수 이름에 공백이 있으면 안됩니다.
  • 파이썬의 예약어(for,while,if등)는 사용할 수 없습니다.

 

2) 실습예제

Exercise)

a = input("a: ")
b = input("b: ")





print("a: " + a)
print("b: " + b)

위 코드는 수정하지 않고 중간 공백에 코드를 추가하여 a는b값, b는a값으로 출력되게 만드세요.

 

Solution)

a = input("a: ")
b = input("b: ")


c = b
b = a
a = c


print("a: " + a)
print("b: " + b)
  • 이 문제는 약간의 창의적인 생각 필요합니다.
  • 먼저 c라는 변수를 만들어 b값을 미리 c에 담아둡니다.
  • 그 다음 b에는 a값을 담고, a에는 아까 미리 담아두었던 c값을 담습니다.
  • 이렇게 하는 이유는 b=a, a=b로 코드를 짤 경우로 예를 들겠습니다.
  • 만약 a값을 3으로 입력받고 하고 b를 5로 입력받았다 하면 

b=3

a=b(b의 값을 5로 입력받았지만 위 코드가 실행되면서 b라는 변수에는 3이라는 값으로 바뀌게 됩니다)

따라서

b=3

a=3

  • 이런 결과가 출력되기 때문에 c라는 변수를 새롭게 만들어 미리 입력받은 b의 값을 담아두는것입니다.

그렇게 되면 입력값이 a=3 b=5일때

 

c=5

b=3

a=5

이런 과정을 거치게 되어 결과적으로 출력될때 a와b의 값이 바뀌어서 출력되게 됩니다.

 

3. 밴드명 생성하기

  • 이번에는 사용자의 정보들을 입력받아서 입력값으로 밴드명을 정해주는 프로그램을 만들어 보겠습니다.

 

1) 실습 예제

Exercise)

#1. Create a greeting for your program.

#2. Ask the user for the city that they grew up in.

#3. Ask the user for the name of a pet.

#4. Combine the name of their city and pet and show them their band name.

#5. Make sure the input cursor shows on a new line:
  • 1번 라인에는 프로그램의 소개를 출력합니다.
  • 2번 라인은 사용자의 자란 도시를 입력받게 합니다.
  • 3번 라인은 사용자의 애완동물 이름을 입력받습니다.
  • 4번 라인은 입력받은 도시와 애완동물 이름을 조합하여 밴드 이름을 출력합니다.
  • 단 조건으로 입력받을때 커서가 문장옆이 아닌 바로 아래줄에서 깜빡거리도록 합니다.

 

Solution)

print("Welcome to the band name generator")
city = input("Where is your grew up in city?\n")
pet = input("What is your pet name?\n")
print("Your band name is " + city + " " + pet)
  • 1번 라인은 프로그램 소개문장을 print()함수로 출력합니다.
  • 2번 라인은 city라는 변수를 선언하고 input()함수로 사용자의 자란 도시를 입력받습니다. 단 문장 옆이 아닌 아래에서 입력받아야 되므로  \n을 삽입하여 개행까지 합니다.
  • 3번 라인은 2번 라인과 비슷하게 pet이라는 변수를 선언하고 input()함수로 애완동물의 이름을 입력받습니다. 마찬가지로 \n을 삽입하여 개행도 해줍니다.
  • 마지막으로 입력받은 city, pet 변수를 이용해 조합하여 밴드 이름을 만들어주면 완성입니다.

+ Recent posts