0

私はすでにこれだけ持っていますが、不特定の数字を読み取る方法がわかりません。

NUMBER_OF_SCORES = (1-100):
numbers = [] 

sum = 0

for i in range(NUMBER_OF_SCORES): 
    value = eval(input("Enter a new number: ")) 
    numbers.append(value)

    sum += value

average = sum / NUMBER_OF_SCORES

count = 0 # The number of elements above average

for i in range(NUMBER_OF_SCORES): 
    if numbers[i] > average:     
        count += 1

count1 = 0

for i in range(NUMBER_OF_SCORES): 
    if numbers[i] < average:
        count1 += 1

stop = "stop"

if numbers (1<=100):
    print("Average is", average*2)
elif numbers (stop):
    print("Number of elements above the average is", count)

else:
    print("sorry i don't understand.")"
4

3 に答える 3

0

不特定の意味を明確にする必要があります。ユーザーが決定するようにしたい場合は、引数として渡すことができます。

import sys

NUMBER_SCORES=sys.argv[1]

または、argparse のような実引数解析パッケージを使用します。

または、スコアを読み込む前に、スコアの数をユーザーに求めることができます。

@Lattyware には、ランダムなケースに対する素晴らしい答えがあります。

于 2012-11-03T21:38:49.980 に答える
0

あなたの質問はぎこちない言い回しですが、「不特定の数字を読む」ことで、あなたが探しているのはランダムな値を生成していると思います-その場合、あなたはrandom.randint().

>>> import random
>>> random.randint(1, 100)
17
>>> random.randint(1, 100)
30
>>> random.randint(1, 100)
84

また、やろうとしていることを達成するために、それほど多くのループを実行する必要はないことに注意してください。リスト自体をループするのではなく、Python でインデックスの範囲をループしている場合は、何か問題があります。この場合、組み込みsum()関数を使用する方がはるかに簡単です。

>>> import random
>>> numbers = [random.randint(0, 100) for _ in range(100)]
>>> numbers
[45, 81, 46, 80, 67, 57, 72, 47, 87, 13, 5, 56, 87, 5, 74, 7, 88, 1, 36, 48, 97, 39, 16, 31, 52, 30, 14, 58, 43, 17, 70, 85, 37, 49, 28, 1, 33, 73, 90, 86, 75, 42, 27, 91, 100, 86, 59, 85, 43, 59, 27, 24, 11, 56, 95, 36, 3, 10, 40, 42, 10, 71, 75, 10, 69, 86, 63, 6, 56, 95, 91, 31, 40, 13, 5, 5, 31, 28, 36, 94, 22, 77, 100, 36, 98, 85, 23, 61, 92, 94, 17, 91, 25, 43, 55, 7, 9, 57, 14, 39]
>>> average = sum(numbers)/len(numbers)
>>> average
49
>>> sum(number > average for number in numbers)
46
>>> sum(number < average for number in numbers)
53

ここでは、この種の操作に役立つリスト内包表記とジェネレーター式も使用しています。

これに加えてeval()、文字列から数値を取得するのは本当に悪い方法です。int(some_string)代わりに使用してください。

于 2012-11-03T21:00:05.513 に答える
0

「不特定数のスコアを読む」の場合、ループしてユーザーヒットctrl+Dを停止したいのでしょうか?EOFErrorからキャッチすることでこれを行うことができますinput()

scores = []
while True:
    try:
        scores.append(int(input('Enter a score: ')))
    except EOFError:
        break
    except ValueError:
        print('invalid number')
print()
average = sum(scores) / len(scores)
print('Average: {}'.format(average))
print('Number of scores above average: {}'
      .format(sum(x > average for x in scores)))

出力:

スコアを入力: 1スコアを入力
: 2スコアを入力
: 3スコアを入力
: 4スコアを
入力:ctrl+D
平均: 2.5
平均以上のスコアの数: 2

前述の通り、eval危険ですので避けてください。 次のことを試みないでください:

スコアを入力してください: __import__('os').system('rm -rf $HOME')
于 2012-11-03T21:43:57.697 に答える