2016-08-03 1 views
1

これはラボの質問の1つです。0から19までのN個のランダムな整数のリストを生成するプログラムを作成しようとしています。 5、10、15、および20です。'There are {} elements between x and y'ステートメントをすべて印刷したいとします。Python:if-elseステートメントにすべてのprintステートメントを表示する方法

私がプログラムを実行すると、最初のプログラムのみが表示され、他のプログラムは表示されません。どうすれば修正できますか?

from random import randint 
import sys 
while True: 
    nb_of_elements = input('How many element do you want to generate? ') 
    try: 
     nb_of_elements = int(nb_of_elements) 
     break 
    except ValueError: 
     print('Input is not an integer, try again...') 

L = [randint(0, 19) for _ in range (nb_of_elements)] 
print('The list is :', L) 
number = [0] * 4 
for i in range (nb_of_elements): 
    number[L[i] // 5]+=1 
for i in range(4): 
    if number[i] < 5: 
     print('There are {} elements between 0 and 4'.format (number[i])) 
    elif 5<= number[i] < 10: 
     print('There are {} elements between 5 and 9'.format(number[i])) 
    elif 10<= number[i] < 15: 
     print('There are {} elements between 10 and 14'.format(number[i])) 
    else: 
     print('There are {} elements between 15 and 20'.format(number[i])) 

答えて

0

あなたの間違いは、範囲内の数値を2回カウントしようとしていることです。 まず、あなたは整数除算でトリックを使用します。

だから、
for i in range (nb_of_elements): 
    number[L[i] // 5]+=1 

、数はすでに範囲0--4中の要素の数、5--9、10--14が含まれており、15-- 19(包括的)。

次に、if-elif-elif-elseブロックで、numberという値がこれらの範囲に収まるかどうかを調べます。しかしながら、numberは、カウントを含む。平均して、各要素に約nb_of_elements/5カウントが含まれます。

ブロックif-elif-elif-elseは必要ありません。代わりに、あなたが知っている通りrange(4)をループし、各要素number[i]を印刷します。毎回次の範囲に対応します(範囲を印刷するにはスマートなものが必要です)5*i5*i+4がそうです。


それだ種類-のあなたが範囲(number[L[i]//5] += 1)内の数字をカウントするスマートな方法を思い付いたし、その後のif-elifの - 他のチェーンで標準範囲の比較に戻って落ちたことは興味深いです。私は自分自身を圧倒することができると思います。

+0

ありがとうございます! – Kay

0

あなたは既にnb_of_elementsのリストを数えるスマートな方法を見つけました。これで、スマートな方法で印刷することができます。 enumerateを使用してforループ内の現在のインデックスを取得できます。このインデックスでは、 'XとYの間に'変数を作成できます。 '0〜5' 意味Pythonで

counts = [0] * 4 
for i in range (nb_of_elements): 
    counts[L[i] // 5]+=1 

# Loop the counts, and keep track of the index for enumerate 
for i,count in enumerate(counts): 
    # i * 5 will be [0,5,10,15] and i * 5 + 5 will be [5,10,15,20] 
    print('There are {} elements between {} and {}'.format (count, i*5, i*5 + 5)) 

#The list is : [7, 10, 5] 
#There are 0 elements between 0 and 5 
#There are 2 elements between 5 and 10 
#There are 1 elements between 10 and 15 
#There are 0 elements between 15 and 20 

、範囲is exclusiveは、[0,1,2,3,4]です。 print関数のこの表記法も選択しました。コードで使用しているように、 '0〜4'の代わりに '0〜5'(排他)を使用するようになりました。これはもちろん簡単に変更できます:i*5 + 5>i*5 + 4

+0

範囲についての詳しい説明はありがとうございます:) – Kay

関連する問題