0

どうすればこれを解決できますか?

プログラムには、関数の定義が含まれている必要がありますsumTri(cutOff)。この関数は Tri 数を合計に追加します。

Tri 数は 3 番目ごとの数です: 1, 4, 7, 10,.... この関数は1, 4, 7,、Tri 数が cutOff より小さい限り、連続する Tri 数 ... を合計に追加します。この関数は、これらの数値の合計を返します。

4

2 に答える 2

5

簡単だ:

def sumTri(cutOff):
  return sum(range(1,cutOff,3))

または、低レベルが必要な場合:

def sumTri(cutOff):
  sum = 0
  tri = 1
  while tri < cutOff:
    sum += tri
    tri += 3
  return sum

両方の解決策について少し説明しようと思います。

最初のケースでは、Pythonの2つの「高レベル」関数を使用します。これにより、すべてが機能します。sumおよびrange。このrange(a,b,c)関数は、からaまでの番号のリストを生成bcます。例えば:

In [1]: range(1,10,3)
Out[1]: [1, 4, 7]

In [2]: range(1,22,3)
Out[2]: [1, 4, 7, 10, 13, 16, 19]

rangeここで、リスト内の数値が以下になるまで数値を生成することに注意する必要がありますb。まさにあなたがあなたの仕事に必要なもの。

そしてsum明らかに、引数としてリスト内の数値の合計を計算して返します。

In [3]: sum([1])
Out[3]: 1

In [4]: sum([1,2])
Out[4]: 3

In [5]: sum([1,2,3])
Out[5]: 6

ここで、これら2つの機能を組み合わせる必要があります。

return sum(range(1,cutOff,3))

2番目の解決策は、より「低レベル」で「アルゴリズム的」です。ここでは特別なPython関数を使用せず、すべて自分で行います。

2つの変数を使用して、合計を計算します。

  • sum-合計を格納する変数
  • tri-段階的に追加する数値の現在の値を持つ変数

あなたが次のようなものを書くとき:

a = a + 5

つまり、「今は、以前のプラス5aと等しくなりたい」または「5ずつ増やしたい」ということです。あなたはそれを短く書くことができます:aa

a += 5 

これらの2つの形式は同等です。

しかし、単純に何かを追加する必要はありません。あなたは何かが起こるまで何度もそれをする必要があります。Pythonでは、次を使用して実行しますwhile

while someting-is-true:
  do-something

while条件をチェックするたびsomething-is-trueに、それがTrueの場合、下にあるwhile(インデントされた)コマンドを作成しますdo-something

これで、ソリューションを作成するために必要なすべてのことがわかりました。

def sumTri(cutOff):
  sum = 0                      # we start the sum from 0
  tri = 1                      # and the first number to add is 1
  while tri < cutOff:          # next number to add < cutOff?
    sum += tri                 # than add it to sum
    tri += 3                   # and increase the number by 3
  return sum                   # now you have the result, return it

それが仕事をする機能でした。これで、この関数を使用できます。どのようにこれを行いますか?

def sumTri(cutOff):
  ...

# anywhere in you program:
# presuming a is the cutOff
print sumTri(a)

関数を実行してその結果を使用する場合は、と書くだけfunction_name(args)です。

于 2012-06-18T04:07:25.377 に答える
4

この数列は三角数に関係しています

これはO(1)です

def sumTri(cutoff):
    n = (cutoff+1)//3
    return (3*n-1)*n//2
于 2012-06-18T04:21:04.130 に答える