💻STUDY/PYTHON STUDY

3주차 수업 복습

coldNoodlePigeon 2021. 3. 17.

01. 입력과 출력

입력 

 

입력(input): 프로그램에서 필요한 값을 받는 작업

장치: 키보드, 마우스, 스타일러스펜 등 

자료형: 정수, 실수, 문자, 문자열

대화상자를 통한 입력이 가능하다. 

 

파이썬의 input 함수는 항상 사용자가 입력한 값을 문자 or 문자열로 반환하기 때문에, 숫자 또는 실수로 입력받기 위해서는 input 함수의 반환값을 형변환 해주어야 한다. (int, float 함수로 형변환시키기) 

 

input 함수 

 

>>> c=input()
3
>>> print(c+c)
33
>>> a=int(input())
3
>>> print(a+a)
6

 

input 함수는 입력한 값을 문자 또는 문자열로 반환하기 때문에, 형변환이 필요한 경우에는 시켜주어야 한다. 

 

 

출력

 

출력(output): 컴퓨터에서 처리된 결과값을 사용자가 확인할 수 있도록 전달하는 작업. 

출력 장치: 모니터, 파일, 프린터, 스피커 

주로 print 함수를 사용합니다. 

 

 

>>> a=3
>>> b=4.5
>>> print(a);print(b)
3
4.5

 

한 명령줄에 여러개의 명령을 입력하고 싶을 때, 위처럼 ;을 이용하여 입력할수 있다. 

 

>>> a=3
>>> b=4.5
>>> print(a);print(b)
3
4.5
>>> a=3
>>> b=4.5
>>> print(a,end='');print(b)
34.5
>>> print(a,end=' ');print(b)
3 4.5
>>> print(a,end='\n');print(b)
3
4.5
>>> a='abc'
>>> b='def'
>>> print(a+b)
abcdef
>>> print(a,b)
abc def

end옵션을 이용하여 두 출력 문장 사이에 들어갈 내용을 지정해줄 수 있다. 

문자열끼리 결합(concatenation)도 가능하다. 

 

 

import random
answer=random.randint(1,100)
num=0
times=6
while num!=answer and times>0:
    num=int(input("값을 입력하세요  "))
    if num<answer:
        print("정답보다 작습니다.")
    elif num>answer:
        print("정답보다 큽니다.")
    times = times-1
    print(times,"번 기회가 남았습니다.")
    print()
if num ==answer:
    print("정답입니다.")
else:
    print("더이상 기회가 없습니다. 정답은",answer)

random 모듈의 randint 함수를 이용하여 무작위 정수를 발생시킨다. 

answer=random.randint(1,100) 은 1~100까지의 무작위 정수를 발생시켜 answer이라는 변수에 저장하는 것을 의미.

while 함수는 조건이 참이면 계속 반복하는 함수. 

while num!=answer and times>0: 은 answer에 저장된 값이 num에 저장된 값과 같지 않고, times에 저장된 변수가 0보다 클때 반복해서 실행하라는 의미. 

 

값을 입력하세요  50
정답보다 큽니다.
5 번 기회가 남았습니다.

값을 입력하세요  30
정답보다 작습니다.
4 번 기회가 남았습니다.

값을 입력하세요  40
정답보다 큽니다.
3 번 기회가 남았습니다.

값을 입력하세요  35
정답보다 큽니다.
2 번 기회가 남았습니다.

값을 입력하세요  33
정답보다 큽니다.
1 번 기회가 남았습니다.

값을 입력하세요  32
0 번 기회가 남았습니다.

정답입니다.

위는 코드를 실행했을 때 뜨는 결과이다. 

 

 

02.문자열 처리

 

문자열 출력 포맷 

 

>>> s1= "I love chicken more than %s"
>>> s2="vegetable"
>>> print(s1%s2)
I love chicken more than vegetable

%s는 외부에서 전달되는 문자열로 대체될 부분. print(s1%s2) 문장에서 s2 문자열이 s1에 전달되어 출력됨.

 

 

>>> s3 = "python is %d times easier than %s"
>>> s4=10
>>> s5="c++"
>>> print(s3%(s4,s5))
python is 10 times easier than c++
>>> print("%d %s %d"%(19,'a',4))
19 a 4
>>> print("%d %s %d"%(10,'a','5'))
Traceback (most recent call last):
  File "<pyshell#9>", line 1, in <module>
    print("%d %s %d"%(10,'a','5'))
TypeError: %d format: a number is required, not str

%d 는 정수인자를 넣을 때 사용한다. (문자열은 불가능!)

 

(%f는 실수 넣을때 사용함) 

 

>>> print (5 *'b')
bbbbb
>>> print ('b'*5)
bbbbb
>>> print ('5'*5)
55555
>>> print (5*5)
25
>>> print ('a',' '*10,'b')
a            b

공백 ' ' 을 이용하면 원하는 만큼의 빈칸을 입력할 수 있다. 

 

 

문자열 자르기

 

>>> a_string = "this is a sentence"
>>> a_string.split()
['this', 'is', 'a', 'sentence']
>>> b_string="a,b,c,d,e,f"
>>> b_string.split(",")
['a', 'b', 'c', 'd', 'e', 'f']

split 함수는 문자열을 특정 내부 문자를 기준으로 분할할때 사용하는 문자열 내장 함수. 파일처리할때 유용하다. 

 

 

03. GUI 

 

 

를 하려는데 이럴수가..

easygui가 설치되지 않는다ㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜ 

pip 오류가 뜬다. 이게 무슨 일이야!!!! 

 

환경 변수를 새로 설정해야한다길래 pip파일을 찾아서 경로 복사 후 path를 추가했는데도.. 계속 저런 오류들이 뜬다. 일단 조교님께 질문을 올려놨다. (ㅠㅠㅠ) 

 

걍 답없을때는 재설치가 답이라고 생각해서 재설치할때 체크 항목같은건 다 체크를 하고 넘어갔다. 그랬더니 설치가 되었다. 처음 설치때 path 자동 생성? 이런걸 미리 설정해두지 않으면 컴퓨터가 바보같이 ?? 뭐 어딜 하라는거여? 하고 인식을 못한다고 한다. 멍청한 컴퓨터 자식.. 그래서 재설치할때 다시 다 체크했다. 

 

easygui 모듈은 사용자와 상호작용할 수 있는 대화상자를 제공한다. 대화상자 종류로는 buttonbox, msgbox(출력 메시지 대화상자로 출력할때), enterbox, choicebox 등이 있다.  

 

import easygui
lang=easygui.buttonbox("좋아하는 음식은 무엇입니까?", choices=['chicken','pizza','ramen'])
easygui.msgbox(lang+"를 선택하셨습니다")

 

 

 

위와 같이 buttonbox가 실행된다. 그리고 이 셋중 하나를 누르게 되면... 
위와 같이 출력메시지를 msgbox로 출력한다. 

 

 

import easygui
lang=easygui.enterbox("당신이 좋아하는 음식은 무엇입니까?")
easygui.msgbox("당신은 "+lang+"을 좋아하시는 군요!")

 

 

 

위와 같이 enterbox가 출력되며 문자열을 입력받아 lang 변수에 저장토록 한다. 
그러면 위와 같이 메시지를 msgbox로 출력해주는 것을 볼 수 있다. 

 

 

import easygui
food=['라면','김밥','로제떡볶이']
reply=easygui.choicebox("뭘 먹을래?",choices=food)
easygui.msgbox(reply+"을 주문했습니다")

 

위와 같이 리스트 항목이 choice로 뜨는 것을 확인할 수 있다. 

 

 

(문법이 안맞지만 신경쓰지 말자..) 하면 결과를 msgbox로 출력해준다. 

 

 

 

숫자 맞추기 예제 

 

 

import easygui 
import random
answer=random.randint(1,100) #1~100 사이의 난수 발생. 
guess=0 
num=easygui.buttonbox("도전 횟수를 선택하세요",choices=['5','6','7'])
#주의: choices 리스트 안에는 정수 저장X, 문자열 형태로 저장해주기. 
num=int(num)
#그 후 num을 정수로 형변환 시켜줘야만, 횟수 감소 계산이 가능. 
while guess!=answer and num>0:
    guess=easygui.integerbox("1~100 사이의 숫자를 입력하세요. 도전기회 ="+str(num))
    if guess<answer:
        easygui.msgbox(str(guess)+"는 정답보다 작습니다.")
    elif guess>answer:
        easygui.msgbox(str(guess)+"는 정답보다 큽니다.")
    num=num-1
#while은 조건이 맞을시 명령을 계속 실행하는 반복문. guess 값이 answer과 같지 않고, 
#남은 횟수가 0이 아닐시에 guess 변수에 새로운 값을 입력.guess 값과 answer 값의 대소 관계를
#비교하여 더 큰지 작은지를 알려주는 msgbox를 출력하도록하고, num 값을 -1씩 감소시킴. 
if guess==answer:
    easygui.msgbox("정답입니다.")
else:
    easygui.msgbox("더이상 기회가 없습니다. 정답은" +str(answer))

 

 

 

04.파일 처리

 

 

파일읽기

 

텍스트 파일의 각 문장을 읽어서 화면에 출력하는 예제. 

def read_file():
    f=open('memo.txt')
    while True:
        line=f.readline()
        if len(line)==0:
            break
        line=line.strip()
        mymemo.append(line)

    f.close()

mymemo=[]
read_file()
for item in mymemo:
    msg=item+'\n'
    print(msg)
    

#def 는 임의로 함수 만들때 사용하는 것 

#open() 함수로 파일 이름, 열기 모드를 입력값으로 받고 결과값으로 파일 객체를 돌려준다. 

#코드 실행 전에 memo.txt를 생성하여 소스 코드 파일과 같은 위치에 저장해야 함.

#readline()을 이용해 파일의 저장된 내용을 읽는다. (while함수를 이용해 전 내용을 읽도록 함)

#if와 len을 이용하여 공백(아무것도 저장되어 있지 않을때) while을 빠져나오도록 한다. 

#strip()을 이용해 공백을 삭제하도록 함.

#mymemo라는 리스트에 line에 저장된 내용을 저장(추가)함.

#close()를 통해 읽기를 마침. 

#for 반복문을 통해 mymemo에 저장된 내용들과 new line을 함께 추가하도록 하여 출력시킨다. 

 

파일쓰기

 

파일을 쓰기모드('w')로 열고 write 함수를 이용하여 각 리스트 항목을 파일에 쓴다.

 

def write_file():
    f=open('memo.txt','w')
    for item in mymemo:
        msg=item+'\n'
        f.write(msg)

    f.close()

mymemo=[]
while True:
    print("구입할 상품을 입력하시오. 빠져나가려면 공백을 입력:")
    item=input()
    if len(item)==0:
        break
    mymemo.append(item)

write_file()
print(len(mymemo),"개의 상품이 파일에 적혔습니다.")

#'w'로 쓰기 모드로 진행.

#코드 실행 시 입력했던 값들이 memo.txt에 입력된것을 확인할 수 있다! 

'💻STUDY > PYTHON STUDY' 카테고리의 다른 글

6주차 수업 복습  (0) 2021.04.07
5주차 수업 복습  (0) 2021.03.31
4주차 수업 복습  (0) 2021.03.23
2주차 수업 복습  (0) 2021.03.10
1주차 수업 복습  (2) 2021.03.05

댓글