about Python
파이썬을 또 쓰는 날이 .. 올까?
1. 강의계획서
2021년도 겨울학기 강의계획서
교과목명 : 파이썬
강의시간 : 월 ~ 화 오전 9시부터 오후 1시 , 수 ~ 금 오전 9시부터 오후 2시
강의목표 : 본 과목을 통해 프로그램 동작 원리 및 구조 이해하고 프로그램 언어의 기본 구성요소와 프로그램 개발 방법을 배운다.
특히 파이썬 언어 학습을 통해 - 개발환경 설정 - 변수, 함수 - 객체지향, 클래스 - 파일 입출력 등 기본적인 파이썬 프로그래밍 기술을 익힌다.
2. 주제 별 학습 활동
1일차 :
오리엔테이션
- 오전 9시 : 웹엑스 (주소는 desktopcal에 기재함)
- 파이썬 과목 및 교재 소개
- 계절학기 운영 방안
- 개발환경 셋업 (python 3.10, vscode, python extensions)
2일차 :
ch2. 변수
- Lab 간단한 사칙연산 계산기
- Lab 택배 배송 정보 입력하기
- 실전 예제 (거북이)
ch3. 연산자
- Lab 덤벨 파운드를 kg 으로 환산하기
- Lab 편의점 하루 매출 계산하기
- Lab 기말 평균 학점 구하기
ch4. 데이터형과 문자열
- Lab 문자열 거꾸로 출력
- Lab 대소문자 변환
ch5. 조건문
- Lab PC방 나이 제한 검사하기
- Lab 가위바위보 게임
ch6. 반복문
- Lab 학생 줄 세우기
- Lab 구구단 계산기
- Lab 주사위 던지기
- Lab 숫자 맞추기
3일차 :
개별 실습 진행 - 온라인 수없 없음
- 개인적으로 ch1 ~ ch6 Lab 실습 진행
- 스스로 따라하면서 문제 해결능력 향상
- 과제로 작성한 소스코드 제출
4일차 :
Lab 질의 응답 및 종합 응용 문제
- 학생 화면 공유 및 랩 작성 확인
- 추가적인 응용 문제 제시 및 풀이 진행
5일차 :
- 온라인 테스트
- 오픈북 테스트로 필기 형식 진행
- 이론, 문법, 코드 이해도 평가
6일차 :
ch8. 함수를 이용한 고급 프로그래밍 (ch.8 먼저 배움 !!)
- Lab 함수를 이용한 계산기
- Lab 로또 추첨
- Lab 100일 기념일
- 비밀번호 생성
ch7. 리스트, 튜플, 딕셔너리
- Lab 오늘의 명언
- Lab 심사위원 점수 결과
- Lab 컴퓨터끼리 가위바위보
- Lab 가수 정보
- Lab 편의점 재고
7일차 :
ch9. 파일 읽기와 쓰기
- Lab 행번호
- Lab 파일 복사
- Lab 문자 암호화
ch10. 객체 지향 프로그래밍
- Lab 깡총깡총 토끼
- Lab 선을 객체로 활용
- Lab 바다거북 모래거북
8일차 :
미니 프로젝트 - 개별 진행
- 주어진 내용을 보고 프로그램 구현
- 내용 추후 공지
9일차 :
예비 - 진도에 따라 결정 !!
10일차 :
- 오프라인 필기 시험으로 진행
- 오전 10시, IT융합대학 강의실 602호
1. 숫자 자료형
print(5)
print(-10)
print(3.14)
print(1000)
print(5+3)
print(2*8)
print(3*(3+1))
이런 식으로 간단한 연산은 당연히 가능하다.
2. 문자열 자료형
print('풍선')
print("나비")
print("ㅋㅋㅋㅋㅋㅋ")
print("ㅋ"*9)
큰 따옴표를 쓰든 작은 따옴표를 쓰든 문자열이 출력된다.
3. Boolean (참 / 거짓)
print(5>10)
print(5<10)
print(True)
print(False)
print(not True)
print(not False)
print(not (5>10))
참 거짓을 판별할 수 있는 Boolean 을 기억하자.
4. 변수
// 애완동물을 소개해 주세요~
animal = "강아지"
name = "오구"
age = 2
hobby = "산책"
is_adult = age >= 2
print("우리집" + animal + "의 이름은" + name + "이에요")
hobby = "공놀이"
//print(name + "는" + str(age) + "이며, " + hobby + "을 아주 좋아해요")
print(name, "는", age, "살이며," , hobby, "을 아주 좋아해요")
print(name + "는 어른일까요?" + str(is_adult) )
5. 주석
# 혹은
'''이렇게
하면
여러 문장이
주석 처리 됩니다
'''
혹은 Ctrl + /
하면 전부 주석 처리가 됩니다
6. Quiz) 변수를 이용하여 다음 문장을 출력하시오
# 변수명
# : station
# 변수값
# : "사당", "신도림", "인천공항" 순서대로 입력
# 출력 문장
# : XX행 열차가 들어오고 있습니다.
station = "사당"
print(station + "행 열차가 들어오고 있습니다")
station = "신도림"
print(station + "행 열차가 들어오고 있습니다")
station = "인천공항"
print(station + "행 열차가 들어오고 있습니다")
7. 연산자
print(1+1)
print(3-2)
print(5*2)
print(6/3)
print(2**3) # 2^3 = 8
print(5%3) # 나머지 구하기 2
print(10%3) # 1
print(5//3) # 나누었을 때 몫 1
print(10//3) # 3
print(10>3) # True
print(4 >= 7) # False
print(10 < 3) # False
print(5 <= 5) # True
print(3 == 3) # 앞과 뒤의 값이 같은지 판별
print(4 == 3) # False
print(3+4 == 7) # True
print(1 !=3) # 앞 뒤가 같지 않다 = True
print(not(1 !=3)) # False
print((3 > 0 ) and (3 < 5)) # True
print((3 > 0) & (3 < 5)) # True
print((3 > 0) or (3 > 5)) # True
print((3 > 0) | (3 > 5)) # True
print(5 > 4 > 3) # True
print(5 > 4 > 7) # False
8. 간단한 수식
print(2 + 3 * 4) # 14
print((2+3) * 4) # 20
number = 2 + 3 * 4 # 14
print(number)
number = number + 2 # 16
print(number)
number += 2 # 18
print(number)
number *= 2 # 36
print(number)
number /= 2 # 18
print(number)
number -= 2 # 16
print(number)
number %= 2 # 0
print(number)
1. 숫자 처리 함수
print(abs(-5)) # 절댓값 5 를 출력 !!
print(pow(4,2)) # 4의 2승을 출력 !! = 16
print(max(5,12)) # 더 큰 값, 최댓값을 출력 !! = 12
print(min(5,12)) # 더 작은 값, 최솟값을 출력 !! = 5
print(round(3.14)) # 반올림을 한 값 !! = 3
print(round(4.99)) # 5
from math import * # math library 안에 있는 것을 모두 이용하겠다는 뜻 !!
print(floor(4.99)) # 내림 . 4
print(ceil(3.14)) # 올림. 4
print(sqrt(16)) # 제곱근. 4
2. 랜덤 함수
from random import *
print(random()) # 0.0 이상 1.0 미만의 임의의 값 생성
print(random() * 10) # 0.0 이상 10.0 미만의 임의의 값 생성
print(int(random() * 10)) # 0 이상 10 미만의 임의의 값 생성
print(int(random() * 10) + 1) # 1 이상 10 이하의 임의의 값 생성
print(int(random() * 45 ) + 1) # 1 부터 45 이하의 임의의 값 생성
print(randrange(1,46)) # 1 부터 46 미만의 임의의 값 생성
print(randint(1,45)) # 1부터 45 이하의 임의의 값 생성
3. Quiz)
당신은 최근에 코딩 스터디 모임을 새로 만들었습니다.
월 4회 스터디를 하는데 3번은 온라인으로 하고 1번은 오프라인으로 하기로 했습니다.
아래 조건에 맞는 오프라인 모임 날짜를 정해주는 프로그램을 작성하시오.
조건 1: 랜덤으로 날짜를 뽑아야 함
조건 2: 월별 날짜는 다름을 감안하여 최소 일주일 28 이내로 정함
조건 3: 매월 1~3일은 스터디 준비를 해야 하므로 제외
(출력문 예제)
오프라인 스터디 모임 날짜는 매월 x 일로 선정되었습니다.
## 아래는 내가 짠 프로그램 !!
from random import *
date = randint(4,28)
print("오프라인 스터디 모임 날짜는 매월" , date , "일로 선정되었습니다")
## 아래는 나도코딩 님이 짜신 프로그램 !!
from random import *
date = randint(4,28)
print("오프라인 스터디 모임 날짜는 매월" + str(date) + "일로 선정되었습니다")
### 출력문 안에 선언한 date 가 문자가 아닌 숫자이므로 str 을 넣어주는걸 잊지말자 .. !!
4. 문자열
sentence = '나는 소년입니다'
print(sentence)
sentence2 = "파이썬은 쉬워요"
print(sentence2)
sentence3 = """
나는 소년이고, 파이썬은 쉬워요
"""
print(sentence3)
5. 슬라이싱
필요한 만큼만 잘라서 사용하는 것을 뜻함 !!
jumin = "990120-1234567"
print("성별 : " + jumin[7]) # 컴퓨터 인덱스는 0부터 시작하는 것을 잊지말자 !!
print("연 : " + jumin[0:2]) # 0 ~ 2 직전까지 !! ( : 사용 ) 직전까지 인걸 잊지말자 !!
print("월 : " + jumin[2:4])
print("월 : " + jumin[4:6])
print("생년월일 : " + jumin[:6]) # 처음부터 6 직전까지 !! ( : 으로 시작하면 처음부터 라는 의미 !!)
print("뒤 7자리 : " + jumin[7:]) # 7 부터 끝까지 !!
print("뒤 7자리 (뒤에부터) : " + jumin[-7:]) # 맨 뒤에서 7번째부터 끝까지
1. 문자열 처리 함수
python = "Python is Amazing"
print(python.lower()) # 모든 문자를 소문자로 출력 !! = python is amazing
print(python.upper()) # 모든 문자를 대문자로 출력 !! = PYTHON IS AMAZING
print(python[0].isupper()) # 첫번째 문자가 대문자인지 판별 !! 대문자가 맞다면 True 출력 !!
print(len(python)) # 문자가 총 몇 개인지 출력 !! = 17
print(python.replace("Python", "Java")) # 문자를 replace 해서 출력 !! = Java is Amazing
index = python.index("n") # python 에서 n 이 몇 번째에 위치하는지 알려줌 !!
print(index)
index = python.index("n", index + 1)
print(index)
print(python.find("n"))
print(python.find("Java")) # find 를 쓰면 원하는 값이 없어도 -1 을 출력하고 프로그램이 정상 진행 됨
## print(python.index("Java")) # index 를 쓰면 오류를 내면서 프로그램을 종류시킴 !! ..
print(python.count("n")) # n 이 총 몇 번 나왔는지 출력 !!
2. 문자열 포맷
print("a" + "b")
print("a", "b")
이외의 다른 방법 세 가지 !!
# 방법 1
print("나는 %d살 입니다." % 20) # %d 는 정수를 의미 !!
print("나는 %s을 좋아해요." % "파이썬") # %s 은 문자열을 의미 !!
print("Apple 은 %c로 시작해요." % "A") # %c 는 하나의 문자를 의미 !!
print("나는 %s색과 %s색을 좋아해요." % ("파란", "빨간"))
# 방법 2
print("나는 {}살 입니다." .format(20))
print("나는 {}색과 {}색을 좋아해요." .format("파란", "빨간"))
print("나는 {0}색과 {1}색을 좋아해요." .format("파란", "빨간")) # format 뒤에 있는 값들을 0번째, 1번째라고 판단 !!
print("나는 {0}색과 {2}색을 좋아해요." .format("파란", "빨간", "노란")) # 이해 했제 ??
# 방법 3
print("나는 {age}살이며, {color}색을 좋아해요." .format(age = 20, color = "빨간"))
# 방법 4 (python 버전 3.6 이상부터 가능 !!)
age = 20
color = "빨간"
print(f"나는 {age}살이며, {color}색을 좋아해요.") # 굳이 format 을 안 써도 됨 !!
3. 탈출 문자
# \n : 줄 바꿈 !!
print("백문이 불여일견\n 백견이 불여일타")
# 저는 "나도코딩" 입니다.
print("저는 '나도코딩' 입니다.")
print('저는 "나도코딩" 입니다.')
print("저는 \"나도코딩\"입니다") # \" \' : 문장 내에서 따옴표
# \\ : 문장 내에서 \
print("\\아니\\") # \아니\
# \r : 커서를 맨 앞으로 이동
print("Red aplle\rPine")
# \b : 백스페이스 (한 글자를 삭제함) (키보드 백스페이스랑 똑같은 역할임)
print("Redd\bApple")
# \t : 탭 (말 그대로 탭 . .)
print("Red\tApple") # : Red Apple
4. Quiz)
# Quiz) 사이트 별로 비밀번호를 만들어 주는 프로그램을 작성하시오
# ex) http://naver.com
# 규칙1 : http:// 부분은 제외
# 규칙2 : 처음 만나는 점(.) 이후 부분은 제외 => naver
# 규칙3 : 남은 글자 중 처음 세자리 + 글자 갯수 + 글자 내 'e' 갯수 + "!" 로 구성
# (nav) (5) (1) (!)
# ex) 생성된 비밀번호 : nav51!
url = "http://naver.com"
my_str = url.replace("http://" , "") # 규칙 1
# print(my_str)
my_str = my_str[:my_str.index(".")] # my_str[0:5] -> 0~5 직전까지. (0,1,2,3,4) # 규칙 2
password = my_str[:3] + str(len(my_str)) + str(my_str.count("e")) + "!" # 규칙 3
print("{0} 의 비밀번호는 {1} 입니다." .format(url, password))
1. 프로그램, 프로그래밍 언어, 프로그래머
프로그램 (Program)
-
컴퓨터와 스마트폰에 들어있는 많은 소프트웨어
-
유튜브, 카카오톡, 엑셀, 한글 등
- 프로그램, 소프트웨어, 애플리케이션, 앱, 응용 프로그램 모두 동일한 용어입니다.
Operating System : 모든걸 운영해주는 거대한 소프트웨어
Programming : 프로그램을 만드는 작업
Programming Language : 컴퓨터가 이해하는 언어를 의미함
Programmer : 프로그래밍 언어를 사용하여 SW 앱을 만드는 직업을 가진 사람을 의미함
절차지향보다 객체지향이 개념적으로 접근하기엔 더 쉬움
C 언어는 하드웨어와 친밀함 . . .
- 컴파일러 언어
- 컴파일 (compile) : 소스 코드를 기계어로 번역하는 과정
- 소스코드를 실행 가능한 기계어로 일괄 번역한 후에, 번역이 완료된 파일 (*.exe, *.class 등) 을 실행하는 언어를 의미함
- 대표적인 컴파일러 언어 : C, C++, Java, C# 등
- 스크립트 언어
- 소스 코드를 한 줄씩 읽어서 실행하는 언어
- 스크립트 언어는 별도의 실행파일이 생성되지 않음
- 대표적인 스크립트 언어 : 파이썬, JavaScript, Perl 등
스크립트 언어와 인터프리터 언어는 같은 용어입니다. 어떤 용어를 사용해도 관계 없지만 요즘은 인터프리터보다는 스크립트라는 용어를 더 많이 사용합니다.
컴파일러 언어 vs 스크립트 언어
- 컴파일러 언어는 스크립트 언어보다 속도가 빠름 !!
- 스크립트 언어는 컴파일러 언어보다 빠른 시간 안애 배울 수 있음
2. 파이썬이란 ?
- 파이썬은 Guido van Rossum 이라는 프로그래머가 만든 언어
- 1991년도에 공식적으로 발표된 언어
- 파이썬의 장점 :
- 무료 오픈 소스와 강력한 기능 제공
- 사용의 용이성
- 강력한 웹 개발 환경 제공
- 다양하고 강력한 외부 라이브러리 제공
- 파이썬의 단점 :
- 다른 언어에 비해 실행 속도가 느림
- 모바일 컴퓨팅 분야에 지원이 약함
- 하드웨어 제어 등과 관련된 부분도 사용하기가 쉽지 않음
3. 파이썬 설치
- Window + E 를 눌러 파일 탐색기를 실행하고, 메뉴의 [보기] 탭의 ‘파일 확장명’ 체크
- 파이썬 홉페이지에 접속 후 Python-3.10.1-amd64.exe 파일을 저장
Ch2. 변수
변수
- 값을 저장하는 메모리 공간
- 좀 더 쉽게 무엇을 담는 그릇이라 생각할 수 있음
- 한 번 사용되고 사라지는 코드
>>> print (100 + 200)
300
100과 200을 저장하기 위해서는 100과 200을 담을 그릇 (변수) 가 필요함 !!
크기 –> 자료형 type
C 언어 or Java » Static type
Size 를 지정해줘야 함 ..
그래야 그 다음 칸에 다른 데이터를 저장할 수 있음
C 언어는 예민하기 때문에 메모리 관련 오류가 많이 발생함
반면에 Java 는 조금 더 유연함 .. 메모리 관리를 개발자가 직접 하지 않아도 되기 때문에
Y2K => 19711025 이런 식으로 표기를 함 (8자리)
그 당시에는 메모리 , 하드 디스크 이런게 엄청 고가였음
그래서 둘의 활용을 줄이는게 목적이었음
–> 711025 이것처럼 6자리로 줄여버림
2000년을 넘어서면서 문제가 생김
Y22K => 2022년이 되면서 일부 컴퓨터 프로그램에 문제가 생김
대표적으로 마이크로소프트 Exchange 기업형 이메일 시스템과 비슷한 문제임
이메일 필터링 하는 소프트웨어의 버전 관리를 연월일시분초밀리세컨드 이런식으로 Serial 한 실험값을 이용해서 중복되지 않게끔 사용했는데
date type 을 썼어야 했는데 int 를 써버림.. (int 는 정수형 데이터)
와우
파이썬이나 자바스크립트 => 동적 type
type 이 거의 자동임 !!!
데이터를 사용하면 알잘딱으로 처리해주는 장점..
Kotlin or Swift 같은 최신 언어는 더 편함
type 에 민감한건 약간 구식인 언어
앞으로의 추세는 개발자가 그런 거에 신경쓰지 않는 것
변수
>>> c = a + b
여러 개를 출력하고 싶다면 콤마 (,) 로 구분해야 함
콤마 대신에 + 써도 됨
Java 는 보통 + 써요
작은 따옴표 , 큰 따옴표 딱히 상관 없음 파이썬에선 ..
>>> print (a, "+", b, "=", c)
크게 세 가지 절차가 있음
입력 => 처리 => 출력
출력에 해당하는 것 중에 가장 default : console !
함수라는 건 이미 만들어진 기능
변수의 선언과 값의 대입
올바른 값의 대입
>>> num 1 = 100
>>> num 2 = 200
>>> result = num1 + num2
300
모든 코드에서 = 의 왼쪽에는 변수가 있어야 함
= 의 오른쪽이 모두 변수일 필요는 없음
오른쪽이 먼저 계산되고 왼쪽으로 대입되는 형식
대입 연산자의 =의 왼쪽이 변수가 아니라면 오류 발생
; ==> 이거 C 나 Java 에는 남아있지만 약간 구시대적이래요
파이썬에서 콤마는 자동적으로 공백을 만들어줌
from turtle import RawPen
num1 = 10
num2 = 20
print (num1, num2)
print('num1 =', num1, 'num2 =', num2)
print('num1=', num1,' , ' 'num2=', num2, sep='')
print('num1=%d, num2=%d' % (num1,num2))
%d: 10진수(정수형)
%f: 실수형
%e: 지수형
%o: 8진수
%x: 16진수
%u: 부호없는 10진수
%g: 실수형 자동출력
%p: 포인터의 주소
%c: 하나의 문자로 출력
%s: 문자열
camel case & snake case 가 가장 많이 쓰임 ,,
변수명은 문자와 숫자를 섞을 수 있지만 , 숫자가 앞에 오면 안 됩니다.
변수명에는 공백 사용 불가능
변수명은 영문 및 숫자만 가능
언더바 사용 가능 (공백이 안되기 때문에)
언더바는 위치에 관계없이 사용할 수 있음
변수명에 예약어를 사용할 수 없음
예약어 : 이미 파이썬 문법에 정의되어 사용되는 단어
변수명으로 예약어를 사용하면 오류 발생함
ㄴ 오버라이딩
더하기 빼기 같은 연산자에서도 오바라이딩이 가능함
변수의 이름만 보고도 의미를 파악할 수 있어야 함
변수의 의미가 파악되더라도 너무 길어지면 안 됨 …
Ch3. 연산자
input() 함수
- 키보드로 입력받도록 도와주는 함수
input() 함수는 입력받은 값을 모두 문자열로 취급함
- 즉 num1, num2에 입력된 100, 200은 숫자가 아닌 문자열임 !!
>>> result = num1 + num2
100200
정수로 변환하는 int() 함수
- input() 로 입력받은 값을 정수로 변환 !!
CLI 의 반대 > GUI ..
GUI 는 원래 어려움 / 잘하기가 쉽지 않음
운영체제의 영향을 상당히 많이 받음
터틀 예제
import turtle as t
t.shape('arrow')
t.title('Hello Turtle')
t.forward(200)
# 프로그램이 계속 실행되어 있도록 함. 이벤트 대기 상태
scr = t.Screen()
scr.mainloop()
거북이 회전시키기
turtle.forward(200)
turtle.left(90) 등등 ,,
연산자
산술 연산자의 우선순위 !!
- 더하기와 곱하기가 동시에 나오는 경우 : 곱하기 먼저 수행
그 외 연산자
//, %, **
각각 나누기(몫), 나머지 값, 제곱 연산자 !!
대입 연산자
여러 개의 대입 연산자
콤마로 분리해서 왼쪽에 변수가 2개 이상 나올 수도 있음
그런 경우에는 오른쪽도 반드시 콤마로 분리된 2개의 숫자, 수식, 문자열 등이 와야 함
3개 이상도 한꺼번에 나올 수 있지만 ‘=’ 을 기준으로 왼쪽과 오른쪽의 개수가 같아야 함 ..
복합 연산자의 역할
변수에 값을 변경한 후에 다시 자신에게 대입함
이때 num1 = num1 + 200 은 num1 += 200 과 같은 의미 !
비교 연산자
어떤 것이 큰지 작은지 같은지를 비교하는 연산자
비교 연산자를 단독으로 사용하는 경우는 거의 없음
- 조건문이나 반복문과 함께 사용함
True False => Boolean !
비교 연산자의 활용
- 변수에 들어 있는 값을 주로 사용함
논리 연산자
비교 연산자가 여러 번 필요할 때 사용함
AND OR NOT
연산자의 우선순위
Ch4. 데이터형과 문자열
데이터형과 문자열
데이터형
- 변수나 상수의 종류를 의미함
- 변수의 종류 다양함
4가지 기본 데이터형
var1 = 100
var2 = 3.14
var3 = “파이썬”
var4 = True
정수형 변수 : int
실수형 변수 : float
문자열형 변수 : str
불형 변수 : bool
type() 함수
- 변수의 종류 확인하기
정수형
정수와 정수의 연산은 정수
정수와 실수의 연산은 실수
정수와 정수여도 나누기를 하면 실수가 나옴 ..
문자열의 형태
- 큰따옴표 또는 작은따옴표로 묶어서 표현
- 문자열은 0개의 글자부터 여러 개의 글자까지 모두 문자열로 취급함
>>> var1 = ""
>>> var2 = ''
여러 줄의 문자열을 표현하기
- 큰따옴표나 작은따옴표를 3개 연속 사용해서 묶어줌
문자열 연결
- 더하기 연산자 사용
문자열끼리만 가능 !!
문자열에 숫자를 곱하는 것은 가능 => 오버라이딩
len()
- 문자열의 길이를 파악할 때 사용함
>>> var1 = "난생처음! Python"
>>> len(var1)
12
한글, 기호, 영문, 공백, 숫자까지 모두 글자로 취급함
upper(), lower()
모두 대문자, 소문자로 바꾸는 함수
isupper(), islower()
문자열이 모두 대문자냐 소문자냐 물어보는 ..
count()
문자열에서 어떤 글자가 몇 번 등장하는지 확인함
find()
문자열에서 특정 단어가 몇 번째 위치에 있는지 출력함 !
Ch5. 조건문
순차 구조 (기본 제어구조)
- 순차적으로 코드가 실행됨
- 가장 단순한 구조이기도 하지만, 실제로 많이 사용되는 구조이기도 함
선택 구조 (logic)
- 두 가지의 경우 중에서 어느 하나를 선택한 방향으로 코드가 실행됨
- 길에서 갈림길을 만나면 어느 한쪽으로만 가야 하는 것과 같음
반복 구조
if문
- if 조건식 :ㅣ에서 조건식이 참이라면 실행할 문장이 실행됨. 거짓이라면 그냥 프로그램 종료
num = 200
if num > 100 :
print('어쩌구')
들여쓰기가 매우매우 중요함 ,,, Tab 키를 이용하자
if ~ else문
- 거짓일 때 실행해야 할 문장이 따로 있을 때 사용함
- 조건식이 참이라면 문장 1을 실행하고, 그렇지 않으면 문장 2를 실행
중첩 if문
- 조건을 검사하는 과정이 2번 이상인 경우
- if문 안에 또 다른 if문이 있는 형태
- 서울에 사는 학생 중에서 25살 이상인 학생이 몇 명인지를 구하는 경우
elif문
랜덤한 값 추출하기
Ch6. 반복문
for문의 형식
- for 변수 in range(시작값, 끝값+1, 증가값):
for i in range 를 기억해라 !
중첩 for문
- for문 안에 또 for문을 사용할 수도 있음 .. 권장 X
while문
- 조건식이 참인 경우에 반복함
while 문
- 강제로 증가시키는 행을 추가해야 함 => 안 하면 무한 반복 ,,
무한 반복하는 간단한 while문
반복문을 탈출하는 break문
- 반복문 안에서 break문을 만나면 무조건 반복문을 빠져나옴..
처음으로 돌아가는 continue문
- break문은 반복문을 빠져나가지만, 이와 달리 continue문은 남은 부분을 모두 건너뛰고, 반복문의 처음으로 돌아감 .. 권장 X
Ch2. 변수
- Lab 간단한 사칙연산 계산기
- Lab 택배 배송 정보 입력하기
Ch3. 연산자
- Lab 덤벨 파운드를 kg으로 환산하기
- Lab 편의점 하루 매출 계산하기
- 기말 평균 학점 구하기
Ch4. 데이터형과 문자열
- Lab 문자열 거꾸로 출력
- Lab 대소문자 변환
Ch5. 조건문
- Lab PC방 나이 제한 검사하기
- Lab 가위바위보 게임
Ch6. 반복문
- Lab 학생 줄 세우기
- Lab 구구단 계산기
- Lab 주사위 던지기
- Lab 숫자 맞추기
간단한 사칙연산 계산기
실행 결과
100 + 200 = 300
100 - 200 = -100
100 * 200 = 20000
100 / 200 = 0.5
num1 = 100
num2 = 200
result1 = num1 + num2
result2 = num1 - num2
result3 = num1 * num2
result4 = num1 / num2
print (num1, "+" , num2 , "=" , result1)
print (num1, "-" , num2 , "=" , result2)
print (num1, "*" , num2 , "=" , result3)
print (num1, "/" , num2 , "=" , result4)
택배 배송 정보 입력하기
실행 결과
## 택배를 보내기위한 정보를 입력하세요 ##
받는 사람 : 김난생
주소 : 서울 영등포구 여의도동 88
무게(g) : 721
** 받는 사람 ==> 김난생
** 주소 ==> 서울 영등포구 여의도동 88
** 배송비 ==> 3605 원
택배 무게는 그램(g)당 5원이다..
print(" ## 택배를 보내기위한 정보를 입력하세요 ##")
personName = input("받는 사람 : ")
personAddress = input("주소 : ")
weight = int(input("무게(g) : "))
print(" ** 받는 사람 ==> ", personName)
print(" ** 주소 ==> ", personAddress)
print(" ** 배송비 ==>", weight*5, "원")
덤벨 파운드를 kg으로 변환하기
실행 결과
파운드(1b)를 입력하세요 : 15
15 파운드(1b)는 6.80387 킬로그램 (kg)입니다
킬로그램(kg)을 입력하세요 : 15
15 킬로그램(kg)은 33.06934 파운드(1b)입니다
[조건]
1 파운드(1b) = 0.45392 킬로그램(kg)
1 킬로그램(kg) = 2.204623 파운드(1b)
pound = int(input("파운드(1b)를 입력하세요 : "))
kg = pound * 0.453592
print( pound, "파운드(1b)는", kg, "킬로그램(kg)입니다")
kg = int(input("킬로그램(kg)을 입력하세요 : "))
pound = kg * 2.204623
print( kg, "킬로그램(kg)은", pound, "파운드(1b)입니다")
편의점 하루 매출 계산하기
실행 결과
오늘 총 매출액은 11600원 입니다
캔커피 | 삼각김밥 | 바나나 우유 | 도시락 | 콜라 | 새우깡 | |
---|---|---|---|---|---|---|
구입 가격 | 500 | 900 | 800 | 3500 | 700 | 1000 |
판매 가격 | 1800 | 1400 | 1800 | 4000 | 1500 | 2000 |
[구매/판매 내역]
- 삼각김밥 (900원) 10개 구입
- 바나나맛 우유 (1800원) 2개 판매
- 도시락 (3500원) 5개 구입
- 도시락 (4000원) 4개 판매
- 콜라 (1500원) 1개 판매
- 새우깡 (2000원) 4개 판매
- 캔커피 (1800원) 5개 판매
sales = 0
sales -= 900 * 10
sales -= 3500 * 5
sales += 1800 * 2
sales += 4000 * 4
sales += 1500 * 1
sales += 2000 * 4
sales += 1800 * 5
print("오늘 총 매출액은" ,sales, "원 입니다")
기말 평균 학점 구하기
실행 결과
평균 학점 : 3.83
과목(이수학점) | 성적 |
---|---|
파이썬 (3) | B (3.5) |
모바일 (2) | A0 (4.0) |
엑셀 (1) | A (4.5) |
python = 3
mobile = 2
excel = 1
A = 4.5
A0 = 4.0
B = 3.5
average = ((python * B) + (mobile * A0) + (excel * A)) / (python + mobile + excel)
print("평균 학점 :",average)
문자열을 거꾸로 출력하는 프로그램
실행 결과
원본 문자열 ==> 트와이스
반대 문자열 ==> 스이와트
ww='트와이스'
print('원본 문자열 ==>', ww)
print("반대 문자열 ==> ", end='')
print(ww[3], end='')
print(ww[2], end='')
print(ww[1], end='')
print(ww[0], end='')
대소문자 변환 프로그램
실행 결과
원본 문자열 ==> Python
반대 문자열 ==> pYTHON
ww = 'Python'
print('원본 문자열 ==>', ww)
ss = ""
ss += ww[0].lower()
ss += ww[1].upper()
ss += ww[2].upper()
ss += ww[3].upper()
ss += ww[4].upper()
ss += ww[5].upper()
print('반대 문자열 ==>', ss)
PC방 나이 제한 검사하기
실행 결과
나이를 입력 ==> 17
집에 갈 시간이네요!
협조 감사합니다.
age = int(input("나이를 입력 ==>"))
if age >= 18 :
print("즐거운 시간 되세요 ^^!")
else :
print("집에 갈 시간이네요 ^^?")
print("협조 감사합니다")
가위바위보 게임하기
실행 결과
나의 가위/바위/보 ==> 가위
컴퓨터의 가위/바위/보 ==> 보
이겼습니다. ^^
나의 가위/바위/보 ==> 바위
컴퓨터의 가위/바위/보 ==> 보
졌습니다. ㅠㅠ
import random
myhand = input("나의 가위/바위/보 ==>")
pchand = random.choice(["가위", "바위", "보"])
print("컴퓨터의 가위/바위/보", pchand)
if myhand == "가위" :
if pchand == "가위" :
print("비겼습니다.")
elif pchand == "바위":
print("졌습니다. ㅠㅠ")
elif pchand == "보":
print("이겼습니다. ^^")
elif myhand == "바위" :
if pchand == "보":
print("졌습니다. ㅠㅠ")
elif pchand == "가위":
print("이겼습니다. ^^")
elif pchand == "바위":
print("비겼습니다.")
elif myhand == "보" :
if pchand == "가위":
print("졌습니다. ㅠㅠ")
elif pchand == "바위":
print("이겼습니다. ^^")
elif pchand == "보":
print("비겼습니다.")
else :
print("가위/바위/보 중 하나를 내세요 .. ^^")
학생 줄 세우기
A, B, C, D, E 다섯 명의 학생들에게 도시락을 나눠주려고 합니다. <br>
다섯 명의 학생들이 도시락을 받기 위해 순서대로 줄을 서려면
총 몇가지의 경우의 수가 나올까요?
i = 0
fact = 1
students_num = 5
for i in range(1, students_num + 1, 1):
fact = fact * i
print("A, B, C, D, E 학생들을 순서대로 세우는 경우의 수 : " , fact)
for 문의 형식 : for 변수 in range (시작값, 끝값 + 1, 증가값):
구구단 계산기 만들기
실행 결과
2 X 1 = 2
2 X 2 = 4
2 X 3 = 6
...생략...
i = 0
k = 0
for i in range(2, 10, 1):
for k in range(1, 10, 1):
print(i, "X", k, "=", i*k)
주사위 3개를 동시에 던져 동일한 숫자 나오기
실행 결과
3개 주사위는 모두 4입니다.
같은 숫자가 나오기까지 132번 던졌습니다.
import random
count = 0
diceA, diceB, diceC = 0, 0, 0
while True:
count += 1
diceA = random.randint(1,6)
diceB = random.randint(1,6)
diceC = random.randint(1,6)
if (diceA == diceB) and (diceB == diceC):
break
print("3개 주사위는 모두", diceA, "입니다.")
print("같은 숫자가 나오기까지", count, "번 던졌습니다.")
?!
컴퓨터와 인간의 숫자 맞히기 대결
실행 결과
게임 1회 : 컴퓨터가 생각한 숫자는 ? 3
아까워요. 4였는데요. 다시 해보세요. ㅠ
게임 2회 : 컴퓨터가 생각한 숫자는 ? 2
아까워요. 1였는데요. 다시 해보세요. ㅠ
게임 3회 : 컴퓨터가 생각한 숫자는 ? 4
맞췄네요. 축하합니다 .. ^^ !!
게임을 마칩니다.
import random
computer, user = 0, 0
for i in range (1, 11, 1) :
computer = random.randint(1,5)
print("게임", i, "회 : ", end='')
user = int(input("컴퓨터가 생각한 숫자는? (숫자는 1부터 5까지입니다.) : "))
if computer == user :
print("맞혔네요. 축하합니다 .. ^^!!")
break
else :
print("아까워요", computer, "였는데요. 다시 해보세요. ㅠ")
continue
print("게임을 마칩니다.")
# 1. 변수 선언과 출력
num1 = 10
num2 = 20
print (num1, num2)
print('num1 =', num1, 'num2 =', num2)
print('num1=', num1,' , ' 'num2=', num2, sep='')
print('num1=%d, num2=%d' % (num1,num2))
print(f'num1={num1}, num2={num2}') # 이게 더 좋은 방식 ..
# 2. 입력과 형 변환
num3 = int(input('num3=>'))
num4 = eval(input('num4=>'))
print('num3 + num4 =', num3+num4)
# 3. 연산자와 자료형
a = 100, 200, 300, 400
print(a)
print(a[3])
print(type(123)) # int
print(type('hello')) # str
print(type(12.2)) # float
print(type([1,2,3,4])) # List (배열) => 변경 가능
print(type((1,2,3,4))) # Tuple => 변경 불가능
print(type({10,20,30})) # Set
print(type({'a':10, 'b':20, 'c':30})) # Map (dict)
print(type(10>50)) # boolean
# 외부 라이브러리 참조
import calendar
calendar.prmonth(2022,1) # prmonth : print month 라는 뜻 ,,
# 4. if
_uname = 'hong'
_passwd = '1234'
uname = input('# 아이디를 입력하세요: ')
passwd = input('# 비밀번호를 입력하세요: ')
if((uname == _uname) and (passwd == _passwd)) :
print('>> 로그인 성공!!')
else :
print('>> 로그인 실패!!')
# 5. for
for i in range(3):
print('Hello World')
for i in range(1,4,1):
print(i, ': Hello World')
for i in range(0,5,1):
print(i)
for i in [10,20,30]:
print(i)
for i in range(1,11,1):
print(i, end=' ')
함수
- 무엇을 넣으면 그것이 처리되어 다시 어떤 것을 돌려주는 기능을 함
파이썬에서 제공하는 함수의 사용법
- 별도의 반환값이 없는 함수의 경우
`함수이름()`
- 함수에 별도의 반환값이 있다면 변수에 반환값을 받아야 함
`변수 이름 = 함수이름()`
- 반환값이 없는 함수
>>> print("어쩌구 저쩌구")
- 반환값이 있는 함수
>>> num = int("1234")
>>> print(num)
1234
파이썬 기본 문법 활용 퀴즈
- 아이디와 비밀번호를 입력받아 맞으면 로그인 성공 그렇지 않으면 성공할 때까지 반복 !
- while문을 사용 !
# DB로부터 가지고 온 값으로 가정
# _uname = 'hong'
# _passwd = '1234'
cnt = 0
while True :
_uname = input("아이디를 입력하세요 : ")
_passwd = input("비밀번호를 입력하세요 : ")
if _uname == 'hong' and _passwd =='1234' :
print("로그인 성공 ! 환영합니다.")
exit()
else :
cnt = cnt + 1
print("로그인 {}회 실패 !!" .format(cnt))
if cnt >= 3 :
print("프로그램을 종료합니다.")
exit()
교수님의 Solution
_uname = 'hong'
_passwd = '1234'
login = False
cnt = 0
while (login == False) :
uname = input ('# 아이디를 입력하세요 : ')
passwd = input ('# 비밀번호를 입력하세요 : ')
if ((uname == _uname) and (passwd == _passwd)) :
login = True
else :
cnt += 1
if (cnt >= 3) :
print ('3회 이상 틀렸습니다. 종료합니다')
exit()
else :
print('>>> 아이디 혹은 비밀번호가 틀렸습니다')
print('>> 로그인 성공')
계산기 만들기 예제
'''
# 계산기 만들기
- 두 개의 숫자와 연산자를 입력받아 계산 결과를 출력
- 입력은 여러방식을 사용할 수 있음
- 지원되는 연산은 +, -, *, /
- 쉬는시간 포함해서 11:00 까지 문제를 풀어 봅시다.
- 희망자 발표
'''
while True :
a = float(input('첫 번째 숫자 : '))
b = float(input('두 번째 숫자 : '))
if a == b == 0 :
print('종료합니다.')
c = input('연산자 : ')
if c == '*' :
d = a * b
print('계산값은', d, '입니다.')
continue
if c == '+' :
d = a + b
print('계산값은', d, '입니다.')
continue
if c == '-' :
d = a - b
print('계산값은', d, '입니다.')
continue
if c == '/' :
d = a / b
print('계산값은', d, '입니다.')
continue
if c != '+' or c != '-' or c != '*' or c != '/' :
while True :
print('지원하지 않는 연산자입니다.')
c = input('연산자 : ')
if c == '*' :
d = a * b
print('계산값은', d, '입니다.')
exit()
if c == '+' :
d = a + b
print('계산값은', d, '입니다.')
exit()
if c == '-' :
d = a - b
print('계산값은', d, '입니다.')
exit()
if c == '/' :
d = a / b
print('계산값은', d, '입니다.')
exit()
교수님의 Solution
num1 = int(input("첫 번째 숫자 입력 : "))
num2 = eval(input("두 번째 숫자 입력 : "))
op = input("연산자 입력 : ")
result = 0
if op == '+' :
result = num1 + num2
elif op == '-' :
result = num1 - num2
elif op == '*' :
result = num1 * num2
elif op == '/' :
result = num1 / num2
print("계산 결과 : %d %s %d = %d" % (num1, op, num2, result))
'''
-> 숫자 두 개를 한꺼번에 입력 받으려면 ????
num1, num2 = map(int, input("원하는 숫자 두 개를 입력하세요 (ex:10 20)).split()) # map 함수 ==> 집합형 데이터 안에 있는 모든 원소의 공통된 기능을 수행하도록 만들어줌
op = input("연산자 입력 : ")
result = 0
if op == '+' :
result = num1 + num2
elif op == '-' :
result = num1 - num2
elif op == '*' :
result = num1 * num2
elif op == '/' :
result = num1 / num2
print("계산 결과 : %d %s %d = %d" % (num1, op, num2, result))
'''
계산기를 함수 버전으로 만들어보기
함수 예제
def calc1(num1,num2,op) :
result = 0
if op == '+' :
result = num1 + num2
elif op == '-' :
result = num1 - num2
elif op == '*' :
result = num1 * num2
elif op == '/' :
result = num1 / num2
return result
num1, num2 = map(int, input("원하는 숫자 두 개를 입력하세요").split())
op = input("연산자 입력 (+, -, *, /) : ")
print("계산 결과 : ", calc1(num1,num2,op))
'''
함수 관련 예제
'''
# 함수 선언만 해두고 내용은 나중에 구현
def printAll():
pass
# 인자가 두 개인 함수
def calc(num1, num2):
return num1+num2
print('계산결과 : ', calc(200,300))
print('계산결과 : ', calc(num1=200, num2=300))
# 가변 인자
def total(*num):
tot = 0
for n in num:
tot += n
return tot
print(total(1,2,3))
print(total(20,20,30))
# 리턴이 여러 개인 경우
def addNum(*nums):
tot = 0
cnt = 0
for n in nums:
tot += n
cnt += 1
return cnt, tot
cnt, total = addNum(10,20,30)
print(cnt,tot)
# 전역 변수, 지역 변수, global 예제
num4 = 10
def VarTest():
global num5
num5 = 20
global num4
num4 = 100
print('VarTest() : ', num4)
VarTest()
print(num4)
# print(num5) ==> 함수 안에 있는 변수는 호출 할 수 없음 .. but global 을 사용하면 가능해짐 !!
print(num5)
매개변수의 개수를 정해 놓는 방법
- 함수에 매개변수의 개수를 정해 놓으면 함수를 호출할 때는 정확히 매개변수의 개수에 맞춰서 호출해야 함
- 이와 같이 매개변수의 개수가 다르면 별도의 함수를 만들어야 함
매개변수에 기본값을 설정해 놓는 방법
- 가장 많이 전달될 매개변수 개수를 준비해놓고 각 매개변수에 기본값을 설정하기
매개변수에 기본값을 설정해 놓는 방법의 예시
## 함수 정의 부분
def para_func(v1, v2, v3 = 0) :
result = 0
result = v1 + v2 + v3
return result
## 전역변수 선언 부분
hap = 0
## 메인 코드 부분
hap = para_func(10,20)
print("매개변수 2개 함수 호출 결과 ==> ", hap)
hap = para_func(10,20,30)
print("매개변수 3개 함수 호출 결과 ==> ", hap)
[실행결과]
매개변수 2개 함수 호출 결과 ==> 30
매개변수 3개 함수 호출 결과 ==> 60
변환값이 없는 함수
- 함수를 실행한 결과, 돌려줄 것이 없는 경우네는 returen문을 생략함
- 또는 반환값 없이 return만 써도 됨
- 대체로 return 없이 함수를 끝내는 경향이 있음
- 반환값 없이 함수를 마치면 아무것도 반환하지 않고 함수가 종료됨
1 - 함수 호출
2 - 함수 실행
3- 돌려줄 값 없어 함수 종료
pass 키워드
- 함수의 이름과 형태만 만들어 놓고, 내부는 나중에 코딩하고 싶은 경우에 사용하는 키워드
def myFunc() : <--- 오류 발생
def myFunc() :
pass
pass 키워드는 함수뿐 아니라,
if문이나 반복문에서도 아무것도 안 하는 코드로 채울 때에도 사용함
if True :
<--- 오류 발생
else :
print('거짓입니다')
if True :
pass
else :
print('거짓입니다')
유효 범위
- 자신이 활동할 수 있는 범위
함수 1 (지역변수 + 지역변수 + 지역변수) <== 전역변수 ==> 함수 2 (지역변수 + 지역변수)
지역변수
- 말 그대로 한정된 지역 (local) 에서만 사용되는 변수
전역변수
- 프로그램 전체 (global) 에서 사용되는 변수
지역변수와 전역변수의 이름이 같은 경우
- 함수 내에 변수가 정의되어 있는가를 확인하면 간단히 구분할 수 있음
교수님께서 알아두라고 한 개념들
프로그래밍 언어의 개념 :
컴퓨터가 이해하는 언어 / 컴퓨터에서 작동하는 프로그램을 만들기 위한 도구
변수의 개념 :
변수란 값을 저장하는 메모리 공간.
변수의 이름을 만드는 규칙 :
변수명은 영문 및 숫자만 사용할 수 있음
단, 숫자로만 이루어지거나 숫자로 시작하면 오류가 발생한다.
변수명에는 언더바 (_)를 사용할 수 있다. + 변수명은 대문자 & 소문자를 구분한다
변수명에 예약어를 사용할 수 없다. —> 오버라이딩 (중간고사 출제)
사칙 연산자 :
+, -, *, /
데이터형 (Data Type) :
변수나 상수의 종류를 의미. ex) 정수형, 실수형, 문자열형, 불형 등
데이터형 확인하기 —> type() 함수를 이용하면 됨.
ex)
var1 = 100
type(var1)
>>> <class 'int'>
숫자 데이터 형식은 소수점의 여부에 따라 크게 정수형(Int)과 실수형(Float)으로 나뉨
Str —> 문자열 !!
Boolean —> 논리형 !!
예습
리스트의 개념 :
리스트(List)는 하나씩 사용하던 변수를 붙여서 한 줄로 붙여놓은 개념이다.
그리고 전체는 한 덩어리라 변수 이름이 하나면 된다. (리스트도 변수임..)
리스트를 만드는 형식 —> 대괄호 안에 값들을 선언하면 됨.
ex)
리스트이름 = [값1, 값2, 값3, 값4]
4개의 값을 담은 정수형 리스트를 생성하려면 ?
numList =[10, 20, 30, 40]
1 - 각 변수를 사용하는 경우
num1, num2, num3, num4 = 10, 20, 30, 40
num1 사용
num2 사용
num3 사용
num4 사용
2 - 리스트를 사용하는 경우
numList = [10, 20, 30, 40]
numList[0] 사용
numList[1] 사용
numList[2] 사용
numList[3] 사용
주의할 점 : 개수가 4개인 리스트를 생성했다면 첨자는 1~4가 아닌, 0~3까지 사용해야 한다.
numList = [0, 0, 0, 0]
hap = 0
numList[0] = int(input("숫자 : "))
numList[1] = int(input("숫자 : "))
numList[2] = int(input("숫자 : "))
numList[3] = int(input("숫자 : "))
hap = numList[0] + numList[1] + numList[2] + numList[3]
print("합계 ==> " ,hap)
[실행 결과]
숫자 : 10
숫자 : 20
숫자 : 30
숫자 : 40
합계 ==> 100
리스트는 검색이 불편함. 그래서 맵을 사용함 !! 파이썬에서 Map ==> 딕셔너리 ..
맵 ==> 원소의 타입이 같지 않아도 됨. 객체형임.
리스트의 첫 번째 원소가 맵일수도 있음 !! 그러나 가급적이면 동일하게 원소를 설정하는게 유리함.
리스트를 생성할 때는 대괄호를 사용함.
리스트의 다양한 형태
비어있는 리스트 생성
정수로만 구성된 리스트
문자열로만 구성된 리스트
다양한 데이터 형식을 섞은 리스트 ==> 자주 사용하지 않으므로 참고만 해라.
because 나중에 데이터를 불러와서 처리할 때 복잡해지기 때문..
빈 리스트와 리스트의 추가 사용
리스트이름.append(값) 함수로 리스트를 하나씩 추가할 수 있다.
numList = []
for i in range(0, 4):
numList.append(0)
hap = 0
for i in range(0, 4):
numList[i] int(input("숫자 : "))
hap = numList[0] + numList[1] + numList[2] + numList[3]
print("합계 ==> ", hap) # sum을 이용하는게..
리스트는 값을 수정할 수 없음.. 고정 되어 있음
리스트 값에 접근하기
리스트에 접근할 때 클론을 사용해서 범위를 지정할 수도 있음. // 리스트이름[시작:끝+1]
인덱스 오류 ==> 초기화되지 않은 위치의 데이터에 접급할 때 발생하는 문제
append : 맨 뒤에 값 추가하기
insert : 정해진 위치에 값 삽입하기
del() : 리스트의 항목 삭제
del() 함수에 리스트 이름을 넣으면 리스트가 통째로 삭제됨 !!
del() 보다 remove(지울 값) 이 더 권장됨..
remove(지울 값) : 리스트에서 특정 값 삭제
ex)
>>> numList = [10, 20, 30]
>>> numList.remove(10)
>>> print(numList)
[실행 결과]
[20,30]
pop() : 제일 뒤의 값을 뽑아내서 값을 알려준 뒤 삭제함
count(찾을 값) : 찾을 값이 몇 개인지 개수를 세서 알려줌
sort() : 리스트의 값을 정렬함..
reverse() : 리스트의 마지막 인덱스부터 위치가 반대로 됨
copy() : 리스트를 새로운 리스트로 복사함
2차원 리스트
1차원 리스트를 여러 개 연결한 리스트
2개의 첨자를 사용함
리스트이름[행][열]
for문을 활용한 2차원 리스트 출력 ==> 중첩 for문 사용 - 중요함 !!
[코드 7-4] 참고
## [코드 7-4]
numList2 = [[1,2,3,4],
[5,6,7,8],
[9,10,11,12]]
for i in range(0,3) :
for k in range(0,4) :
print(" ", numList2[i][k], end='')
print("")
[실행 결과]
1 2 3 4
5 6 7 8
9 10 11 12
실습 코드 정리 (1월 10일)
# 리스트 선언 형태
list1 = [10, 20, 30, 40]
list2 = [i for i in range(1,10)]
# list3 = [0 for i in range(10)]
list3 = [0] * 10
# 리스트 값 조작
list1.append(50)
list1[0] = 100
list1[1:2] = [200,300]
list2[1] = [100,200] # 리스트에 원소로 리스트를 추가
list2.insert(1,2)
del(list2[3])
list3.remove(0)
# 리스트 출력
print(list1)
print(list2)
print(list3)
// 실행 결과
[100, 200, 300, 30, 40, 50]
[1, 2, [100, 200], 4, 5, 6, 7, 8, 9]
[0, 0, 0, 0, 0, 0, 0, 0, 0]
# 리스트 결합
print(list1 + list2)
print(list1 * 3)
// 실행 결과
[100, 200, 300, 30, 40, 50, 1, 2, [100, 200], 4, 5, 6, 7, 8, 9]
[100, 200, 300, 30, 40, 50, 100, 200, 300, 30, 40, 50, 100, 200, 300, 30, 40, 50]
# 기타 리스트 관련 함수 활용
print(len(list1)) # 리스트 크기 ==> 6
print(list1.pop()) # 마지막 값을 꺼내오고 삭제 ==> 50 삭제
print(list1)
print(list3.count(0)) # ==> 9
// 실행 결과
5
40
[100, 200, 300, 30]
9
num1 = 10
m = [1,2,3]
m2 = m
def varChange(i, mlist) :
i = i + 1
mlist.append(4)
print(i, mlist)
varChange(num1, m)
print(num1, m, m2)
# 원시변수 값이 안변하는것 ..이뮤터블 !! 리스트는 값 변경 가능.. 뮤터블
# 함수 안에서 값을 바꾸면 바깥에서도 적용 됨.. ==> 중요
# 이렇게 하고 싶지 않다면 copy 함수를 이용해라.
// 실행 결과
11 [1, 2, 3, 4]
10 [1, 2, 3, 4] [1, 2, 3, 4]
# for문 함께 사용시 유용한 방법
for i, n in enumerate(list1) : # enumerate
print(i,n, sep=':')
for l1, l2 in zip(list1, list2) : # 값을 unpacking 가능
print(l1,l2)
// 실행 결과
0:100
1:200
2:300
3:30
100 1
200 2
300 [100, 200]
30 4
2차원 리스트를 이용한 학생 성적 출력 프로그램 만들기
문제: 2차원 리스트를 이용한 학생 성적 출력 프로그램 만들기
- 3명의 학생이 각각 3과목을 수강
- 학생 배열과 성적 배열로 자료구조를 생성, 성적은 2차원 배열로 처리 -> 주어짐
- 모든 데이터는 정수로 처리
- 이름, 성적은 모두 탭으로 분리
- 개인별 총점, 평균 출력
- printReport() 함수를 만들어 처리
# 데이터
students = ['홍길동','김사랑','나대장']
scores = [[90,85,91],[92,95,88],[87,94,96]]
# 출력 예시
홍길동 90 85 91 266 88
김사랑 ....
나대장 .....
# 첫 번째 방법
def printReport(students, scores) :
total = 0
avg = 0
for i in range(0, len(students), 1) :
print(students[i], '\t', sep='', end='')
for k in range(0, len(scores), 1) :
print(scores[i][k], '\t', end='')
total += scores[i][k]
avg = total // len(scores)
print(total, '\t', avg, sep='',)
total, avg = 0, 0
students = ['홍길동', '김사랑', '나대장']
scores = [[90,85,91],[92,95,88],[87,94,96]]
printReport(students, scores)
# 두 번째 방법
def printReport(stu_list, score_list) :
for i, score in enumerate(score_list) :
print(stu_list[i], score[0], score[1], score[2], sep='\t', end='\t')
hap = sum(score)
avg = hap / len(score)
print('총점 : ', hap, '평균 :', int(avg), sep='\t')
print('')
students = ['홍길동', '김사랑', '나대장']
scores = [[90,85,91],[92,95,88],[87,94,96]]
printReport(students, scores)
## 딕셔너리 예제
dict1 = {2021001:'홍길동', 2021002:'김사랑', 2021003:'나대장'}
del1(dict1[2021003])
print(dict1)
print(dict1.keys(), dict1.values()) # dict_keys, dict_values 가 붙음. 출력상 보이는 값으로 for 등에서 사용시 문제 없음.
print(list(dict1.keys()), list(dict1.values())) # dict_keys 붙지 않음
print(dict1.items()) # 튜플 형태로 리턴
# key 로 전체값 출력
for key in diect1.keys():
print(dict1[ket])
# 전체 값만 출력
for value in dict1.values():
print(value)
# 키가 있는지 확인, 주로 if와 사용
if(2021001 in dict1) :
print(True)
튜플은 리스트와 다르게 소괄호로 만들며,
값을 읽을 수만 있고 수정할 수는 없음..
딕셔너리
-
단어 의미 그대로 영어사전과 같은 구조를 가짐
-
딕셔너리는 중괄호로 묶여 있음
-
키 (Key) 와 값 (Value) 의 쌍으로 이루어짐
딕셔너리변수 = {키1:값1, 키2:값2, ….}
키와 값을 반대로 생성해도 무방함 !!
즉, 키와 값을 사용자가 지정하는 것이지 어떤 값을 반드시 사용해야 하는 규정은 없으며, 딕셔너리는 순서가 없음
딕셔너리는 여러 개의 정보를 하나의 변수로 표현할 때 유용하게 사용됨 ..
테이블의 구조 == 딕셔너리의 구조 !!
딕셔너리에 정보를 더 추가하기
정보를 추가할 때는 키와 값을 쌍으로 추가해야 함
- ‘딕셔너리이름[키] = 값’ 형식을 사용함
딕셔너리의 키는 중복되지 않고 유일해야 함.. !!
딕셔너리와 관련된 유용한 함수
딕셔너리이름.keys() : 딕셔너리의 모든 키만 뽑아서 반환함
>>> empDict.keys()
dict_keys(['사번', '이름', '부서'])
list(딕셔너리이름.keys()) : 출력 결과에 dict_keys 가 붙지 않음 !
>>> list(empDict.keys())
(['사번', '이름', '부서'])
딕셔너리이름.values() : 딕셔너리의 모든 값을 리슽트로 만들어서 반환
딕셔너리이름.items() : 튜플 형태로도 구할 수 있음 !!
딕셔너리 안에 키가 있는지는 in을 사용하면 확인이 가능함.
in 은 if문과 함께 사용되는 경우가 많다.
ex)
>>> '이름' in empDict
True
>>> '주소' in empDict
False
딕셔너리에 저장된 것을 한 건씩 출력하려면 다음과 같이 for문과 함께 사용하면 됨..
>>> for key in empDict.keys() :
print( key, empDict[key])
empDict.keys() 는 전체 키의 목록을 반환하므로 위 코드는 다음과 같이 변형될 수 있다.
>>> for key in ['사변, '이름', '부서'] :
print( key, empDict[key])
for key in 리스트
구문은 리스트에 있는 것을 하나씩 추출해서 key에 넣고
반복문을 실행하므로 같은 결과가 나옴 ..
퀴즈-딕셔너리
- 학번을 키로 학생 이름을 저장한 students, 학번을 키(int)로 세과목의 성적 리스트를 저장한 scores 딕셔너리를 데이터로 사용
- 키보드로 학번을 입력받아 해당 학생의 학번, 이름, 과목별 성적, 총점, 평균을 출력
- 입력받은 학번은 형변환 필요
- 검색 출력을 위한 searchData() 함수 구현
- 과목명은 임의로 정해서 출력
- 전체 학생의 성적을 표로 출력하는 printAll() 함수 구현
- 코드는 가능한 최대로 간결하게 작성
# 데이터
students = {2021001:'홍길동', 2020100:'김사랑', 2021002:'나대장'}
scores = {2021001:[90,85,91],2020100:[92,95,88],2021002:[87,94,96]}
# 실행 예
## 조회할 학번을 입력하세요: 2021002
학번: 2021002 , 이름: 나대장
자바: 87 , C언어: 94, 파이썬: 96
총점: 277 평균: 92
## 학생 성적 리스트 ##
학번 이름 자바 C언어 파이썬 총점 평균
2021001 홍길동 90 85 91 266 88
2020100 김사랑 92 95 88 275 91
2021002 나대장 87 94 96 277 92
# 202135317 김정준
students = {2021001:'홍길동', 2020100:'김사랑', 2021002:'나대장'}
scores = {2021001:[90,85,91],2020100:[92,95,88],2021002:[87,94,96]}
major = ["JAVA", "C", "Python"]
total = 0
def searchData(sid):
global total
if (sid in students.keys()):
print(f"학번 : {sid}, \t이름:{students[sid]}")
for i in range(len(scores[sid])):
print(f"{major[i]}:{scores[sid][i]},", end='\t')
total += scores[sid][i]
print(f"\n총점 : {total},\t평균 : {int(total/len(scores[sid]))}")
total = 0
else :
print("죄송합니다. 해당 정보가 없습니다.")
def printAll():
global total
print('## 학생 성적 리스트 ##')
print('학번\t이름\tJAVA\tC\tPython\t총점\t평균')
total = 0
for id, st, sc in zip(students.keys(), students.values(), scores.values()):
total = sum(sc)
print(id, st, *sc, total, int(total/len(sc)), sep='\t')
Num = int(input("## 조회할 학번을 입력하세요."))
searchData(Num)
printAll()
자습 !
Formating !!
string formatting - 문자열 포매팅이란?
문자열 포매팅을 이용하면 출력을 더 쉽게 할 수 있다. !!
month = 1
while month <= 12 :
print(f"2022년 {month}월") # 중괄호 필수 ..
month += 1
[실행 결과]
2022년 1월
2022년 2월
2022년 3월
2022년 4월
2022년 5월
2022년 6월
2022년 7월
2022년 8월
2022년 9월
2022년 10월
2022년 11월
2022년 12월
f-string 이란?
f-string formating 은 파이썬 version 3.6 부터 사용할 수 있는 기능이다.
f-string ==> f와 {}만 알면 된다 !!
a = 'woowakgood'
b = 36
result1 = f"{a}은 {b}살 입니다."
print(result1)
[실행 결과]
woowakgood은 36살 입니다.
문자열 포매팅을 쓰는 이유 ==> 문자열 중간 중간에 특정 변수의 값을 넣어주기 위해서 사용하는 것.. ^^
for문 !!
while문과 비슷한 반복문인 for문..
for문의 기본 구조
for 변수 in 리스트 (또는 튜플, 문자열):
수행할 문장 1
수행할 문장 2
...
리스트를 통해서 이해해보자.
>>> test_list = ["아", "배고프다", "ㅇㅈ?"]
>>> for i in test_list:
print(i)
[실행 결과]
아
배고프다
ㅇㅈ?
“총 5명의 학생이 시험을 보았는데 시험 점수가 60점이 넘으면 합격이고 그렇지 않으면 불합격이다. 합격인지 불합격인지 결과를 보여 주시오.”
students = [90, 24, 87, 40, 61]
number = 0
for i in students:
number += 1
if i >= 60:
print("응 합격이야")
else:
print("응 불합격이야")
파일을 왜 사용하는가 ?
컴퓨터 ==> 뭔가를 입력 받는 장치.
컴퓨터 프로그램은 데이터를 변수에다가 저장해서 사용함.
프로그램이 실행만 되고 있다면 변수는 계속 사용될 수 있음.
파일 ==> 컴퓨터 운영체제의 핵심 기능 중 하나.
운영체제 ==> 입출력과 메모리 관리, 파일 시스템 (FAT32, exFAT, NTFS …) (여러 운영체제에서 호환 되는 것 두 개 : FAT32, exFAT) (NTFS : Mac 에서 구동 X)
파일 ==> 두 가지 타입으로 나뉨. : text and binary
-
text : 문자로 구성. 읽기가 힘듦. 일반 메모장으로 열 수 있음
-
binary : 0과1로 구성됨. 일반 메모장으로 못 염
- 실행 가능 파일. (exe 등)
- docx, ppt, ecl, hwp 등
파일의 구조
- 이름.확장자
- OS가 이 파일이 무슨 파일인지 확장자를 통해 판단함
1 - 확장자
2 - 파일 시스템 구조
- 디렉토리 개념 !! : 다른 말로는 폴더라고 함. 체계적인 파일 관리 구조.
- C드라이브 == root
- 절대경로 (시작 부분부터 표시를 함) (C드라이브부터 출발)
- 상대경로 (현재 파일의 위치를 기준으로 함)
3 - 권한
- 보안 요소 중 하나. 파일을 사용하는 권한을 뜻함. Read와 Write, 실행 !! (RWX) 권한 ==> 유저 에게 부여 됨.
교재 내용 !!
파일 읽기 3단계 – 중요함 !!!! (rwa)(read, write, append)
- 파일 열기 (Open)
- 파일 읽기 (Read)
- 파일 닫기 (Close ==> 저장)
입출력이라는 프로그램은 기본적으로 하나의 개념임. (고급 프로그래밍)
파일을 열기 위해서는 open() 함수에서 파일명을 지정하고, 읽기를 의미하는 “r”로 설정한다.
변수명 = open("파일경로/파일이름", "r")
파일에 담아둔 데이터를 읽기 위한 함수
- readline(), readlines()
readline() = 한 번에 한 행씩 읽음 readlines() = 한꺼번에 가져와서 리스트 형태로 저장함
파일 쓰기
- 결과를 파일에 쓰게 되면 모니터에는 나오지 않고, 파일로 직접 저장 됨
C언어, 파이썬 (절차지향)
OOP (object oriented programming) (C++, Java, …) (객체지향)
Object ? => 우리 눈에 보이는 모든 것 !
교재 내용 !!
객체의 개념
- 객체란 어떤 속성과 행동을 가지고 있는 데이터를 말한다.
클래스
객체를 만들기 위해서는 클래스가 필요하다.
클래스를 만들기 위한 형식은 다음과 같다.
class 클래스이름:
# 클래스 생성 코드 구현
속성 - 변수
행동 - 함수
클래스 안에서 구현된 함수는 함수라고 부르기 보다는 메소드(Method)라는 용어로 부른다.
class Rabbit:
# 토끼의 속성 (변수)
모양 = ""
X위치 = 0
Y위치 = 0
# 토끼의 행동 (함수)
def goto(이동할 좌표):
# 토끼를 이동할 좌표로 이동시키는 코드
생성자
- 생성자란 객체를 생성되면 무조건 호출되는 메소드
생성자의 형태
- 생성자는 클래스 안에서
__init__()
라는 이름으로 지정되어 있다.
class 클래스이름:
def __init__(self):
# 초기화할 코드 입력
클래스의 상속
클래스는 상속(Inheritance)을 할 수 있다.
- 상속은 클래스끼리만 가능하다. 따라서 객체에는 상속의 개념이 적용되지 X
상속의 구현
상속을 구현하기 위해서느 서브 크래스를 정의할 때, 괄호 안에 슈퍼 클래스의 이름을 넣어준다.
class 서브 클래스(슈퍼 클래스):
# 서브 클래스 코드 구현
- 지역변수는 함수 내에서만 쓸 수 있는 것 (함수 안에서 만들어진 변수)
-
함수가 호출 될 때 만들어졌다가, 함수 호출이 끝나면 사라짐
전역변수는 프로그램 내 어디서든 부를 수 있는 변수 (함수 밖에서 만들어진 변수)
==> 전역변수를 선언하는 방법 : 변수명 앞에 global !!
def test():
global a
a = 3
b = 2
return a + b
print(test())
print(a)
global a
a = 1
def test():
global a
a = 3
b = 2
return a + b
print(test())
print(a)
gun = 10
def checkpoint(soldiers): # 경계근무
global gun # 전역 공간에 있는 gun 사용
print("[함수 내] 남은 총 : {0}".format(gun))
def checkpoint_ret(gun, soldiers):
gun = gun - soldiers
print("[함수 내] 남은 총 : {0}".format(gun))
return gun
print("전체 총 : {0}".format(gun))
# checkpoint(2) # 2명이 경계 근무 나감
gun checkpoint_ret(gun, 2)
print("남은 총 : {0}".format(gun))
그러니까 . . .
a = 10 # ---> a : 전역변수 !!!
def func(b): # func 이라는 함수를 정의 .. 이 함수는 c = a + b 를 수행 ..
c = a + b # ---> b, c : 지역변수 !!!
return c
print(func(10))
[실행 결과]
20
전역변수 a 는 전체 프로그램 안에서 언제든지 사용될 수 있음 ..
지역변수 b 와 c 는 함수가 종료 되자마자 자동으로 폐기 ..
Q. 다음 소스코드에서 변수 a, b, c를 각각 지역변수인지 전역변수인지 구분하세요.
a = 10
def square():
b = a * a
return b
c = 20 + square()
print(c)
a : 전역변수 —> 함수의 바깥에 존재하잖아
b : 지역변수
c : 전역변수
들여쓰기를 잘 확인해라 !!
Leave a comment