例如,如果我有一个类似的列表:
one = [1,2,3]
我可以使用什么函数或方法将每个元素拆分成各自独立的列表,如:
one = [1]
RANDOM_DYNAMIC_NAME = [2]
RANDOM_DYNAMIC_NAME_AGAIN = [3]
并且在任何给定时间,名为one
的 unsplit 列表可能包含多个元素,其动态,并且此算法是我编码为自我的刽子手游戏所需的给作业。
需要算法来完成此示例目的:
pick a word: mississippi
guess a letter: s
['_','_','s','s','_','s','s','_','_','_','_']
这是我的代码:
答案 0 :(得分:4)
查看你的代码,如果你要解决的部分是第24-26行中的注释,那么你根本不需要动态创建的变量,事实上我甚至无法想象他们如何帮助你。
你有这个:
enum = [i for i,x in enumerate(letterlist) if x == word]
变量的名称非常令人困惑 - 称为word
的是猜测字母,而你有一个不同的变量letterguess
是其他东西,然后是一个名为{{1}的变量这就是整个词......但我认为我得到了你的目标。
letter
是enum
中所有word
指数的列表。例如,如果letterlist
为letterlist
且'letter'
为word
,则为t
。
然后你这样做:
[2, 3]
所以现在bracketstrip = (str(w) for w in enum)
是bracketstrip
。我不确定你为什么要那样。
['2', '3']
z = int(''.join(bracketstrip))
为''.join(bracketstrip)
,因此'23'
为z
。
23
现在你得到一个letterguess[z] = word
,因为你试图设置IndexError
而不是设置letterguess[23]
和letterguess[2]
。
以下是我认为您想用以下内容替换它:
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
个字母?没有人能够立即将所有这些决定置于脑海中。你拥有的技能越多,你的代码就越明显,它不需要评论,但你永远不会达到你不需要的程度。当你刚刚开始时,每当你弄清楚如何做某事时,添加一个评论,提醒自己你想要做什么,以及为什么它有效。您可以随时删除评论;你永远无法收到你没有写的评论。
答案 1 :(得分:0)
[ [x,] for x in one ]
答案 2 :(得分:-1)
至于你的问题的字面答案,这里是你如何做到的,虽然我无法想象你为什么要这样做。通常,动态变量名称设计较差。您可能只需要一个列表或列表列表。
import random
for x in one:
name = 'x' + str(random.getrandbits(10))
globals()[name] = [x]