fPython:从随机的字母列表中创建一个新的列表

fPython:从随机的字母列表中创建一个新的列表,python,list,random,Python,List,Random,在你刚刚读过的代码中,你应该选择随机的字母,然后把其中的7个字母放在一个人可以看到的架子上。它显示了一个错误,我已经看了很多遍,但我就是看不出有什么错 为了理解代码,我在旁边添加了注释 它显示此错误: letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']#alphabet

在你刚刚读过的代码中,你应该选择随机的字母,然后把其中的7个字母放在一个人可以看到的架子上。它显示了一个错误,我已经看了很多遍,但我就是看不出有什么错

为了理解代码,我在旁边添加了注释

它显示此错误:

letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']#alphabet
bag_o_letters = []#letters to chose from
letter_count = [9, 2, 2, 4, 12, 2, 3, 2, 9, 1, 1, 4, 2, 6, 8, 2, 1, 6, 4, 6, 4, 2, 2, 1, 2, 1]#random indexes to chose from
for x in range(26):#loops through the random index of letter_count
    for i in range(letter_count[x]):#chooses the index
        bag_o_letters.append(letters[x])#appends the index of the letter to bag_o_letters
        rack = []#list for the person to see
        for a in range(7):#makes the list 7 letters long
           rack.append(bag_o_letters.pop(random.randint(0,len(letters)-1)))#appends the letter to rack(supposedly...)
print(rack)
有人能帮忙吗

在这段代码之后,我将为用户创建一个输入语句,以便用户从这些字母中生成一个单词

您正在从
字母的长度
中选择
pop
的索引,该索引明显较大

你应该改为:

rack.append(bag_of_letters.pop(random.randint(0,len(letters)-1)))
IndexError: pop index out of range

但是,您的代码可能会有更多的问题。我建议您在一行代码或列表的副本中使用,然后切片到索引7。两者都会给你随机选择的7封信:

rack.append(bag_of_letters.pop(random.randint(0, len(bag_of_letters)-1)))
#                                                    ^^^^^^^^^^^^^^

您正在从
字母的长度
中选择
pop
的索引,该索引明显较大

你应该改为:

rack.append(bag_of_letters.pop(random.randint(0,len(letters)-1)))
IndexError: pop index out of range

但是,您的代码可能会有更多的问题。我建议您在一行代码或列表的副本中使用,然后切片到索引7。两者都会给你随机选择的7封信:

rack.append(bag_of_letters.pop(random.randint(0, len(bag_of_letters)-1)))
#                                                    ^^^^^^^^^^^^^^


第一次通过循环时,您将一个值附加到
bag\u of_letters
,然后尝试弹出
random.randint(0,len(letters)-1)
。它还没有那么多元素可供弹出。代替这种方法,您可以列出所需的长度和样本:

import random

letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
letters_copy = letters[:]
random.shuffle(letters_copy)
print(letters_copy[:7])
# ['c', 'e', 'x', 'b', 'w', 'f', 'v']

第一次通过循环,将一个值附加到
bag_u字母
,然后尝试弹出
random.random.ranndint(0,len(字母)-1)
。它还没有那么多元素可供弹出。代替这种方法,您可以列出所需的长度和样本:

import random

letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
letters_copy = letters[:]
random.shuffle(letters_copy)
print(letters_copy[:7])
# ['c', 'e', 'x', 'b', 'w', 'f', 'v']

我想这是拼字游戏?您的问题是您正在从
字母列表中选择随机索引,而不是
打包字母。也许可以试试这个:

letters = ['a', ...]#alphabet
letter_count = [9, ...]#random indexes to chose from
bag_of_letters = [l*c for l,c in zip(letters, letter_count)]
...
rack = random.sample(bag_o_letters, 7)

我想这是拼字游戏?您的问题是您正在从
字母列表中选择随机索引,而不是
打包字母。也许可以试试这个:

letters = ['a', ...]#alphabet
letter_count = [9, ...]#random indexes to chose from
bag_of_letters = [l*c for l,c in zip(letters, letter_count)]
...
rack = random.sample(bag_o_letters, 7)

为什么不这样做:

rack = []
for i in range(7):
    index = random.randint(0, len(bag_o_letter) - 1)
    rack.append(bag_o_letters.pop(index))

为什么不这样做:

rack = []
for i in range(7):
    index = random.randint(0, len(bag_o_letter) - 1)
    rack.append(bag_o_letters.pop(index))

索引器应为:

流行音乐(…) L.pop([index])->item——删除并返回索引处的项(默认为最后一个)。 如果列表为空或索引超出范围,则引发索引器错误

您需要在每次
pop()
之后从调用
random()
的范围中减去1。现在您正在这样做:

letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
letter_count = [9, 2, 2, 4, 12, 2, 3, 2, 9, 1, 1, 4, 2, 6, 8, 2, 1, 6, 4, 6, 4, 2, 2, 1, 2, 1]#random indexes to chose from

from random import shuffle
all_letters = list(''.join([l*c for l,c in zip(letters, letter_count)]))
shuffle(all_letters)

for i in range(int(len(all_letters)/7)):
    print all_letters[i*7:(i+1)*7]

因此,相反,
pop()
基于
len(bag\u\u letter)
而不是
len(letter)
索引器应:

流行音乐(…) L.pop([index])->item——删除并返回索引处的项(默认为最后一个)。 如果列表为空或索引超出范围,则引发索引器错误

您需要在每次
pop()
之后从调用
random()
的范围中减去1。现在您正在这样做:

letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
letter_count = [9, 2, 2, 4, 12, 2, 3, 2, 9, 1, 1, 4, 2, 6, 8, 2, 1, 6, 4, 6, 4, 2, 2, 1, 2, 1]#random indexes to chose from

from random import shuffle
all_letters = list(''.join([l*c for l,c in zip(letters, letter_count)]))
shuffle(all_letters)

for i in range(int(len(all_letters)/7)):
    print all_letters[i*7:(i+1)*7]


因此,取而代之的是,
pop()
基于
len(字母)
而不是
len(字母)

bag\u-letter
没有足够的元素来处理
pop
。我不确定我是否理解您试图执行的操作,但您的错误是由于您试图从bag\u-letter中弹出一个项目,该项目的索引间隔为[0..25](因为len(letters)-1=25)在第一次迭代中,字母包只包含一个项目。你的书包里有一些打字错误&书包。第二:我做什么?这是一个拼字游戏。所以你们可以以此为基础。
bag\u o_letter
没有足够的元素来处理
pop
。我不确定我是否理解你们想做什么,但你们的错误是因为你们试图从bag\u letter中弹出一个项目,并且在间隔[0..25]内有一个随机索引(因为len(letters)-1=25)在第一次迭代中,字母包只包含一个项目。你的书包里有一些打字错误&书包。第二:我做什么?这是一个拼字游戏。所以你们可以以此为基础。如果我这样做,列表会在整个代码中保持不变吗?另外,我可以替换机架的随机索引吗?如果您
sample
,则不会修改原始索引。
shuffle
方法要求您像我一样创建副本。第二个Q是不清晰的
random。在未加权的字母列表上采样
(或
random。用一个片段洗牌
),将导致一个倾斜的框架,因为它是从单个线性字母表中选择的,而不是从字母袋中选择的。在选择z和s时,你有同等的机会,你只能得到一个e,以此类推。如果我这样做,列表会在整个代码中保持不变吗?另外,我可以替换机架的随机索引吗?如果您
sample
,则不会修改原始索引。
shuffle
方法要求您像我一样创建副本。第二个Q是不清晰的
random。在未加权的字母列表上采样
(或
random。用一个片段洗牌
),将导致一个倾斜的框架,因为它是从单个线性字母表中选择的,而不是从字母袋中选择的。你将有平等的机会选择一个z和一个s,你只能得到一个e,依此类推。是的!非常感谢。这个拼字游戏!猜得好!啊,是的,我想你需要
len(bag\u\u字母)-1
。我编辑了答案。我使用@Moses Koledoye的答案是!非常感谢。这个拼字游戏!猜得好!啊,是的,我想你需要
len(bag\u\u字母)-1
。我已经编辑了答案。我使用@Moses Koledoye的答案这个答案很好,但我还没有学会
bag_of u letters=[l*c代表l,c在