본문 바로가기
지식공학/Python

Python 독학 기본편 #7 문장 나누기/문자 정렬하기

by Eric87 2020. 10. 18.
반응형

이번에는 문장을 나누거나 문장을 정렬하는 방법에 대해 배워보겠습니다. 앞서 python 독학 기본편 #3 문장 편을 보지 않았다면 먼저 학습을 하고 와주시기 바랍니다. (https://ericlab.tistory.com/19)

우리는 앞서 input명령어를 사용해서 문장을 입력 받을 수 있었습니다.

answer = input("아무 값이나 입력하세요:")
print("입력하신 값은"+answer+"입니다")
print(type(answer))

위 코드를 입력하고 실행을 하면 출력 창에 아무 값을 입력 할 수 있습니다. 만약 3이라는 숫자를 입력하면 "입력하신 값은 3입니다"가 출력이 됩니다. 그리고 입력받은 3은 str로 나타내는 것을 알 수 있습니다. 다시 위 코드를 실행해서 이번엔 eric이라고 입력을 하면 "입력한신 값은 eric입니다"가 출력이 되고 역시 str로 나타냅니다. 이것으로 알 수 있는 것은 입력한 모든 값은 문자나 숫자에 상관없이 python은 문자(str)로 인식한다는 것입니다. 숫자를 입력하면 type변화를 해야 정수(int)로 인식한다는 거겠죠?

우리는 앞서 문장을 연결할 때는 콤마(,)를 이용하거나 +기호를 이용해서 연결할 수 있었습니다. 여기서 문장을 나누는 방법을 원하는 방법으로 직접 설정을 할 수 있습니다. sep를 이용하면 됩니다. sep를 활용하면 띄어쓰기나 콤마(,), 세미콜론(:), 기타 다른 문자 등을 통해 문장을 구분할 수 있습니다. 또 end를 이용하면 여러 print로 인해 줄 바꿈이 자동으로 되는 것을 연결시킬 수 있습니다.

print("siri","bixby")
print("siri"+"bixby")
print("siri","bixby",sep=",")
print("siri","bixby","kakao", sep=" VS ")
print("siri","bixby",sep=",", end="?!")
print("누가 더 똑똑할까?")

위 코드를 입력하면 sep와 end의 명령어를 알 수 있습니다. 마지막에 siri와 bixby를 콤마(,)로 연결하고 다음 "누가 더 똑똑할까?를 다음 줄에 출력하지 않고 ?!으로 두 print가 연결되는 것을 확인할 수 있습니다.

sep와 end로 문장을 구분 짖는 것을 알아보았고 다음은 문자를 정렬하는 방법에 대해 알아보겠습니다. 복습 겸 for문을 이용해서 과목별 점수를 print 해보겠습니다.

scores={"수학":100, "영어":97, "물리":100}
for subject, score in scores.items():
     print(subject, score)

수학과 영어, 물리가 각 줄에 출력되는 것을 확인할 수 있습니다. 과목은 두 글자이므로 정렬을 하지 않아도 되지만 점수는 자릿수가 달라 보기가 안 좋습니다. 보통 숫자는 오른쪽 정렬을 통해 표시를 합니다. 문자 정렬을 위한 명령어는 ljust(왼쪽 정렬), rjust(오른쪽 정렬)이 있습니다.

scores={"수학":100, "영어":97, "물리":100}
for subject, score in scores.items():
     #print(subject, score)
     print(subject.ljust(5), str(score).rjust(4), sep=":")

위 예제에서 ljust(5)는 5자리의 공간을 만들어 문자를 넣고 나머지는 빈 공간으로 채워지며 왼쪽 정렬을 하라는 것이고 rjust(4)는 4자리 공간을 만들어 문자를 넣고 나머지는 빈공간으로 채워 오른쪽 정렬을 하는 것입니다.

다른 예제를 통해 추가해서 정리를 할 수 있습니다. 만약 대기순서표를 출력한다고 하면 아래와 같이 반복문(for)과 범위(range)를 활용해서 표시할 수 있습니다.

for num in range(1,11):
print("대기번호: "+str(num))

1부터 10까지 대기번호를 부여하고 print를 이용해서 각 줄에 대기번호가 표시가 됩니다. 하지만 숫자가 한 자리 수와 두 자릿수가 있기 때문에 보기가 이쁘지 않습니다. 0을 채워 세 자리 수로 동일하게 표시해보겠습니다.

for num in range(1,11):
print("대기번호: "+str(num).zfill(3))

zfill을 입력하여 0을 채워 넣을 수 있고 뒤에 숫자는 자리 공간의 수를 말합니다. 3자리 공간에 숫자를 넣고 남은 공간에 0을 채워 넣는 것이죠.

ljust와 rjust 말고 더 쉬운 방법도 있습니다. ljust대신 <를 사용하고 rjust대신 >를 사용하면 됩니다.

print("{0: >10}".format(500))

위 코드는 총 10자리 공간을 확보하고 숫자를 넣은 뒤 나머지 공간은 빈칸으로 두고 오른쪽 정렬을 하라는 것입니다. 추가해서 +명령을 사용해서 양의 정수인지 음의 정수인지 부호를 추가할 수 있습니다.

print("{0: >+10}".format(500))
print("{0: >+10}".format(-500))

빈칸이 아니라 다른 문자를 넣을 수 있습니다. under bar(_)또는 지수 표현(^)으로 채워 넣고 오른쪽 정렬을 해보겠습니다.

print("{0:_<+10}".format(500))
print("{0:_<10}".format(500))
print("{0:^<+30,}".format(1234567890))

마지막 코드는 큰 수로 나타냈는데 이처럼 큰 수는 일십백천만.... 숫자를 읽기 힘듭니다. 따라서 3자리마다 콤마를 입력해서 수의 단위를 알아보기 쉽게 하는 것이 좋습니다.

print("{0:,}".format(1234567890))
print("{0:+,}".format(1234567890))
print("{0:+,}".format(-1234567890))

다음과 같이 입력하면 3자리마다 콤마가 찍히기 때문에 수의 크기를 파악하기 쉽습니다.

마지막으로 소수점을 출력해 보겠습니다. 소수점은 f를 이용해서 출력이 가능한데 보통 소수점 뒤 6자리까지 표시가 됩니다. 이는 f가 8자리 숫자 크기를 갖기 때문입니다. f앞에 숫자를 넣어주면 소수점 뒤 넣은 숫자만큼 표시를 하고 나머지는 반올림해서 소수가 나타납니다.

print("{0:f}".format(1/3))
print("{0:.2f}".format(1/3))
print("{0:.2f}".format(5/3))

위와 같이 입력하고 실행을 하면 0.333333과 소수점 뒤 2번째에서 반올림한 0.33과 5/3은 1.666666에서 소수점 뒤 2번째에서 반올림을 한 1.67이 출력됩니다. 이처럼 문장을 구분하고 문자를 정렬하는 명령어를 이용하면 여러 데이터를 깔끔하게 정리하여 관리하기 편하게 만들 수 있습니다.

 

 

반응형

댓글