[day-3] 입출력, 랜덤, 변수, 자료형

Joohyung Park·2024년 1월 14일
0

[모두연] 오름캠프

목록 보기
3/95

입출력

  • input()
  • split()
  • print문에서의 end

input() 함수를 사용하여 사용자의 입력을 받을 수 있다

sentence_1 = input("1. 이번 해에는 깃허브 _을 꾸준히 한다:")
print(f"1. 이번 해에는 깃허브 {sentence_1}을 꾸준히 한다.")

split() 함수를 사용하여 특정 문자를 기준으로 문자열을 분리 가능하다

sentence_2 = input("올해는 ___과 ___에 집중하려고 한다: ") 
word_1, word_2 = sentence_2.split()  # 두 단어를 입력받고, (필수) 공백을 기준으로 분리

print문 내에서 end 인자로 서로 다른 두 문장을 합치기 등을 할 수 있다

# 다양한 방법으로 input 내용을 print 할 수 있다.
word1 = input("올해는 __와")
word2 = input("__에 집중하려고 한다.")
print(f"올해는 {word1}와", end = " ")
print(f"{word2}에 집중하려고 한다.")

랜덤 모듈

  • randrange
  • randint
  • choice

randrange(시작값, 끝값)

num = random.randrange(0,10)  # 시작값부터 끝값-1까지의 숫자중에서 무작위로 선택
print(num)

randint(시작값, 끝값)

정수형 범위내에서 무작위로 숫자를 선택한다.

import random

# 0~9까지의 임의의 숫자를 선택하는 코드 작성

num = random.randint(0,9)
print(num)

random.choice([선택되고자 하는 숫자 리스트])

리스트 안의 범위에서 숫자 1개를 랜덤으로 선택한다.

import random

throw1 = random.choice([0, 1])
throw2 = random.choice([0, 1])
throw3 = random.choice([0, 1])
throw4 = random.choice([0, 1])

total_back = throw1 + throw2 + throw3 + throw4  # 뒷면 합산

results = ['모', '도', '개', '걸', '윷']  # 전부 0(앞)이면 모, 1개만 1이면 도..

print(results[total_back])

변수

변수는 가리키는 것이며 담겨져 있는 실체는 변하지 않는다

  • type
  • dir
  • del
# 다음과 같은 경우, x의 값은 변하지만 y와 z의 값은 초기 대입한 그대로이다.
x = 10
y = x
z = y
x = 20
print(y, z) # 결과 값은 10입니다.

변수의 개념은 언어마다 다르며 파이썬에는 가리키는 것을 뜻한다. 또한, 변수의 이름은 숫자로 시작이 불가하다는 특징이 있다.

type() 함수로 해당 변수의 타입을 확인 가능하며, dir() 함수로 어떤 기능을 하는지 확인할 수 있다. 변수의 삭제는 del() 함수를 사용한다.

x = 10
print(type(x))
print(dir(x))
# 출력
 # int라는 이름을 가지고 있군요!
['__abs__', # 메직 메서드: 절대값이 되는군요!
'__add__', # 메직 메서드: 더하기가 되는군요!
'__and__', # 메직 메서드: 논리 연산이 되는군요!
# ...생략...
'__mul__', # 메직 메서드: 곱하기가 되는군요!
# ...생략...
'real', # 메서드: 실수부를 출력하는 메서드
'to_bytes' # 메서드: 바이트로 변환하는 메서드
]

정수 자료형

  • 진수 변환
  • 메서드
  • id()

진수 변환은 간단하게 말해, 12와 같은 10진수 숫자를 2진수, 8진수 등으로 바꾸는 작업을 말한다. 자주 나오는 개념은 아니기에 이런 것이 있다는 것만 기억하고 넘어가자.

메서드는 자료형이 할 수 있는 일이고, 클래스 부분을 정리하며 자세히 설명할 예정이다. 마지막으로 id() 함수는 해당 변수의 주소를 출력해주는 역할을 한다.

# -5 ~ 256
x = 256
y = 256

print(id(x), id(y)) # 출력 : 138041748299984 138041748299984

실수 자료형

  • 부동소수점 문제

실수 자료형은 기본적으로 소수점을 가질 수 있다. 또한 float() 함수로 실수로 형변환이 가능하다. 이러한 실수 자료형은 문제점이 1개 있는데 다음의 예시를 보자.

10.1 + 10.2
# 출력 : 20.299999999999997

위의 예시에서 왜 20.3이 아니라 20.299999가 나오는 것일까?

우리는 이 문제를 컴퓨터의 관점에서 보면 이해할 수 있다. 프로그래밍 언어는 기본적으로 사람이 사용하기 편리하도록 10진수를 기반으로 수를 표현하지만 컴파일 과정에서 2진수로 전환되기 때문이다.

.1 * 2 === 0.2,
.2 * 2 === 0.4,
.4 * 2 === 0.8,
.8 * 2 === 1.6,
.6 * 2 === 1.2,
.2 * 2 === 0.4, # 여기서부터 같은 결과가 반복되기 시작합니다..4 * 2 === 0.8,
.8 * 2 === 1.6,
.6 * 2 === 1.2,
.2 * 2 === 0.4,
.4 * 2 === 0.8,
.8 * 2 === 1.6,
.6 * 2 === 1.2,
.
.
.
정부수와 합치면 결과는 0.000110011001100110011... 이 됩니다.

위의 사례를 보면 알 수 있듯이, 0.1은 무한 소수가 되는데 컴퓨터는 메모리의 한계로 무한한 값을 저장할 수 없기 때문에 적당한 소수점 위치에서 반올림하여 계산을 종료한다.

하지만여기서 적당히 소수점 버림을 하면 0.1 + 0.2 의 답은 0.2가 되어버리기 때문에 표현할 수 있는 살짝 더 큰 수인 0.30000000000000004 를 반환하는 것이다.

추가로 설명하자면 실수형은 부동 소수점이 표현할 수 있는 수를 넘겨버리면 무한수로 취급한다는 특징이 있다.


복소수 자료형

  • real : 실수부
  • imag : 허수부

복소수는 자주 쓰이진 않지만 알아보도록 하자.

복소수는 실수와 허수의 합으로 표현되는 수이다. + 연산자를 기준으로 앞이 실수부, 뒤를 허수부라고 부른다. 이러한 복소수의 실수부를 출력할때는 real을 쓰고 허수부는 imag를 쓰면 된다.


과제

1. sep과 end를 활용한 출력방법

다음 소스 코드를 완성하여 날짜와 시간을 출력하시오.

year = '2019'
month = '04'
day = '26'
hour = '11'
minute = '34'
second = '27'

print(year, month, day, )
print(hour, minute, second, )

# 2019/04/26 11:34:27
print(year, month, day, sep='/', end=' ')
print(hour, minute, second, sep=':')

2. 자기소개

만약 입력으로 김다정이라는 이름이 주어지면 '안녕하세요. 저는 김다정입니다.' 라고 출력하시오.

name = input()

print(f'안녕하세요. 저는 {name}입니다.')
print('안녕하세요. 저는 {}입니다.'.format(n))

3. OX문제

print(10/2)의 출력 결과는 5이다?

X, 5.0이다.

4. 오타 수정하기

혜원이는 평소 영타가 빠르고 정확한 것을 친구들에게 자랑하고 다녔습니다. 반 친구들이 혜원이의 타자 속도가 빠르다는 것을 모두 알게 되자 혜원이는 모두의 앞에서 타자 실력을 보여주게 됩니다.

그런데 막상 보여주려니 긴장이 되서 문장의 모든 e를 q로, n을 b로 잘못 친 것을 발견했습니다.
혜원이는 프로그램을 돌려 재빠르게 모든 q를 e로, b를 n으로 바꾸는 프로그램을 작성하려고 합니다.

문장이 입력되면 모든 q를 e로, b를 n으로 바꾸는 프로그램을 작성해 주세요.

# 완성하려는 문장 안에 q나 b가 들어가지 않는다고 가정합니다.

입출력

입력 : querty
출력 : euerty

입력 : hqllo my bamq is hyqwob
출력 : hello my bame is hyewob
data = input()

print(data.replace('q', 'e').replace('b', 'n')).

정리

# 1. 파이썬의 여러줄 주석은 """ or '''
# 2. print("Hello", "World", "!") -> "Hello World !"
# 3. print 함수의 sep 파라미터는 출력할 여러 값 사이에 구분자 지정
# 4. print("Hello", "Python", sep="-", end='*')
#    print("World")의 출력 결과? -> Hello-Python*World
#    기본적인 end 줄바꿈대신 *을 넣음으로써 한줄로 출력됨
# 5. 파이썬에서 None 값을 가진 변수가 마지막 라인에서 출력되는 경우, 결과는 어떻게 되나요?
#    -> 아무런 출력도 안나옴

피드백

나도 모르는 부분은 다른 수강생들도 모를 수 있기에 부담없이 질문하고 이해하는 과정을 갖자. 뭐든 할 수 있다는 마음가짐을 갖자.

profile
익숙해지기 위해 기록합니다

0개의 댓글