python - TypeError : 'str'개체를 호출 할 수 없습니다.

기사 출처 python string while-loop

name = raw_input("Welcome soldier. What is your name? ")
print('Ok,', name, ' we need your help.')
print("Do you want to help us? (Yes/No) ")
ans = raw_input().lower()

while True:
    ans = raw_input().lower()("This is one of those times when only Yes/No will do!" "\n"  "So what will it be? Yes? No?")

    ans = raw_input().lower()
    if ans() == 'yes' or 'no':
        break
    if ans == "yes":
        print ("Good!")
    elif ans == "no":
        print("I guess I was wrong about you..." '\n' "Game over.")


내가 대답하면 이런 일이 발생합니다.

먼저 빈 줄을 입력 한 다음 다시 Enter 키를 누르면;

  File "test.py", line 11, in <module>
    ans = raw_input().lower()("This is one of these times when only Yes/No will
do!" "\n" "So what will it be? Yes? No?")
TypeError: 'str' object is not callable


문제가되는 솔기가 무엇입니까?

추신 나는 사이트를 검색했지만 같은 문제를 가진 모든 사람들이 훨씬 더 고급 스크립트를 가지고 있었고 아무것도 이해하지 못했습니다.
첫 번째 오류는 줄에 있습니다.

ans = raw_input().lower()("This is one of those times when only Yes/No will do!"
                          "\n"  "So what will it be? Yes? No?")


lower()의 결과는 문자열이고 그 뒤의 괄호는 왼쪽에있는 객체 (문자열)가 호출됨을 의미합니다. 따라서 오류가 발생합니다. 원하는

ans = raw_input("This is one of those times when only Yes/No will do!\n"
                "So what will it be? Yes? No?").lower()


또한,

if ans() == 'yes' or 'no':


당신이 기대하는 것과 다릅니다. 다시 말하지만 ans는 문자열이고 괄호는 왼쪽에있는 개체 (문자열)가 호출됨을 의미합니다. 따라서 오류가 발생합니다.

또한 or는 논리 연산자입니다. ans 뒤의 괄호를 제거한 후에도 코드는 다음과 같이 평가됩니다.

if (ans == 'yes') or ('no'):


비어 있지 않은 문자열 ('no')은 boolean 값 True로 평가되므로이 식은 항상 True입니다. 당신은 단순히 원합니다

if ans in ('yes', 'no'):


또한 마지막 줄을 들여 쓰지 않으려 고합니다. 대체로 다음을 시도하십시오.

name = raw_input("Welcome soldier. What is your name? ")
print('Ok, ' + name + ' we need your help.')
ans = raw_input("Do you want to help us? (Yes/No)").lower()
while True:
    if ans in ('yes', 'no'):
        break
    print("This is one of those times when only Yes/No will do!\n")
    ans = raw_input("So what will it be? Yes? No?").lower()

if ans == "yes":
    print("Good!")
elif ans == "no":
    print("I guess I was wrong about you..." '\n' "Game over.")

이 질문에 대해 Stack Overflow에서 비슷한 토론을 찾았습니다: https://stackoverflow.com/questions/14131780/

관련 기사
python - 문자열을 인용 된 요소가있는 공백으로 구분 된 목록으로 변환
python - 데비안에서 파이썬 스크립트 데몬 화
python - 사전 인 self 형식 지정
python - 서로 상대적인 Python 필터 목록 항목
python - 비 루트 사용자로서의 감독자 [닫힘]
python - REST API의 일반 (HTML이 아닌) 오류 페이지
python - 지정된 바이트 오프셋에서 파일에서 행 가져 오기
python - 파이썬의 백 슬래시 이스케이프 문자 이해
python - Simplegui 가져 오기 문제
python - 한 번에 여러 파일 쓰기