我正在尝试学习Python,我有一个练习,其中我有一个生成随机数的函数,我必须创建另一个函数来计算在调用随机生成器之后数字出现在该输出中的次数一千次。 这就是我到目前为止所做的:
from random import *
def gerador_aleatorio():
return randint(0, 10)
def histograma():
num = {range(gerador_aleatorio())}
for n in range(gerador_aleatorio()):
return num
hist = {}
for i in num:
hist[i] = hist[i] + 1
return hist
但输出不是我想要的。它看起来像这样:
=>直方图()
=> {range(0,7)}
当我在找这样的东西时:
0 - 6
1 - 894
2 - 92
3 - 82
4 - 53
5 - 89
6 - 85
7 - 28
8 - 51
9 - 81
10 - 92
我没有将第一个功能的输出“连接”到第二个功能,我没有看到如何正确地做到这一点。
答案 0 :(得分:0)
您可以使用collections.Counter()
简单地构建直方图:
import collections
def histograms():
return collections.Counter(gerador_aleatorio() for i in xrange(1000))
>>> histograms()
>>> {3: 99, 10: 99, 0: 97, 9: 95, 1: 88, 2: 88, 5: 88, 8: 88, 7: 87, 4: 86, 6: 85}
上面的代码片段正在做什么,通过调用随机数生成器函数获取随机1000
值,并创建函数返回的1000
值的直方图,另一个更简单的实现相同的功能可以看作:
def histograms():
a = []
for i in xrange(1000):
a.append(gerador_aleatorio())
return collections.Counter(a)
我们将所有1000个随机数存储在列表中,然后从给定列表中创建直方图。
答案 1 :(得分:0)
使用*导入时要小心,因为您可能有一些名称冲突,最好只导入方法并将其称为method.func_name()**
import random
def gerador_aleatorio():
return random.randint(0, 10)
def histograma():
hist = {}
for count in range(int(input('Enter amount of rand nums: '))):
num = gerador_aleatorio()
hist.setdefault(num, 0)
hist[num] += 1
for number in hist:
print(str(number) + ': ' + str(hist[number]))
histograma()
您可以将所有数字存储在字典中,并在每次出现时对其进行计数。