2013-12-10 81 views
-1

這是我的代碼:Python中生成隨機數

import random 
minimum=int(input("Enter minimal value: ")) 
maximum=int(input("Enter maximum value: ")) 
howMany = int(input("How many numbers do you want to generate?")) 
sum=0 
n=1 
while n<=howMany: 
    num=random.randrange(minimum,maximum) 
    num+=sum 
    num+=1 
    print(num) 
print("Python's random average between", minimum, "and", maximum, "is", sum/howMany*100) 

的問題是,當用戶輸入他們想要生成的數字量,它不說什麼和Python犯規做任何事情。它只是凍結。我的代碼有什麼問題?另外,我將如何計算平均值?我的平均值爲0.0。

+6

'num + = 1'應該是'n + = 1' – BartoszKP

+3

使用'for_範圍(howMany):'更容易,那麼你不能忘記增加 – jonrsharpe

回答

1

增量n代替numsum應通過num

while n<=howMany: 
    num=random.randrange(minimum,maximum) 
    sum += num 
    n += 1 
    print(num) 

也值遞增發現平均使用的sum/howMany代替sum/howMany*100

3

我可能會建議使用for .. in循環,以避免這些邏輯錯誤的類型?

import random 
minimum=int(input("Enter minimal value: ")) 
maximum=int(input("Enter maximum value: ")) 
howMany = int(input("How many numbers do you want to generate?")) 
total=0 
for n in range(howMany): 
    num=random.randrange(minimum,maximum) 
    total+=num 
    print(num) 
print("Python's random average between", minimum, "and", maximum, "is", total/howMany*100) 

事實上,它驅使我堅果當我不得不使用其他語言的常規for循環。

另請注意,它應該是sum+=num而不是num+=suma += ba = a + b相同 - 它是左側被修改的。

+0

。內置'總和'不會被後面的驚喜影響...... –

+0

如果OP使用3,那麼就沒有'xrange'。 – DSM

+0

好評,都是。更新 – Claudiu

1

我建議使用內置sum函數,在生成器表達式上,而不是手動添加隨機值。這是一個有點比你所使用的更先進,但它的東西,Python是真正擅長的一個:

import random 

minimum=int(input("Enter minimal value: ")) 
maximum=int(input("Enter maximum value: ")) 
howMany = int(input("How many numbers do you want to generate?")) 

total = sum(random.randint(minimum, maximum) for _ in range(howMany)) # do the sum 

avg = total/howMany # compute the average 

# print the output 
print("Average of {} random numbers between {} and {} is {:.2}".format(howMany, minimum, 
                     maximum, avg)) 

我做了一些其他的東西也不同。首先,我使用名稱total作爲隨機數的總和,以免陰影內建sum函數。允許隱藏現有名稱,但通常是一個壞主意(它可能導致錯誤)。由於我使用的是sum函數,因此使用sum作爲變量名也會非常混亂。

sum呼叫內的發電機表達,我還使用randint而非randrange,因爲它包含了最大值(randrange排除最大值,像range一樣)。我認爲這更符合「在minimummaximum之間」的描述,這表明(至少對我而言)應該對稱地處理端點。如果您將隨機數字用於其他目的,則應注意所調用的函數與您的使用相匹配,否則您可能難以發現錯誤。

我也使用字符串格式來產生輸出,而不是將多個值傳遞到print。如果需要,這可以在格式化方面提供更多的靈活性。我使用這種靈活性將平均值限制爲兩位小數,而不是Python的默認值(這通常是浮點數中的所有精度,約16位小數)。

0

如果速度是一個問題。你可以這樣做:

import numpy as np 
total = np.random.random_integers(minimum, maximum, size=(howMany)).sum() 

這大概是比

total = sum(random.randint(minimum, maximum) for _ in range(howMany)) 
0

這裏既不n也不howMany被循環內更新,所以狀態始終保持真給人一種無限循環快100倍。

更新n或減少howMany的值。