2017-12-12 8 views
0
availableNums=["one","two","three","four","five"] 
selectedNumbers=[] 
for value in range(0,3): 
    selectedNumbers.append(raw_input("Choose a number:")) 

if selectedNumbers not in availableNums: 
     print("The number "+str(selectedNumbers)+" isn't available/nBut it will be changed to six") 

このコードを実行すると、数字を尋ねてきますが、リストに表示されている数字を入力しますが、 "[1、2、3]は利用できませんが、6に変更されます。"なぜそれをやっているのですか?pythonの条件文で "not"と "in"を使う方法

私はnotまたはinの部分を変更する必要があると思いますが、わかりません。

+0

入力を文字列からintに変換するには、 'int()'を使用します。 – Hatshepsut

+1

@Galenそれはちょうど重点のためであるように見えます。 OP:それは構文エラーのように見えるので、コードブロック内では役に立ちません。 –

+3

'selectedNumbers'はリストです。 'selectedNumbers'の各数字が' availableNums'にあるのではなく、リスト全体が 'availableNums'に入っているかどうかチェックしています。 – Galen

答えて

0

selectedNumbersです。 selectedNumbersの各番号がavailableNumsである場合ではなく、リスト全体がavailableNumsにあるかどうかを確認しています。

for selectedNumber in selectedNumbers: 
    if selectedNumber not in availableNums: 
     # selectedNumber from selectedNumbers is not in availableNums 

編集:

は、それはあなたのような何かをしたいように聞こえるhatshepsutが指摘したように、あなたのコードはselectedNumbers内の文字列ではなく整数を配置します。 raw_input の代わりにinputを使用するか、intに変換してください。

パイソン3用のPython 2の、What's the difference between raw_input() and input() in python3.x?

+0

ありがとうございました! availableNumsがタプルではない文字列だった場合はどうすればよいでしょうか? –

+0

@JohnCycler複数の数字を表す単一の文字列ですか?1つの方法は、文字列を各数値の文字列表現に分割し、それをintに変換することです。 – Galen

+0

これで、availableNumsをいくつか変更して投稿を編集しました。それを見ていただけますか –

1

inチェックメンバーシップを参照してください場合にのみabに含まれるメンバーある場合a in bが真です。

availableNumsはintのタプルであるため、リストであるselectedNumbersはメンバーではありません。 selectedNumbersサブセットavailableNumsであるかどうかを確認したいと思われるようです。

あなたは、ループ内の各項目を確認することができますいずれか

for s in selectedNumbers: 
    if s not in availableNums 
     .... 

それとも、一度にすべてをチェックし、完全に選択された数字のもしあればを失敗して大丈夫なら、あなたは、セットに変換することができます無効です:

if not set(selectedNumbers) < set(availableNums): 
    .... 

ここでは、セットに適用される<はサブセット演算子です。コメントで述べたように


また、raw_input文字列を返しますが、あなたは整数として扱いしようとしています。 int()を使用すると、入力文字列を解析できます。

+0

ありがとうございました! availableNumsがタプルではない文字列だった場合はどうすればよいでしょうか? –

+0

@JohnCyclerあなたが何を意味するか分かりません。あなたが 'availableNums =" some_string "'を持っていて、あなたが入力した文字列 'rawNumbers'が' some_string'の文字のサブセットで構成されているかどうかを確認したい場合はどうしたらいいですか? –

+0

@JohnCyclerあなたの編集に基づいて、 'availableNums'を*文字列だけでなく、*文字列のリストに変換したように見えます。この場合、 'int()'を使って 'raw_input'値を整数に変換して比較しますが、そうでなければ私の答えは変わりません。 –

関連する問題