2017-11-26 9 views
0

私はこのプログラムを作ろうとしており、今はとても近いですが、私は仕上げのタッチをすることはできません。私は問題がモジュロの使用法にあるので、私の問題をたどった。私は5倍のeを得ようとしていますが、私がそれをするとき、私のリストの3番目の要素については-2が得られます。これは私が期待するものではありません。Pythonでx foldがあるかどうかを確認するには?

おそらく、私がモジュロで負の数を除算しようとしているからかもしれませんが、方法がわからないので問題を解決できません。誰かがこれで私を助けてくれますか?

[1, -3, -7, -11, -15, -3, -7, -11, -15, -3] 

をしかし、私は

[1, -3, -2, -1, 0, 1.0, 2, 3, 4, 5, 2.0] 

ヘルプをいただければ幸い取得:

def f10(start, n): 
    """ 
    The parameters start and n are both int's. Furthermore n > 0. 
    The function f10() should return a list of int's that contains n 
    elements. 
    The first element (e) in the resulting list has to be start. 
    The successor of an element e is calculated as follows: 
    - if e is a fivefold (e.g. n is divisible by 5), 
     then the next value of e is e/5 
    - if e is not a fivefold, then the next value of e is e - 4 

    Example: 
     f10(1, 10) should return 
     [1, -3, -7, -11, -15, -3, -7, -11, -15, -3] 
     f10(9, 12) should return 
     [9, 5, 1, -3, -7, -11, -15, -3, -7, -11, -15, -3] 
    """ 

    pass 

    new_list = [] 
    k = range(start, n+1) 
    e = k[0] 

    new_list.append(e) 

    for e in k: 
     if e % 5 == 0: 
      e = float(e)/5 
     else: 
      e -= 4 

     new_list.append(e) 

    return new_list 

print f10(1, 10) 
print f10(9, 12) 

だから、私は取得する必要があります。

+0

'E =フロート(e)を使用することができない場合。なぜ「e // = 5」でないのですか?浮動小数点を正しくしたくありません(注:結果は変わりませんが、まだ変わりません) –

+1

'for e in k'?それはあなたが「e」を設定することになっている方法ではありません。 – user2357112

+1

ループでは、 'k'から' e'に値を割り当てますが、前の 'e'を計算に使う必要があります。 – furas

答えて

1

はこれを試してみてください。

def f10(start, n): 

    result = [start] # I put first element 

    for _ in range(n-1): # I have to put other n-1 elements yet 
     if start % 5 == 0: 
      start //= 5 
     else: 
      start -= 4 

     result.append(start) 

    return result 

# --- compare result with expected list --- 

print(f10(1, 10) == [1, -3, -7, -11, -15, -3, -7, -11, -15, -3]) 
# True 

print(f10(9, 12) == [9, 5, 1, -3, -7, -11, -15, -3, -7, -11, -15, -3]) 
# True 

EDIT:あなたはrange()が、あなたは私がそれをしないだろう5`/while len(result) < n:

def f10(start, n): 

    result = [start] 

    while len(result) < n: 
     if start % 5 == 0: 
      start //= 5 
     else: 
      start -= 4 

     result.append(start) 

    return result 
+0

気にしないでください。とった!ありがとう、私はシンプルなスタイルが好きです。 – Siyah

+0

結果に 'n '要素が必要で、' result = [start] 'に' for'ループの前に置くと – furas

+0

は範囲を使用しない可能性がありますか?私はあなたのために範囲を使用せずに1つを提供できますか? – Siyah

1

ここにはいくつかの問題があります。最も重要なのは、変数eを使用してループ全体を繰り返し、計算結果を保存することです。あなたは新しいものを計算する前の値を使用する必要が

def f10(start, n): 
    x = start 
    new_list = [] 
    for i in range(n): 
     new_list.append(x) 
     x = x-4 if x%5 else x//5 
    return new_list 
関連する問題