fPython:从随机的字母列表中创建一个新的列表
在你刚刚读过的代码中,你应该选择随机的字母,然后把其中的7个字母放在一个人可以看到的架子上。它显示了一个错误,我已经看了很多遍,但我就是看不出有什么错 为了理解代码,我在旁边添加了注释 它显示此错误: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
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在