-2
def sum_from_to(start, end):
    """Return the sum of the integers from start up to but not including end.

    sum_from_to(int, int) -> int
    """

    while 

例:

  • sum_from_to(3, 7) は 18 (つまり、3+4+5+6) に評価される必要があります。
  • sum_from_to(3, 3) は 0 に評価される必要があります。

これにどのようにアプローチしますか?

4

3 に答える 3

2

楽しみのために、オイラーの総和公式を使用して、これを純粋に数学的に解くことができます。

def sum_from_to(start,stop):
    return ((stop-1)*stop-(start-1)*start)/2

sum_from_to(3,7) #18

これには、非常に計算コストがかからないという利点があります。ループも、範囲も、配列もありません。他の機能は比較すると高価です。

于 2013-03-19T04:42:55.223 に答える
1

まず、これが宿題の問題ではない場合、答えは簡単です。

def sum_from_to(start, end):
    return sum(range(start, end))

Python 2.xでは、xrangeの代わりにを使用しrangeます。それでおしまい。

これが宿題のプログラムであり、ループを使用しsumたりrange、ループしたりすることさえ許可されていない場合for(その時点で、なぜPythonを教えているふりをしているのか疑問に思う必要がありますが、何でも…)、ここにスケルトンがあります。

def sum_from_to(start, end):
    total = 0
    value = start
    while ???:
        total = ???
        value = ???
    return total

「???」を入力する必要があります 部品。value到達するまで、一度に1つずつカウントアップし続けるにはどうすればよいですendか?totalランニングサムを維持するためにあなたは何をしますか?それが本当にすべてです。

さらなるヒントとして:

変数の古い値を使用して、新しい値を作成できます。例えば:

i = 1
i = i * 2 # now it's 2
i = i * 2 # now it's 4
于 2013-03-19T04:37:33.407 に答える
1

もっと簡単な解決策があります。

sum(range(3, 7))

これには終了値は含まれません。そのため、必要なものを正確に取得できます。

于 2013-03-19T04:36:43.697 に答える