3
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.")

私が答えると、これが起こります。

最初に空白行を入力してから、もう一度エンター キーを押します。

  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

問題になる縫い目は?

PSサイトを検索しましたが、同じ問題を抱えているすべての人がはるかに高度なスクリプトを持っていて、何も理解できなかったようです。

4

3 に答える 3

4

TypeError: 'str' object is not callable通常()、文字列で表記法を使用していることを意味し、Python はそのstrオブジェクトを関数として使用しようとします。例"hello world"()、または"hello"("world")

私はあなたがするつもりだったと思います:

ans = raw_input("This is one of those times...").lower()

別の間違い:

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

両方の条件を個別に確認する必要があります。

する必要があります:

 if ans == 'yes' or ans == 'no':
        break

または、最初に望んでいたものとよりインライン:

if ans in ('yes', 'no')
于 2013-01-03T01:16:30.980 に答える
4

最初のエラーは行にあります

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'値 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.")
于 2013-01-03T01:18:43.610 に答える
3

あなたがする必要がありますraw_input("This is one of those times when only Yes/No will do!" "\n" "So what will it be? Yes? No?").lower()

を実行するとraw_input().lower()、それはすでに呼び出しraw_input()て結果を小文字に変換しています。その時までに、プロンプト文字列を渡そうとしても手遅れです。

于 2013-01-03T01:16:09.177 に答える