price = list(map(int, input().split(';')))
prices = price.sort(reverse=True)
for i in prices:
print('%9s' % format(i, ','))
어디서 잘못된 건가요??
Traceback (most recent call last): File "main.py", line 5, in <module> for i in prices: TypeError: 'NoneType' object is not iterableTypeError이면 타입이 맞지 않고, NoneType object라고 되어 있으니까 여기에 쓰면 안 되는 타입을 썼다는 뜻입니다. is not iterable이니 반복문에 쓸 수 없는 타입이라는 뜻입니다.
51900;83000;158000;367500;250000;59200;128500;1304000
>>> price
[51900, 83000, 158000, 367500, 250000, 59200, 128500, 1304000]
>>> prices = price.sort(reverse=True)
>>> prices
>>> price
[1304000, 367500, 250000, 158000, 128500, 83000, 59200, 51900]
>>>
split()처럼 무엇을 변형시키면 무조건 변수에 대입하는 줄 알았는데 sort()는 아니었군요..
이외에도 궁금한 게 있습니다. format 함수의 결과는 문자열이라고 하셨는데 '{0:03d}'.format(35)와 '{0:08.2f}'.format(150.37)에는 왜 d와 f가 들어가는지 모르겠습니다ㅠㅠ 왜 24.6 심사문제에서는 print('%9s' % format(i, ',')) d가 아닌 s가 들어간 건가요??
복습해주세요.
서식 지정자(format specifier)는 어떤 함수에서 사용하든 약어는 공통적입니다.
s는 보통 string의 s입니다. C 언어로 %s를 쓰고, 파이썬도 %s를 씁니다. 언어에 따라 문법 차이는 있을 수 있어도 약어는 대부분 비슷합니다.
문자열 string을 지정하는데 나는 z로 쓰겠어! 하고 개발하는 언어 설계자는 없을 겁니다(세상 일은 모르는 법이니까 있을 수도 있지만)
%d는 decimal integer 10진 정수의 약어로 d를 씁니다.
본문 설명을 꼼꼼하게 읽어야 할 것 같습니다.
예제 코드만 보고, 문법만 보고, 그 의미를 설명한 문장은 거의 읽지 않았거나 건너 뛰면서 읽는 것 같습니다.
인터넷 시대에 글을 정독하지 않고 건너 뛰는 방식으로 읽다보면 이가 빠진 지식을 채우게 됩니다. 그러면 %d나 %s는 쓰는데, d는 뭐의 약자야? s는 뭐의 약자고? 하면 모르는 상태가 됩니다. 분명 책에는 설명이 빠지지 않고 수록되어 있습니다.
복습을 권장합니다.
d가 10진 정수, s가 문자열을 뜻하는 건 알고 있습니다. 예전에 다른 글에서 작성하신
'변수 i는 int지만, format(i)의 결과는 문자열입니다. format은 문자열 형식입니다. format을 출력하려면 %s가 필요합니다.'라는 답글을 보고 헷갈려서 차이를 여쭤본 거였습니다.
>>> i = 10
>>> type(i)
<class 'int'>
>>> s = format(10)
>>> s
'10'
>>> type(s)
<class 'str'>
>>>
변환의 결과에 따라 서식 지정자를 선택해야 하는 문제입니다.
i = 10이면 정수이니까 type(i)로 조사하면 int 타입이라고 나옵니다.
format(10) 또는 format(i)를 한 결과는 문자열이 되니까 값을 보면 '10'처럼 '로 둘러싼 결과가 나옵니다. type(s)로 조사하면 str 타입이라고 나옵니다.
>>> i = 10
>>> s = '{0:05d}'.format(i)
>>> s
'00010'
>>> type(s)
<class 'str'>
i = 10인데 format을 쓴 결과는 문자열이 됩니다. type(s)로 조사하면 str 타입이라고 나옵니다.
print('%9s' % format(i, ','))
여기서도 마찬가지로 format(i, ',')의 결과는 문자열입니다.
>>> i = 123456789
>>> i
123456789
>>> type(i)
<class 'int'>
>>> s = format(i, ',')
>>> s
'123,456,789'
>>> type(s)
<class 'str'>
>>> print('%9s' % s)
123,456,789
>>>
i = 123456789를 넣었고, 정수입니다.
s = format(i, ',')의 결과를 보면 '123,456,789'로 문자열입니다.
printf('%9s' % s)의 결과는 문자열을 출력한 것입니다.
변환한 결과가 문자열이기 때문에 여기서는 %s를 씁니다.
print('%9s' % s)에서 s를 축약하면
print('%9s' % format(i, ','))
처럼 됩니다.
i가 정수이니까 %d가 아닌가? 왜 %s이지? 라고 생각할 수 있습니다.
다만, i가 아니라 최종적으로 전달되는 값의 타입에 따라 서식 지정자에 d를 쓸지, s를 쓸지 정합니다.
원 질문에서 f는 부동소수점, 즉 실수에 사용하는 서식 지정자입니다.
부동소수점은 영어로 floating-point라고 쓰고, 흔히 약어로 f를 씁니다.
실수를 표기할 때 소수점의 위치가 정해져 있지 않다 = 부동이다, 라는 의미로 쓰입니다. 보다 자세한 정의는 컴퓨터 구조론 교과서나 컴퓨터 공학 전공 과목으로 배우게 됩니다.
이번 답변은 도움이 되길 바랍니다.