print()input()으로 값을 내보내고 받아들이는 방법, 그리고 그 값을 숫자로 다룰 때 파이썬이 자바나 C와 어긋나는 지점.

타입과 수 연산

변수형을 먼저 지정하지 않아도 된다. 변수에 값을 넣으면 그때 변수형이 지정된다. 불리언 타입은 대문자를 써서 True, False로 쓰고, 데이터 타입은 type()으로 확인한다. 파이썬의 데이터 타입은 정수 int, 부동소수점 float, 문자열 str, 불리언 bool이다.

age = 27
name = "신재윤"
glass = False
 
print(type(age))     # <class 'int'>
print(type(name))    # <class 'str'>

C언어처럼 문장 끝에 ;를 찍을 필요가 없고, 문자열은 ""''든 상관없다. 숫자 연산에서는 /가 나누기, //가 몫, %가 나머지이고 *가 곱하기, **가 제곱이다.

15 / 7     # 2.142857142857143
15 // 7    # 2
15 % 7     # 1
2 * 4      # 8
2 ** 4     # 16

소수점 자릿수 표시

소수점 아래 몇 번째 자리까지 표시할 때는 방법이 여러 가지다. round(값, 자릿수)로 반올림하거나, % 포맷 코드를 쓰거나, format()을 쓴다.

round(3.1415, 1)                # 3.1
print("%.1f" % 3.1415)          # 3.1
print(format(3.1415, ".1f"))    # 3.1
print("{:.1f}".format(3.1415))  # 3.1

input과 print 옵션

입력은 input() 함수로 받는다. 출력할 때는 옵션을 붙일 수 있는데, sep은 값 사이를 갈라놓을 구분자이고 end는 출력 뒤에 붙일 문자다.

print('S', 'E', 'P', sep='@')     # S@E@P
 
a, b = input().split(':')
print(a, b, sep=':')              # 입력 3:16 이면 출력도 3:16

end의 기본값이 개행이라, 여기에 무언가를 넣으면 줄바꿈 대신 그 문자열이 앞뒤 출력문 사이에 들어간다.

print("I like", end=" ")
print("money")                    # I like money
 
print("I like", end=" gold and ")
print("money")                    # I like gold and money

참과 거짓으로 판단되는 값

참과 거짓을 다루는 불 자료형에서 파이썬이 특이한 것은 참과 거짓이 아닌 값도 참과 거짓으로 판단한다는 대목이다. 문자열, 리스트, 튜플, 딕셔너리, 집합은 값이 비어 있으면 거짓이고 있으면 참이다. 0은 거짓, 1은 참이며 None도 거짓이다. NoneNoneType 클래스의 유일한 객체로 값 자체가 없거나 존재하지 않는 경우를 뜻한다.

print(bool(None))      # False
print(bool('None'))    # True, 이건 문자열 None이라 비어 있지 않다

이 성질이 조건문과 반복문을 짧게 만든다. 비어 있는지를 따로 묻지 않고 자료 자체를 조건에 넣으면 된다. 헷갈리면 bool()로 확인하면 그만이다.

a = [1, 2, 3, 4]
while a:            # len(a) > 0 을 쓸 필요가 없다
    print(a.pop())
 
if []:              # 거짓
if [1, 2, 3, 4]:    # 참

나눗셈이 실수를 주는 것

/가 항상 실수를 준다는 것이 자바와 다르다. 자바의 15 / 7은 2인데 파이썬은 2.142857142857143이다. 정수 몫이 필요하면 //를 써야 한다. 옮겨 적을 때 조용히 틀리는 지점이다.

뱅커스 라운딩

round()도 우리가 배운 반올림이 아니다. 반올림하려는 수가 올림했을 때와 내림했을 때 차이가 동일하면 짝수 값으로 반올림한다. round(0.5)는 1이 나와야 할 것 같지만 실제로는 0이다. 0.5는 0에도 1에도 0.5만큼 차이가 나기 때문에 짝수인 0에 맞춰진다. 뱅커스 라운딩이라 부르는 방식이다. 그리고 40.000처럼 자릿수를 맞춰 표현하고 싶은 경우에는 round를 쓰면 안 된다. 알아서 잘라먹고 40.0으로 표현할 것이다. 값을 바꾸는 것이 round이고 보여주는 방식을 바꾸는 것이 포매팅이다.

input이 돌려주는 문자열

숫자 1을 입력해도 input()의 타입은 문자열이라 정수로 인식하지 않는다. 정수형 타입을 원하면 형변환을 해줘야 한다. +가 에러를 내지 않고 조용히 이어 붙이기 때문에 더 위험하다.

data1 = input()      # 1
data2 = input()      # 2
 
print(data1 + data2)              # 12, 문자열이 붙은 형태
print(data1 * data2)              # TypeError
print(int(data1) + int(data2))    # 3

관련

출처