如何从列表中随机选择项目

时间:2017-11-03 13:53:40

标签: python random

这是一个Raspberry Pi Sense Hat项目。我将发布下面的代码但是它应该做什么:

感应帽是8x8 LED的网格(虽然我在屏幕上使用数字仿真器版本)我已经编写了一个骰子滚动程序,到目前为止我已经编码了6个数字,我让它们闪烁/播放一个动画(模拟滚动效果)我现在想添加一个random.choice()来在结尾随机显示6个数字中的一个。

我的问题:我所知道的方法只适用于一个非常简单的列表,例如:

mylist = ['choiceA', 'choiceB', 'choiceC']

并使用:

print(random.choice(mylist))

我的版本没有引号,因为我不想打印' choiceA'因为它写在列表中,所以choiceA是一个包含更多代码的变量。

我将发布整个程序,以便您可以准确地看到我在做什么...如果这里的问题有点冗长,请致歉,并且它可能不是我学习的最专业的编码方法困难的方式......由我自己

注意:最后一行代码是我对我认为它如何工作的想法。评论如下:

from sense_emu import SenseHat
import random
import time

sense = SenseHat()

b = [0,255,255]
w = [255,255,255]

# Number 1
imageA = [
w,w,w,w,w,w,w,w,
w,w,w,w,w,w,w,w,
w,w,w,w,w,w,w,w,
w,w,w,b,b,w,w,w,
w,w,w,b,b,w,w,w,
w,w,w,w,w,w,w,w,
w,w,w,w,w,w,w,w,
w,w,w,w,w,w,w,w
]

# Number 2
imageB = [
w,w,w,w,w,w,w,w,
w,w,w,w,w,w,w,w,
w,w,w,w,w,w,w,w,
w,b,b,w,w,b,b,w,
w,b,b,w,w,b,b,w,
w,w,w,w,w,w,w,w,
w,w,w,w,w,w,w,w,
w,w,w,w,w,w,w,w
]

# Number 3
imageC = [
w,w,w,w,w,w,w,w,
w,w,w,b,b,w,w,w,
w,w,w,b,b,w,w,w,
w,w,w,w,w,w,w,w,
w,w,w,w,w,w,w,w,
w,b,b,w,w,b,b,w,
w,b,b,w,w,b,b,w,
w,w,w,w,w,w,w,w
]

# Number 4
imageD = [
w,w,w,w,w,w,w,w,
w,b,b,w,w,b,b,w,
w,b,b,w,w,b,b,w,
w,w,w,w,w,w,w,w,
w,w,w,w,w,w,w,w,
w,b,b,w,w,b,b,w,
w,b,b,w,w,b,b,w,
w,w,w,w,w,w,w,w
]

# Number 5
imageE = [
b,b,w,w,w,w,b,b,
b,b,w,w,w,w,b,b,
w,w,w,w,w,w,w,w,
w,w,w,b,b,w,w,w,
w,w,w,b,b,w,w,w,
w,w,w,w,w,w,w,w,
b,b,w,w,w,w,b,b,
b,b,w,w,w,w,b,b
]

# Number 6
imageF = [
w,b,b,w,w,b,b,w,
w,b,b,w,w,b,b,w,
w,w,w,w,w,w,w,w,
w,b,b,w,w,b,b,w,
w,b,b,w,w,b,b,w,
w,w,w,w,w,w,w,w,
w,b,b,w,w,b,b,w,
w,b,b,w,w,b,b,w]

diceList = [imageA, imageB, imageC, imageD, imageE, imageF]

while True:
    for image in diceList:
        sense.set_pixels(image)
        time.sleep(0.1)

#sense.set_pixels(random.choice(dicelist))

如果我取消评论最后一行,动画仍然继续播放,它不会显示我的随机选择

注意:此代码将在sensehat模拟器网站上运行,但导入ID略有不同(我从Raspbian OS运行我的模拟器):

https://trinket.io/sense-hat

如果您确实想在网站上试用,我99%肯定您需要编辑第一个导入到此:

from sense_hat import SenseHat

2 个答案:

答案 0 :(得分:1)

只是做:

while True:
    sense.set_pixels(random.choice(dicelist))
    time.sleep(0.1)

没有for循环

修改

根据我的理解,你想先显示一个6面的动画,然后在投掷时显示一面。

使用带random.choice的for循环显示随机动画:

for i in range(6):
    sense.set_pixels(random.choice(dicelist))
    time.sleep(0.1)

如果您希望动画以随机顺序显示所有6个边(而不是6个随机边),请使用np.random.permutation

my_permutation = np.random.permutation(6)
for i in my_permutation:
    sense.set_pixels(dicelist[i])
    time.sleep(0.1)

答案 1 :(得分:0)

除非我误解了这个问题,否则你只需要列表中的随机元素。这很简单:

xticks