1

例如,如果我有一个类似的列表:

one = [1,2,3]

我可以使用什么函数或方法将每个元素拆分为自己的单独列表,例如:

one = [1]

RANDOM_DYNAMIC_NAME = [2]

RANDOM_DYNAMIC_NAME_AGAIN = [3]

并且在任何给定时间,调用的未拆分列表one可能有超过 1 个元素,它是动态的,并且这个算法对于我作为自给作业编码的刽子手游戏是必需的。

需要该算法来完成此示例目的:

pick a word: mississippi

guess a letter: s

['_','_','s','s','_','s','s','_','_','_','_']

这是我的代码:

http://pastebin.com/gcCZv67D

4

3 回答 3

4

查看您的代码,如果您要解决的部分是第 24-26 行中的注释,那么您绝对不需要为此动态创建变量,实际上我什至无法想象它们如何帮你。

你有这个:

enum = [i for i,x in enumerate(letterlist) if x == word]

你的变量的名称非常令人困惑——所谓的东西word是猜测的字母,而你有一个不同的变量letterguess是别的东西,然后一个变量叫做letter这就是整个词……但我想我明白了你的目标。

enumwordwithin的所有索引的列表letterlist。例如,如果letterlistis'letter'wordis t,它将是[2, 3]

然后你这样做:

bracketstrip = (str(w) for w in enum)

所以现在bracketstrip['2', '3']。我不确定你为什么想要那个。

z = int(''.join(bracketstrip))

并且''.join(bracketstrip)'23',所以z23

letterguess[z] = word

现在你得到一个IndexError, 因为你试图设置letterguess[23]而不是设置letterguess[2]and letterguess[3]

这是我认为您想要替换的内容:

enum = [i for i,x in enumerate(letterlist) if x == word]
for i in enum:
    letterguess[i] = word

关于代码其他部分的一些提示:

你有几个地方可以做这样的事情:

letterlist = []
for eachcharacter in letter:
  letterlist.append(eachcharacter)

这与letterlist = list(letter). 但实际上,您根本不需要该列表。你唯一能做的就是for i, x in enumerate(letterlist),而且你一开始就可以做同样的事情letter。你通常会让事情变得比你必须做的要困难得多。确保您真正理解为什么要编写每一行代码。

“因为我无法让它以任何其他方式工作”不是一个原因——<em>你想开始工作是什么?为什么你认为你需要一个list字母?没有人可以同时将所有这些决定都记在脑海中。您拥有的技能越多,您的代码就越明显以至于不需要注释,但您永远不会到达不需要任何注释的地步。当您刚开始时,每次您弄清楚如何做某事时,添加一条评论,提醒自己您正在尝试做什么,以及为什么它有效。您以后可以随时删除评论;你永远无法收回不是你写的评论。

于 2012-12-14T02:10:47.410 回答
0

对于问题一,只需列出理解即可。它将每个元素作为单独的列表返回

[ [x,] for x in one ]
于 2012-12-14T01:58:20.850 回答
-1

至于您的问题的字面答案,这就是您的做法,尽管我无法想象您为什么要这样做。通常,动态变量名称设计不佳。您可能只需要一个列表或列表列表。

import random

for x in one:
    name = 'x' + str(random.getrandbits(10))
    globals()[name] = [x]
于 2012-12-14T01:59:31.970 回答