随机数生成器,不可散列的类型“列表”

问题描述 投票:1回答:3

我下面代码的目标是从随机数中提取10个数字。然后打印出大多数经常出现的数据(模式/方式)。

这是我尝试过的

i=0
a=0
import random
from time import sleep
import statistics
var1=input ("min random : ")
var2=input ("max random : ")
bb=int(var1)
ba=int(var2)
data = [[]for z in range(10)]
while i<10:
    rundum=random.randint(bb,ba)
    print(rundum)
    data[a].append(rundum)
    sleep(0.2)
    i=i+1
    a=a+1
tuple(data)
statistics.mode(data)
print(data)

这是结果

min random : 1
max random : 10
2
5
9
1
10
7
1
6
9
9
[[2], [5], [9], [1], [10], [7], [1], [6], [9], [9]]
Traceback (most recent call last):
  File "C:\Users\Ez\Documents\belajar random.py", line 20, in <module>
    statistics.mode(data)
  File "C:\Program Files (x86)\Thonny\lib\statistics.py", line 501, in mode
    table = _counts(data)
  File "C:\Program Files (x86)\Thonny\lib\statistics.py", line 252, in _counts
    table = collections.Counter(iter(data)).most_common()
  File "C:\Program Files (x86)\Thonny\lib\collections\__init__.py", line 568, in __init__
    self.update(*args, **kwds)
  File "C:\Program Files (x86)\Thonny\lib\collections\__init__.py", line 655, in update
    _count_elements(self, iterable)
TypeError: unhashable type: 'list'
>>> 

我不知道如何解决此问题预先感谢。

python
3个回答
1
投票

您可以使用此:

import random
import statistics
from time import sleep

bb = int(input("min random : "))
ba = int(input("max random : "))

data = []
for i in range(10):
    r = random.randint(bb, ba)
    data.append(r)
    sleep(0.2)

mode = statistics.mode(data)
print(data)
print("Mode: ", mode)

样本结果:

[9, 7, 8, 4, 5, 8, 2, 3, 10, 6]
Mode:  8

0
投票

为什么要这样声明data?它应该只是data = [],然后在for循环中,您只需要追加到数据即可:

i=0
a=0
import random
from time import sleep
import statistics
var1=input ("min random : ")
var2=input ("max random : ")
bb=int(var1)
ba=int(var2)
data = []
while i<10:
    rundum=random.randint(bb,ba)
    print(rundum)
    data.append(rundum)
    sleep(0.2)
    i=i+1
    a=a+1

data = tuple(data)
print(data)
print(statistics.mode(data))
print(data)

结果:

(10, 7, 6, 3, 5, 5, 4, 1, 6, 5)
5

0
投票

尝试此代码并声明一个空列表,请分配data = [],每当需要将数据添加到列表时,都可以使用插入append方法。

import random
import statistics
from time import sleep

i=0
a=0

var1=input ("min random : ")
var2=input ("max random : ")
bb=int(var1)
ba=int(var2)
data = []
while i<10:
    rundum=random.randint(bb,ba)
    print(rundum)
    data.append(rundum)
    sleep(0.2)
    i=i+1
    a=a+1

print("Mode of given data set is {}".format(statistics.mode(data)))
© www.soinside.com 2019 - 2024. All rights reserved.