본문 바로가기
Web & Mobile/Python

Lecture 83 - Python(4) 사용자 입력과 출력, 주민번호유효검사, 파일읽고쓰기, 내장함수

by Bennyziio 2019. 7. 24.
반응형

사용자 입력과 출력
input의 사용

num1 = input('숫자를 넣어줘 : ')
print('num1 : {0}'.format(num1))

명령프롬프트로 실행해보자

C:\Users\kitcoop>cd c:\Python\eclipse-workspace\Ex01

c:\Python\eclipse-workspace\Ex01>python input.py
숫자를 넣어줘 : 1
num1 : 1

숫자 여러개 실행하기

num1 = input('숫자를 넣어줘 : ')
print('num1 : {0}'.format(num1))
num2 = input('숫자를 넣어줘 : ')
print('num1 : {0}'.format(num2))
num3 = input('숫자를 넣어줘 : ')
print('num1 : {0}'.format(num3))

c:\Python\eclipse-workspace\Ex01>python input.py
숫자를 넣어줘 : 1
num1 : 1
숫자를 넣어줘 : 2
num1 : 2
숫자를 넣어줘 : 3
num1 : 3
c:\Python\eclipse-workspace\Ex01>python input.py
숫자를 넣어줘 : 드
num1 : 드
숫자를 넣어줘 : 라
num1 : 라
숫자를 넣어줘 : 군
num1 : 군

Print 사용

연습문제
1. 소문자 -> 대문자
hong gil dong -> Hong Gil Dong

a = 'hong\n' + 'gil\n' + 'dong\n'
print(a)

print(a.title())

입력받은 이름을 title()해보기

name = input('이름을 입력하세요 : ')
print('Name : {0}'.format(name.title()))

강사님이 한 것

str = input('문자열을 입력해주세요 : ')
print('str : {0}'.format(str))

arr = str.split(' ')

for i in range(len(arr)) :
	arr[i] = arr[i][0].upper() + arr[i][1:]
result = ' '.join(arr)

print('결과 : {0}'.format(result))

주민등록번호 유효 검사

str = input('주민등록번호를 -를 제외하고 입력하세요 : ')
print('str : {0}'.format(str))

bit = [2,3,4,5,6,7,8,9,2,3,4,5]
sum = 0

for i in range(len(bit)):
	sum += int(str[i]) * bit[i]
cnum = (11 - (sum % 11)) % 10
lnum = int(str[-1])

if(cnum == lnum):
	print('유효합니다')
else:
	print('유효하지 않습니다. 다시 입력하세요')

int(str[i])는 integer로 형변환을 시키는 것으로 String -> integer로 변환해서 bit[i]와 각 i번째 수를 곱하여야 하기 때문이다.

파일 읽고 쓰기
파일 생성하기

파일을 쓰기 모드로 열어 출력값 적기

f = open("C:/Python/eclipse-workspace/Ex01/새파일.txt", 'w')
for i in range(1, 11):
	data = "%d번째 줄입니다.\n" % i
	f.write(data)
f.close()
C:\Python\eclipse-workspace\Ex01>python writedata.py

새파일.txt가 없었는데 명령실행후 생성됨

프로그램의 외부에 저장된 파일을 읽는 여러 가지 방법

f = open("C:/Python/eclipse-workspace/Ex01/새파일.txt", 'r')
line = f.readline()
print(line)
f.close()

f = open("C:/Python/eclipse-workspace/Ex01/새파일.txt", 'r')
while True:
	line = f.readline()
	if not line: break
	print(line)
f.close()

f = open("C:/Python/eclipse-workspace/Ex01/새파일.txt", 'r')
while 1:
	line = f.readline()
	if not line: break
	print(line)
f.close()

while True: = while 1: 명령 실행 내용은 같다

readlines() 함수 이용하기

f = open("C:/Python/eclipse-workspace/Ex01/새파일.txt", 'r')
lines = f.readlines()
for line in lines:
	print(line)
f.close()

read() 함수 이용하기

f = open("C:/Python/eclipse-workspace/Ex01/새파일.txt", 'r')
data = f.read()
print(data)
f.close()

파일에 새로운 내용 추가하기

f = open("C:/Python/eclipse-workspace/Ex01/새파일.txt", 'a')
for i in range(11, 20):
	data = "%d번째 줄입니다.\n" % i
	f.write(data)
f.close()

with문과 함께 사용하기

with open("C:/Python/eclipse-workspace/Ex01/foo.txt", 'w') as f:
	f.write("Life is too short, you need Python")

내장 함수

지금까지 파이썬으로 프로그래밍하기 위해 알아야 하는 대부분의 것들을 공부했다. 이제 여러분은 자신이 원하는 프로그램을 직접 만들 수 있을 것이다. 하지만 그 전에 먼저 여러분이 만들고자 하는 프로그램이 이미 만들어져 있는지 살펴보기 바란다. 물론 공부를 위해서라면 누군가 만들어 놓은 프로그램을 또 만들 수도 있다. 하지만 그런 목적이 아니라면 이미 만들어진 것을 다시 만드는 것은 불필요한 행동이다(Don’t Reinvent The Wheel, 이미 있는 것을 다시 만드느라 쓸데없이 시간을 낭비하지 말라). 그리고 이미 만들어진 프로그램들은 테스트 과정을 수도 없이 거쳤기 때문에 충분히 검증되어 있다. 따라서 무엇인가 새로운 프로그램을 만들기 전에는 이미 만들어진 것들, 그중에서도 특히 파이썬 배포본에 함께 들어 있는 파이썬 라이브러리들을 살펴보는 것이 매우 중요하다.
라이브러리들을 살펴보기 전에 파이썬 내장 함수를 먼저 살펴보도록 하자. 우리는 이미 몇 가지 내장 함수들을 배웠다. print, del, type 등이 바로 그것이다. 이러한 파이썬 내장 함수들은 외부 모듈과는 달리 import를 필요로 하지 않는다. 아무런 설정 없이 바로 사용할 수가 있다. 이 책에서는 활용 빈도가 높고 중요한 함수들을 중심으로 알파벳 순서대로 간략히 정리했다. 파이썬으로 프로그래밍을 하기 위해 이 함수들을 지금 당장 모두 알아야 하는 것은 아니므로 가벼운 마음으로 천천히 살펴보자.

abs - absolute number

print(abs(3))
print(abs(-3))
print(abs(-1.2))

all

print(all([1, 2, 3]))
print(all([1, 2, 3, 0]))

any

print(any([1,2,3,0]))
print(any([0, ""]))

chr

print(chr(97))
print(chr(48))

dir

str = 'hello'
# 도움말
print(dir(str))

리스트 형식 dir

list = [1,2]
print(dir(list))

divmod

print(divmod(7, 3))
print(divmod(1.3, 0.2))

enumerate

for i, name in enumerate(['body', 'foo', 'bar']):
	print(i, name)

eval

a = eval('1+2')
print(a)
b = eval("'hi' + 'a'")
print(b)
c = eval('divmod(4,3)')
print(c)

filter

filter 적용 안하고

def positive1(l):
	result = []
	for i in l :
		if i > 0 :
			result.append(i)
	return result
print(positive1([1, -3, 2, 0, -5, 6]))

위 소스를 filter 적용해서 해보자

def positive1(l):
	result = []
	for i in l :
		if i > 0 :
			result.append(i)
	return result

def positive2(x):
	return x > 0
print(positive1([1, -3, 2, 0, -5, 6]))
print(list(filter(positive2, [1, -3, 2, 0, -5, 6])))

filter을 적용하지 않은 positive1()과 filter를 적용한 positive2()가 같은 결과를 나오는 것을 확인할 수 있다. filter를 적용하여 적은 줄의 코딩으로 같은 기능을 구현하였다.
lambda(익명함수)를 사용하면 더 짧게 구현이 가능하다

def positive1(l):
	result = []
	for i in l :
		if i > 0 :
			result.append(i)
	return result

def positive2(x):
	return x > 0
print(positive1([1, -3, 2, 0, -5, 6]))
print(list(filter(positive2, [1, -3, 2, 0, -5, 6])))

print(list(filter(lambda x : x > 0, [1, -3, 2, 0, -5, 6])))

hex

print(hex(234))
print(hex(3))
print(hex(11))

id

a = 3
id(3)
print(id(3))

id(a)
print(id(a))

b = a
print(id(b))

input

a = input('input : ')
print('input : {0}'.format(a))

int

isinstance

len - java에서 length

list - 형변환기능

map - 연산을 하는 것

def two_times1(l):
	result = []
	for n in l:
		result.append(n*2)
		return result

def two_times2(x):
	return x * 2

print(two_times1([1,2,3,4]))
print(list(map(two_times2, [1,2,3,4])))

위 소스를 lambda(익명함수)화 시켜보자

def two_times1(l):
	result = []
	for n in l:
		result.append(n*2)
		return result

def two_times2(x):
	return x * 2

print(two_times1([1,2,3,4]))
print(list(map(two_times2, [1,2,3,4])))

print(list(map(lambda x : x * 2, [1,2,3,4])))

max, min (최대, 최소)

oct - 8진수

open

ord

pow - 제곱

range

- 인수가 하나일 경우 : 시작 숫자를 지정해 주지 않으면 range 함수는 0부터 시작함을 명심할 것

a = list(range(5))
print(a)

- 인수가 2개일 경우

b = list(range(5, 10))
print(b)

- 인수가 3개일 경우

# 1부터 10까지 2씩 나열
c = list(range(1, 10, 2))
print(c)
# 0부터 -10가지 -1씩 나열
d = list(range(0, -10, -1))
print(d)

round - 반올림

sorted - 입력값을 정렬한 후 리스트로 리턴

str - String으로 형변환

print(str(3))
print(str('hi'))
print(str('hi'.upper()))

tuple - 튜플 형태로 형변환

print(tuple('abc'))
print(tuple([1, 2, 3]))
print(tuple((1, 2, 3)))

type - 입력값의 자료형이 무엇인지 알려줌

str = 'abc'
print(type(str))

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

tuple = (1, 2, 3)
print(type(tuple))

zip - 동일한 개수로 이루어진 자료형을 묶는다.

a = list(zip([1, 2, 3], [4, 5, 6]))
print(a)

b = list(zip([1, 2, 3], [4, 5, 6], [7, 8, 9]))
print(b)

c = list(zip('abc', 'def'))
print(c)

 

반응형

댓글