3

私はlist数(integers)を持っています(たとえば、1から10まで)。

それらは必ずしも連続しているわけではありませんが、昇順です。

利用可能な番号の選択肢を入力するようにユーザーに何度も促しました。その番号が入力されると、そこにある可能性のある要素とともにリストから削除されます。

ユーザーが素数を選択できないようにしました。ただし、ある時点で、素数以外の数が存在する可能性があり、要素は残っていません。

私はPythonに比較的慣れていないため、実装に問題があります。

  • 選択した数に要素が残っていないかどうかを確認します(素数でなくても)。

  • 素数だけが残っているのか、因子のない数なのかをチェックします。

ステートメントを使用することを考えforていますが、それらをどのように実装するか正確にはわかりません。誰かがアドバイスやコードを提供できますか?前もって感謝します...

4

3 に答える 3

5

残りの数の要因があるかどうかを確認するには、guess次を使用できますany()

hasfactors = any(guess % n == 0 for n in numbers)

残りのすべての数が素数であるかどうかを確認するには、all()を使用できます。(ユーザーが素数を入力するのをすでに防いだと言っているので、私はあなたが何らかのisprime()機能を持っていると思います):

onlyprimes = all(isprime(n) for n in numbers)
于 2010-03-14T17:37:37.207 に答える
3

最初の問題では、リスト内包表記を使用して、各要素が選択された数ではなく、選択された数の因数でもない新しいリストを作成できます(コードを参照)。これを元のリストと比較してください。

$ python
>>> selected_number = 6
>>> [x for x in range(1,11) if selected_number % x]
[4, 5, 7, 8, 9, 10]

2番目の問題については、各要素が素数であるかどうかを確認します。そうでない場合は、要因のない数値を確認してください。要素ごとにmod、元のリストを上書きして、それがゼロのリストであるかどうかを確認できます。しかし、もっと速い方法があると確信しています。

于 2010-03-14T17:18:03.900 に答える
1

Lがゼロ以外の数のリストである場合、数Nの因数である数のリストは次のとおりです。

factors = [x for x in L if N % x == 0]

もちろん、NがLに因子を持たない場合、リストは単に空になります。

「素数」(?)を意味しない限り、「因子のない数」が何を意味するのかわかりません-Pythonで素数性をチェックすることについて、いくつかのSOの質問と回答がありますgmpy.is_prime(私の拡張子gmpyから)しかし、もちろん私は偏見があります;-)。

「Lに因数がないすべての数」というのは、まあ、無限にたくさんあるので、全部リストアップするのはちょっと難しいです。それらのための無制限のジェネレータ:

import itertools

def nofactorsinlist(L):
  for i in itertools.count():
    if any(x for x in L if i % x == 0):
      continue
    yield i

いくつかの最適化は可能ですが、これは本当に単純であり、あなたが何を求めているのかを正確に理解せずに複雑な最適化を追加するのは嫌です!-)

于 2010-03-14T17:31:15.487 に答える