1

このコードは、数値が素数かどうかをチェックするプログラムの一部になります。特にエレガントではないことはわかっていますが、単に経験のために動作させたいと思っています。if/elif のロジックが間違っているため、関数が失敗していると思います。このコードを実行すると、else 句に直行するように見えます。これは構文の問題ですか、それとも if 句で論理チェックを行うことは許可されていませんか?

list = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]

def find_prime(list, n):
    if n in list == False:
        list.append(n)
        print "I'ts in there now."
    elif n in list == True:
        print "It's in there already."
    else:
        print "Error"

find_prime(list, 3)
find_prime(list, 51)
4

4 に答える 4

5
  1. list変数の名前が正しくありません。組み込みをマスクしlistます。

  2. if n in list == True:待っていることをしません:1 in [0, 1] == Truereturns False(@Duncanが指摘しているように、の1 in [0,1] == True省略形であるため1 in [0,1] and [0,1] == True)。使用if n in li:してif n not in li:

  3. Error要素がリストにあるか、リストにないため、の理由はありません。それ以外はプログラミングエラーです。

したがって、コードは次のようになります。

li = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]

def find_prime(li, n):
    if n in li:
        print "It's in there already."
    else:
        li.append(n)
        print "It's in there now."
于 2012-07-24T11:10:48.000 に答える
2

リストを呼び出さないでくださいlistmylistそれか何か他のものと呼んでください 。

とを使用if not n in mylistif n in mylistます。

于 2012-07-24T11:12:34.693 に答える
2

値がリストに含まれるかどうかに関係なく、if/elseロジックで3つのオプションをチェックする必要はないと思います。

list = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]

def find_prime(list, n):
   if n in list:
      print "It's in there already."
   else:
      list.append(n)
      print "It's in there now."

find_prime(list,3)
find_prime(list,53)
于 2012-07-24T11:14:18.877 に答える
2

True / Falseをテストする代わりに、このコードを試してください。変数名としての使用に関する上記の私のコメントも参照してくださいlist(その識別子はPythonで使用されるため、お勧めできません)。

mylist = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]

def find_prime(mylist, n):
    if not n in mylist:
        mylist.append(n)
        print "I'ts in there now."
    else: # n in mylist:  has to be the case
        print "It's in there already."

元の最後の数字は必要ありませんelse。選択は2進数で、番号がリストに含まれるか、含まれないかのどちらかです。

于 2012-07-24T11:12:03.660 に答える