-2

正の整数 n を取り、0 から 9 までの n 個の乱数からなるリストを作成するプログラムを作成したいと考えています。それが見つかったら、それらの数値の平均を返したいと考えています。私は正しい軌道に乗っていますか?

import random
def randomNumbers(n):
    n > 0
    myList = random.randrange(0,9)

私はまだ第二部に到達していないことを知っています..しかし、これは私がどのように始めるのですか?

これは私の最終的なコードです:

import random
def randomNumbers(n):
    myList = []
    for i in range(n):
        myList.append(random.randrange(0, 9))
    return sum(myList)/len(myList)

for ループと while ループ、およびそれらをいつ使用するかについて説明しているページに案内してもらえますか?

4

5 に答える 5

1

単一の説明では複雑すぎる場合は、何をしようとしているのかを分解するのに役立ちます。

  • 正の整数を取り、n
  • n長さ のリストを作成する
    • 各要素は 0 ~ 9 の数字でなければなりません
  • そのリストの平均を返します。

一度にこれに取り組みましょう:

正の整数を取り、n

def randomNumbers(n):
    if type(n)==int and n>0:

あなたが言っdef randomNumbers(n):ていると言うとき

Hey, computer, this is a function called "randomNumbers",
and it's going to be called with a single thing in parentheses
and we're going to call that `n` from now on.
Here's what that function does:

nしかし、それが 0 より大きい整数であることを保証していませんthing。したがって、そうであることを確認する必要があります。これは、isのとその値が正 (0 より大きい) でif type(n)==int and n>0:あることを確認することによって行われます。nintn

それが最初の箇条書きです。次にn、各要素が 0 ~ 9 の整数である長さのリストを作成します。これらはランダムにする必要があります[1]。

result=list()
for i in range(n):
    result.append(random.randint(0,9))

これは見た目ほど複雑ではありません。呼び出す a を作成することから始めlistますresult(または、何でも構いません)。forループはただ言っている:

Hey, computer, you're gonna do the same thing a number of times,
and that number is "until you've counted from 0 to n times".
And when you do that, "i" is going to represent where you are
in that "0 to n" range. Here's what you're gonna do all those times:

では、何回やりnますか?先ほど. append_ _ _ resultそれresult.append(random.randint(0,9))がそうです。

次に、そのリストの平均を返します。リストの平均は、リストsum内の数値をlength で割ったものです。

return sum(result)/float(len(result))

sum、または 、またはlen好きなもののようなイテラブルを取り、合計、長さ、またはその他の要求を与えることができます。これらは、学ぶための優れたツールです。そうしてください。他の場所では、できれば率直に。listset

さて、あなたが本当に注意を払っていれば、これまでのところ次のようになっていることがわかるでしょう:

import random # I added this secretly, sorry!
def randomNumbers(n):
    if type(n)==int and n>0:
        result=list()
        for i in range(n):
            result.append(random.randint(0,9))
        return sum(result)/float(len(result))

これは素晴らしいです!それが必要です。試しprint(randomNumbers(5))てみると、探しているものが正確に得られます。乱数の束の平均です。

しかし、試してみたらどうprint(randomNumbers('foo'))ですか?あなたはおそらく を得ますNoneよね?ifそれは、私たちが書いたステートメントに適合しなかったためです。正の整数ではないelseものでも愛されるように、ステートメントを作成する必要があります。

else:
    return "That's no good. Try a positive integer instead"

ばかげていますが、うまくいきます。いつの日か、例外の発生とすべてのスムーズなジャズについて学ぶでしょうが、それまでは、ただ言うだけで結構です

Hey, computer, if n wasn't up to my stratospheric expectations,
then just spit back this message. I'll understand.

だから、一日の終わりにあなたが持っている

import random

def randomNumbers(n):
    if type(n)==int and n>0:
        result=list()
        for i in range(n):
            result.append(random.randint(0,9))
        return sum(result)/float(len(result))
    else:
        return "That's no good. Try a positive integer instead"

このコードをより効率的にするためにできることがいくつかあります。興味を持たせるために、例を挙げます。

from random import randint

def randy(n:int):
    return sum({randint(0,9) for i in range(n)})/n if n>0 else "Try again."

これは、リスト内包表記、セット、関数注釈、およびその他の心配する必要のないものに入ります。率直に言って、そのコード行は適切な「Pythonic」コードには複雑すぎるかもしれませんが、それは可能です。これは素晴らしいことです。

それを続けて、落胆しないでください。Python は、あなたが何を間違えたのかを説明する努力をします。デューデリジェンスを行った場合、コミュニティは一般的にかなり良いものです。最初に自分で答えを探すことなく助けを求めて、彼ら(/私たち)を虐待しないでください.

[1]技術的には疑似乱数ですが、真の乱数を生成するのは困難です。

于 2013-09-11T01:57:54.070 に答える
0

Numpy の利用を検討する必要があります。これにより、タスクが簡単になります。

import numpy as np

def myfunc(n):
    x = np.random.randint(low=0, high=10, size=n)
    return np.mean(x)
于 2013-09-11T13:06:50.733 に答える
0

リスト内包表記を使用すると、より簡潔に実行できます。

myList = [randrange(0, 9) for x in xrange(n)]
average = sum(myList) / len(myList)
于 2013-09-11T01:23:45.600 に答える