2017-01-21 8 views
0

私はPythonの初心者です。私はそれを学び始めたいと思います。ここでは、C#で書いた少しのコードを書き直そうとしています。Pythonのループで、仕事はしません。

import array 

def countFactorial(tal): 
    summ = 1 

    for i in range(len(tal)): 
      summ *= i 
      i += 1 
    print("{} is".format(tal)) 
    print("{}".format(summ)) 
    return summ 

def main(): 

    lst = [] 
    for i in range(5): 
     values = input("Type in a value: ") 
     lst.append(values) 

    for s in lst: 
     countFactorial(s) 
     # print(s) 


main() 

ユーザは、例えば6のために入力したい場合、これが今のプログラムが出て入力しますものです::プログラムは、私が6で入力した場合、それは720になるので、これは、Pythonのコードで、階乗カウント"6は0"(5回)です。

これは、ここで動作しないC#から書き直そうとしたforループの一部です。明らかに「タル」はC#でパラメータとして渡されます。

for (int i = 1; i <= tal; i++) 
     { 
      summ *= i; 

     } 
     Console.WriteLine(tal + " is " + summ); 

私が必要と思うのは、例えば6回のようにサンドコードトラフをランディングする必要があるwhileループです。私はこれを試してみましたが、うまくいきません。

+0

をcountFactorial'変更 'で...'と'i + = 1 'に一度入ると、2回目の変更は失われます。 –

+0

@finitegraygreenまあ、そこに作成しようとしたのは、あなたがC#コードで知っているように(あなたがC#を知っていれば)でした。 "whileループ"のように、 "i"を "tal"と等しくなるまで増やしたい場合は – kastravec

+0

また、数字(文字列)として 'tal'の* length *を使用しているので、*桁数*をループ値として使用します。 –

答えて

1

明示的な開始値を持たない範囲は0で始まるので、10に初めて掛けます。そこからはsummの滞在0があります。

一方、C#コードは1から始まり、終了値を含みます。

すぎるか1であなたのPython range()オブジェクトを開始し、tal + 1で停止:

summ = 1 
for i in range(1, tal + 1): 
    summ *= i 

または掛けるときiに1を追加します。

summ = 1 
for i in range(tal): 
    summ *= (i + 1) 

追加したi += 1が冗長でした。 iは、次の反復で範囲内の次の値に設定され、前にバインドされていたものがすべてiに置き換えられます。

整数を渡す必要があります。 Pythonの3のinput()文字列を返しますので、あなたが最初の整数に変換する必要があります:範囲内の私のために一度 `で、二回i``

for i in range(5): 
    value = int(input("Type in a value: ")) 
    lst.append(value) 
+0

さて、私はエラーを理解していますが、範囲を "1"から始めるか、 "i"を1から始めるのはどうでしょうか?forループの下でちょうど "i = 1"ですか? – kastravec

+0

ありがとう、それは働いた!あなたはまたすべてをうまく説明しました。今私はそれを理解しています!もう一度ありがとう! – kastravec

関連する問題