Python生成随机数

时间:2013-12-10 18:26:46

标签: python python-3.x random

这是我的代码:

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。

5 个答案:

答案 0 :(得分: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相同 - 它是左侧修改的。

答案 1 :(得分:1)

增量n代替numsum应增加num

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

还要查找平均使用sum/howMany而不是sum/howMany*100

答案 2 :(得分: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位小数)。

答案 3 :(得分:0)

如果速度是一个问题。你可以这样做:

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

大约比

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

答案 4 :(得分:0)

此处,nhowMany都没有在循环内更新,因此条件始终保持为真给出无限循环。

更新n或降低howMany值。