2012-05-11 17 views
0

文字がX、x、Oまたはoになるまで、プレイヤーに文字を入力するように要求する関数を作成しました。 しかし、関数を呼び出すたびに、何とかwhileループがFalseに評価され、決して実行を開始しません。何が問題なのでしょうか?どうもありがとうございました。while 'string in string'を評価中にループが実行されない

def getLetter(): 
    letter = "" 
    while letter not in "XxOo": 
     print("Would you like to be X or O ?") 
     letter = input() 

答えて

4

空の文字列は、すべての文字列のメンバーです。ただ、Pythonのプロンプトでそれを試してください:あなたが代わりに空の文字列で、たとえば<not chosen yet>のために、あなたは選択肢の中ではありません知っているいくつかのことにletterを初期化することができます

>>> "" in "lol" 
True 

+0

ありがとう、それは私の問題を解決しました。私はあなたの答えをウェブサイトが許可するとすぐに受け入れます:D – geekkid

+0

'input()'ではなく 'raw_input()'を探しているかもしれません。 "input([prompt]) - eval(raw_input(prompt))に相当します。" –

+0

'raw_input'はpython 3で' input'に名前が変更されました。(明らかに 'print'の後のparensに注意してください) – alexis

2

ファンクションの最初の行をletter = "David is cool"に変更して、空の文字列が別の文字列に含まれていることを慎重に考えてください。 "" in "XxOo"

+0

はい、これは完全に意味があります。 'in'を集合演算子とみなすと、空集合は他の集合の部分集合であることに気が付きます。 –

+0

@Emilは文字列で、これは集合演算子ではなく、代わりに部分文字列検索を行います。それ以外の場合、 '' foobar'の '' foo 'は機能しません。foobarの要素は1文字の文字列です。 –

+1

Karlのように、このコンテキストでは、右辺のオペランドが「{foobar}の中のすべての部分文字列の集合」、つまり{{空文字列、f、fo、foo、...、 o、oo、oob、... ar、r} ' –

関連する問題