xiehongzhe 发表于 2024-12-13 11:57:51

python第30讲 动动手最后一题相关

words = ["Twitter", "TOTO", "FishC", "Python", "ASL"]
one = "qwertyuiop"
two = "asdfghjkl"
three = "zxcvbnm"
for each in words:
    if one.find(each.lower()) != -1:
      for i in range(len(each)):
            if one.find(each.lower()) == -1:
                words.remove(each)
                break
    if two.find(each.lower()) != -1:
      for i in range(len(each)):
            if two.find(each.lower()) == -1:
                words.remove(each)
                break
    if three.find(each.lower()) != -1:
      for i in range(len(each)):
            if three.find(each.lower()) == -1:
                words.remove(each)
                break
print(words)

为啥我这个跑出来没办法筛选Python,是循环的问题吗?

FishC 发表于 2024-12-13 11:58:01

你遇到的问题是因为在循环遍历列表的过程中修改了列表,这会导致一些元素被跳过,导致预期的操作没有发生。这是因为 `for` 循环会在列表长度改变时出现问题。要解决这个问题,可以在循环开始前创建列表的副本,或者使用列表推导式来实现。以下是使用列表推导式重写代码的方法:

words = ["some", "list", "of", "words"]
one = "qwertyuiop"
two = "asdfghjkl"
three = "zxcvbnm"

result = []

for each in words:
    lower_each = each.lower()
    if all(letter in one for letter in lower_each) or \
       all(letter in two for letter in lower_each) or \
       all(letter in three for letter in lower_each):
      result.append(each)

print(result)

在这里,我们使用 `all()` 函数来检查单词的每一个字母是否只出现在同一个键盘行中。这避免了在遍历过程中修改列表的问题。希望这能解决你的问题!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

jackz007 发表于 2024-12-13 12:32:57

      关于这个代码的题目和要求是什么?

xiehongzhe 发表于 2024-12-13 13:30:05

jackz007 发表于 2024-12-13 12:32
关于这个代码的题目和要求是什么?

已解决感谢感谢
页: [1]
查看完整版本: python第30讲 动动手最后一题相关