Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我正在尝试用python实现火焰游戏。无法删除所有匹配的角色吗?_Python - Fatal编程技术网

我正在尝试用python实现火焰游戏。无法删除所有匹配的角色吗?

我正在尝试用python实现火焰游戏。无法删除所有匹配的角色吗?,python,Python,我没有完全完成我的代码。但我已经完成了删除匹配字符的工作。但问题是它只删除第一个匹配字符。它没有删除剩余的匹配字符。我的代码中有什么问题?您可能会发现,使用dict而不是列表更容易跟踪代码中的字母每个名字。例如,如果名称是“Billy”,则dict将是:{“b”:1,“i”:1,“l”:2,“y”:1}。通过这种方式,您可以轻松删除信件的所有实例,因为它们都存储在同一位置 为每个名称创建词典的最简单方法是词典理解: def flames(l,l1): for i in l:

我没有完全完成我的代码。但我已经完成了删除匹配字符的工作。但问题是它只删除第一个匹配字符。它没有删除剩余的匹配字符。我的代码中有什么问题?

您可能会发现,使用
dict
而不是
列表
更容易跟踪代码中的字母每个名字。例如,如果名称是“Billy”,则
dict
将是:
{“b”:1,“i”:1,“l”:2,“y”:1}
。通过这种方式,您可以轻松删除信件的所有实例,因为它们都存储在同一位置

为每个名称创建词典的最简单方法是词典理解:

def flames(l,l1):
    for i in l:
        if i in l1:
            l.remove(str(i))
            l1.remove(str(i))
n1=input("Enter first name:")
n2=input("Enter Second name:")
l=list(n1)
l1=list(n2)
flames(l,l1)
print(l)
print(l1)
当然,这些字母的顺序并不重要,可能会以不同的顺序出现。还要注意的是,“Billy”中的“B”在字典中变成了“B”。在这个游戏中,这可能是一个优先考虑的问题,但通常您希望将所有字符转换为小写,这样大写和小写字母就不会被视为不同的

<>使用一个<代码> DICT<代码>而不是一个<代码>列表>代码>来存储这些字符:当你迭代字典时,你不能修改字典,你会得到一个<代码>运行时错误< /代码>。因此,当您遍历
d1
(名字中的字符)并删除
d2
中的匹配字符时,您必须记住匹配的字符,以便以后可以从
d1
中删除它们

n1 = input("Enter first name: ").lower()
d1 = { char:n1.count(char) for char in n1 }

之后,您只需将每个字典中剩余的值相加,这将为您提供删除所有匹配项后的剩余字符数。然后做一点模运算,找出这对“火焰”字符中的哪一个。

如前所述,这篇文章陈述了一系列事实,并指出其中一个是问题,但没有提出任何问题。如果你问一个问题,你会得到更多更好的关注,最好是一个能确定你最难理解的部分的问题。@Green斗篷盖“两个循环”?只有一个循环。(考虑到代码的明显意图,我认为只有一个循环本身就是该代码的许多问题之一,另一个问题是迭代过程中集合的就地突变,但这个问题需要一些繁重的编辑才能回答。)假设您正在问为什么它只删除找到的第一个元素。。这是因为list.remove()方法就是这么做的。您必须循环第二个名称的每个字符,以查看其是否匹配,并分别删除每个字符。
d1ToDel = []
for k in d1:
    if k in d2:
        del d2[k]
        d1ToDel.append(k)
for k in d1ToDel:
    del d1[k]