2017-10-24 14 views
-3

私の考えは、1,3n + 1プロセス(Collatz conjecture)を任意の範囲で1,3,7,9という数字で終了し、各アクションの長さをリストに送るようにコードに指示することです私はそのリストの機能を別々に実行できます。数学関数から自動的にリストを生成しますか?

私が今までに持っているものは、1,3,7,9の単位数字をif n % 10 == 1と指定することです。 if n % 10 == 3 ...などです。私の計画では、いくつかのネストされたforループが必要です。私がリストを追加しているところにはtemp = []leng = []があり、それぞれの入力の前に自動的にtemp.clear()のコードが見つかるはずです。lengです。私はこれを行うさまざまな方法があると仮定しており、私は任意のアイデアに公開されています。

leng = [] 
temp = [] 
def col(n): 
    while n != 1: 
     print(n) 
     temp.append(n) 
     if n % 2 == 0: 
      n = n // 2 
     else: 
      n = n * 3 + 1 
    temp.append(n) 
    print(n) 
+0

正確にあなたの質問は何ですか? – martineau

答えて

0

具体的にあなたが何を求めているのか、知りたがっているかは不明です。これは単なる推測です。シーケンスの長さを知りたいだけなので、実際にシーケンス番号を保存する必要はありません。つまり、作成されるリストは1つだけです。

def collatz(n): 
    """ Return length of Collatz sequence beginning with positive integer "n". 
    """ 
    count = 0 
    while n != 1: 
     n = n // 2 if n % 2 == 0 else n*3 + 1 
     count += 1 
    return count 

def process_range(start, stop): 
    """ Return list of results of calling the collatz function to the all the 
     numbers in the closed interval [start...stop] that end with a digit 
     in the set {1, 3, 7, or 9}. 
    """ 
    return [collatz(n) for n in range(start, stop+1) if n % 10 in {1, 3, 7, 9}] 

print(process_range(1, 42)) 

出力:

[0, 7, 16, 19, 14, 9, 12, 20, 7, 15, 111, 18, 106, 26, 21, 34, 109] 
+0

これはまさに私が探していたものですが、この種のコードがどのようなものかは分かりませんでした。どこでも見つけられませんでした。 –

関連する問題