조건부 문자열 형식을 구현하는 방법은 무엇입니까?


80

저는 파이썬에서 텍스트 기반 게임을 작업하고 있는데, 조건 집합에 따라 문자열을 다르게 포맷하려는 경우를 발견했습니다.

특히 방에있는 항목을 설명하는 텍스트를 표시하고 싶습니다. 문제의 항목 개체가 방 개체의 항목 목록에있는 경우에만 방 설명에 표시되기를 원합니다. 설정 방법은 조건에 따라 단순히 문자열을 연결하면 원하는대로 출력되지 않으며 각 경우에 다른 문자열을 사용하는 것이 좋습니다.

제 질문은 부울 조건의 결과를 기반으로 문자열을 형식화하는 파이썬적인 방법이 있습니까? for 루프 구조를 사용할 수 있지만 생성기 표현식과 비슷한 더 쉬운 것이 있는지 궁금합니다.

나는 이것과 비슷한 것을 문자열 형태로 찾고 있습니다.

num = [x for x in xrange(1,100) if x % 10 == 0]

내가 의미하는 바의 일반적인 예로서 :

print "At least, that's what %s told me." %("he" if gender == "male", else: "she")

이 예제가 유효한 Python이 아니라는 것을 알고 있지만 일반적으로 내가 찾고있는 것을 보여줍니다. 위와 유사한 부울 문자열 형식화에 유효한 표현식이 있는지 궁금합니다. 약간의 검색 결과 조건부 문자열 형식과 관련된 내용을 찾을 수 없었습니다. 일반적으로 형식 문자열에 대한 여러 게시물을 찾았지만 그게 제가 찾고있는 것이 아닙니다.

그런 것이 실제로 존재한다면 매우 유용 할 것입니다. 또한 제안 될 수있는 대체 방법도 열려 있습니다. 제공 할 수있는 도움에 미리 감사드립니다.


4
당신은 쉼표를 제거하고 세미콜론은 유효한 파이썬 될 경우
yurib

답변:


116

코드는 사실 입니다 당신이 두 개의 문자, 쉼표와 콜론을 제거하면 파이썬 유효합니다.

>>> gender= "male"
>>> print "At least, that's what %s told me." %("he" if gender == "male" else "she")
At least, that's what he told me.

그러나 더 현대적인 스타일은 다음을 사용합니다 .format.

>>> s = "At least, that's what {pronoun} told me.".format(pronoun="he" if gender == "male" else "she")
>>> s
"At least, that's what he told me."

형식에 대한 논쟁 dict은 원하는 복잡성으로 구축 할 수 있습니다 .


S = ". 적어도, 그 {대명사} 나에게 무엇을"형식 (대명사 = [ "그녀", "그는"] [남녀 == "남성"]).
정 현

여기에 엘리 프를 짜낼 수 있습니까? 예를 들어, 형식 (대명사 = 성별 == "남성"의 대명사 = "그녀는"ELIF 성별 == "여성"다른 "을 (를) 찾을 수 없습니다" "그는"경우)
HVS

( "/{tech}".format(tech='w 'if Portfolio =='onshore 'else's 'if Portfolio =='solar ') 추가했을 때 하나의 if else 문에서만 답이 작동합니다.) 오류
mk_sch

@HVS 가능합니다 . 인라인을 시뮬레이션하기 위해 함께 묶음 else/ if문 에elif 대한 이 답변을 참조하십시오 . 하지만 실제로는 안됩니다. 대신 함수를 정의해야합니다.
보리스

33

Python 3.6 이상에서는 다음 명령문 과 함께 형식이 지정된 문자열 리터럴 (f-strings : f"{2+2}"producs 라고 함 "4")을 사용합니다 if.

print(f"Shut the door{'s' if abs(num_doors) != 1 else ''}.")

백 슬래시사용 하여 f- 문자열의 표현식 부분에서 따옴표를 이스케이프 할 수 없으므로 큰 따옴표 "와 작은 '따옴표 를 혼합해야 합니다. (여전히 f- 문자열의 바깥 부분에 백 슬래시를 사용할 수 있습니다. 예를 들어 f'{2}\n'괜찮습니다)


훌륭하지만 's'변수가 있다면 어떨까요?
Ahmed Hussein

1
@AhmedHussein 그런 다음 변수를 전달합니다print(f"Shut the door{my_variable if num_doors > 1 else ''}.")
Boris

12

파이썬에는 다음 형식을 취하는 조건식이 있습니다.

A if condition else B

두 문자 만 생략하면 예제를 유효한 Python으로 쉽게 변환 할 수 있습니다.

print ("At least, that's what %s told me." % 
       ("he" if gender == "male" else "she"))

내가 자주 선호하는 대안은 사전을 사용하는 것입니다.

pronouns = {"female": "she", "male": "he"}
print "At least, that's what %s told me." % pronouns[gender]
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.