ProgramingTip

str과 int 응집을 어떻게합니까?

bestdevel 2020. 12. 8. 19:18
반응형

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

  1. 어느 쪽이든 : print("You have " + str(things) + " things.")(구식 방식)

  2. 또는 : print("You have {} things.".format(things))(새로운 비단뱀적이고 권장되는 방법)


좀 더 구두 설명 :
위의 우수한 @Zero 피레 우스의 대답에서 다루지 않는 것도이 있지만, 나는 "작게하다"그것은 좀하려고합니다 :
당신은 파이썬에서 문자열과 (어떤 종류의) 숫자를 연결할 수 있기 때문에 이러한 개체 서로 호환되지 않는 더하기 (+) 연산자의 정의가 다릅니다 (str의 경우 +가 연결에 사용되고 숫자의 경우 두 숫자를 더하는 데 사용됨). 따라서 객체 간의이 "오해"를 해결하려면 다음을 수행하십시오.

  1. 예전 방식은 str(anything)메서드 를 사용하여 숫자를 문자열로 캐스팅 한 다음 결과를 다른 문자열과 연결하는 것입니다.
  2. 좀 더 비단뱀적이고 권장되는 방법은 매우 다재다능한 형식 방법 을 사용하는 것 입니다 (내 말을 듣지 않아도 문서 와이 기사를 읽을 필요가 없습니다 ).

즐기고 않는 @Zero 피레 우스 당신의 시간은 확실히 가치가 답변을 읽어!


Python 2.x

  1. 'You have %d things.' % things[ 1 ]
  2. 'You have {} things.'.format(things)[ 2 ]

Python 3.6 이상

  1. 'You have %d things.' % things[ 1 ]
  2. 'You have {} things.'.format(things)[ 2 ]
  3. f'You have {things} things.'[ 3 ]

참고

  1. printf 스타일 문자열 서식
  2. 내장 유형-> str.format
  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

반응형