str과 int 응집을 어떻게합니까?
다음을 시도하면 :
things = 5
print("You have " + things + " things.")
Python 3.x에서 다음 오류가 발생합니다.
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: must be str, not int
... 그리고 Python 2.x에서 오류가 발생했습니다.
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects
이 문제를 어떻게 해결합니까?
여기서 문제는 +
연산자가 용어에서 (적어도) 두 가지 다른 의미를 가지고있는 것입니다. 숫자 유형의 경우 "숫튼하게 더한다"는 의미입니다.
>>> 1 + 2
3
>>> 3.4 + 5.6
9.0
... 시퀀스 유형의 경우 "시퀀스 연결"을 의미합니다.
>>> [1, 2, 3] + [4, 5, 6]
[1, 2, 3, 4, 5, 6]
>>> 'abc' + 'def'
'abcdef'
원칙적으로, 파이썬은 암시 한 유형에서 다른 유형으로 오브젝트를 CHAPTER 2하지 않는 한 그 혼란 것이기 때문에, 작업 "메이크업 감각"을 만들기 위해 : 예를 들어, 당신이 생각하는을 구석으로 '3' + 5
을 의미한다 '35'
, 그러나 다른 사람이해야 생각 의미 8
또는 '8'
.
많은 수 없습니다.
>>> [7, 8, 9] + 'ghi'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only concatenate list (not "str") to list
이 때문에 원하는 것이 연결이든 추가이든 명시 적으로 변환을 수행해야합니다.
>>> 'Total: ' + str(123)
'Total: 123'
>>> int('456') + 789
1245
그러나 더 나은 방법이 있습니다. 사용하는 파이썬 버전에 따라 세 가지 다른 종류의 문자열 형식을 사용할 수 있으며 2 , 여러 +
작업 을 피할 수있을뿐만 아니라
>>> things = 5
>>> 'You have %d things.' % things # % interpolation
'You have 5 things.'
>>> 'You have {} things.'.format(things) # str.format()
'You have 5 things.'
>>> f'You have {things} things.' # f-string (since Python 3.6)
'You have 5 things.'
... 값이 표시되는 방식을 제어 할 수도 있습니다.
>>> value = 5
>>> sq_root = value ** 0.5
>>> sq_root
2.23606797749979
>>> 'The square root of %d is %.2f (roughly).' % (value, sq_root)
'The square root of 5 is 2.24 (roughly).'
>>> 'The square root of {v} is {sr:.2f} (roughly).'.format(v=value, sr=sq_root)
'The square root of 5 is 2.24 (roughly).'
>>> f'The square root of {value} is {sq_root:.2f} (roughly).'
'The square root of 5 is 2.24 (roughly).'
사용 여부 % 보간 , 또는 F- 문자열은 당신에게 달려 % 보간 가장 긴 주위에있다 (그리고 C에 대한 배경을 가진 사람들에게 익숙한), 종종 더 강력하고, F- 문자열은 여전히 강력하다 (그러나 Python 3.6 이상 에서만 사용할 수 있습니다.)str.format()
str.format()
또 다른 대안은 print
여러 위치 인수 를 제공하는 경우 sep
키워드 인수 (기본값 :)를 사용하여 문자열 표현을 함께 결합 한다는 사실을 사용하는 것입니다 ' '
.
>>> things = 5
>>> print('you have', things, 'things.')
you have 5 things.
>>> print('you have', things, 'things.', sep=' ... ')
you have ... 5 ... things.
...하지만 일반적으로 Python의 내장 문자열 형식화 기능을 사용하는 것만 큼 유연하지 않습니다.
1 비록 대부분의 사람들이 '올바른'일에 동의하는 숫자 유형에 대한 예외를 만들지 만 :
>>> 1 + 2.3
3.3
>>> 4.5 + (5.6+7j)
(10.1+7j)
2 실제로 4 개 ...하지만 템플릿 문자열 은 거의 사용되지 않고 다소 어색합니다.
TL; DR
어느 쪽이든 :
print("You have " + str(things) + " things.")
(구식 방식)또는 :
print("You have {} things.".format(things))
(새로운 비단뱀적이고 권장되는 방법)
좀 더 구두 설명 :
위의 우수한 @Zero 피레 우스의 대답에서 다루지 않는 것도이 있지만, 나는 "작게하다"그것은 좀하려고합니다 :
당신은 파이썬에서 문자열과 (어떤 종류의) 숫자를 연결할 수 있기 때문에 이러한 개체 서로 호환되지 않는 더하기 (+) 연산자의 정의가 다릅니다 (str의 경우 +가 연결에 사용되고 숫자의 경우 두 숫자를 더하는 데 사용됨). 따라서 객체 간의이 "오해"를 해결하려면 다음을 수행하십시오.
- 예전 방식은
str(anything)
메서드 를 사용하여 숫자를 문자열로 캐스팅 한 다음 결과를 다른 문자열과 연결하는 것입니다. - 좀 더 비단뱀적이고 권장되는 방법은 매우 다재다능한 형식 방법 을 사용하는 것 입니다 (내 말을 듣지 않아도 문서 와이 기사를 읽을 필요가 없습니다 ).
즐기고 않는 @Zero 피레 우스 당신의 시간은 확실히 가치가 답변을 읽어!
Python 2.x
Python 3.6 이상
'You have %d things.' % things
[ 1 ]'You have {} things.'.format(things)
[ 2 ]f'You have {things} things.'
[ 3 ]
참고
str.format ()
또 다른 대안은 str.format()
메서드를 사용하여 int를 String으로 연결하는 것입니다.
귀하의 경우 :
바꾸다
print("You have " + things + " things.")
와
print("You have {} things".format(things))
보너스 : 다중 연결
당신이 가지고 있다면
first = 'rohit'
last = 'singh'
age = '5'
print("My Username is {}{}{}".format(first,age,last))
참고 URL : https://stackoverflow.com/questions/25675943/how-can-i-concatenate-str-and-int-objects
'ProgramingTip' 카테고리의 다른 글
Ansible을 사용하여 원격 명령의 출력 표시 (0) | 2020.12.08 |
---|---|
Interface Builder에서 Yosemite 스타일의 통합 도구 모음을 어떻게 만들 수 있습니까? (0) | 2020.12.08 |
heroku에서 .sql 펼쳐지는 실행하는 방법은 무엇입니까? (0) | 2020.12.07 |
오류 : javax.servlet 패키지가 없습니다. (0) | 2020.12.07 |
VS Code- 선택한 작업 디렉터리 아래에 새 파일 추가 (0) | 2020.12.07 |