这是我的代码:
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。
答案 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+=sum
。 a += b
与a = a + b
相同 - 它是左侧修改的。
答案 1 :(得分:1)
增量n
代替num
和sum
应增加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
那样。我认为这更符合“minimum
和maximum
之间的描述”,这表明(至少对我来说)端点应该对称处理。如果你将你的随机数用于其他目的,你应该小心你调用的函数符合你的使用,否则你很难找到错误。
我还使用字符串格式来生成输出,而不是将多个值传递给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)
此处,n
和howMany
都没有在循环内更新,因此条件始终保持为真给出无限循环。
更新n
或降低howMany
值。