变量应该是int,但AttributeError声明它是s

2024-09-30 00:35:17 发布

您现在位置:Python中文网/ 问答频道 /正文

Python总是在Words[Check0n].pop()行上给我一个“AttributeError: 'str' object has no attribute 'pop'

最初,我试图通过将CheckCheck0转换成int并将ChecknCheck0n相等来解决这个问题

因为这不起作用,所以我通过使用print(type(Check0n) is int)两次来检查Check0n的值是否是int。两个都打印了True,所以我真的不明白为什么它总是给出相同的错误,如果Check0n是一个字符串,而它显然不是

我想要程序做的是测试列表中的“a”。然后,它应该在列表的下一个位置测试“thing”。如果有“thing”,则应删除列表中该位置的“thing”,并将前一位置的“a”替换为“a thing”。如果你要键入“a stuff”,我希望它们在列表中保持分隔,分别为“a”、“stuff”

def Sentence_Processing():
    Sentence = input("Enter a sentence:")
    Sentence_0 = Sentence.replace(".", " .")
    Sentence_1 = Sentence_0.replace(",", " ,")
    Words = Sentence_1.split()
    print(Words)
    for Word in Words:
        Word0 = str.lower(Word)
        if Word0 == "a":
            Check = Words.index(Word)
            Check0 = Check+1
            Checkn = int(Check)
            Check0n = int(Check0)
            print(type(Check0n) is int)
            if Words[Check0n] == "thing":
                print(type(Check0n) is int)
                Words[Check0n].pop()
                Words[Checkn] = "a thing"
                print("Did all of it")
            print("Passed")

注意,这个程序对我来说太大了,无法粘贴整个东西


Tags: 列表ischecktypepopsentencewordint
1条回答
网友
1楼 · 发布于 2024-09-30 00:35:17

“…它不断给出与Check0n是字符串时相同的错误…”

不,不是。如果Words[Check0n]是一个字符串,它会给你一个错误。。。就是这样Words是字符串列表,Words[Check0n]是其中之一

您可以通过拆分问题行来演示这一点:

Words[Check0n].pop()

…一分为二:

oops = Words[Check0n]
print(repr(oops))
oops.pop()

第一行和第二行可以正常工作,您将看到oops是字符串'thing'。然后您将得到与之前相同的AttributeError,只是它会抱怨oops.pop()

您的代码还有其他问题:

  1. 当“for each”在集合上迭代时,要从集合中删除项,这总是很棘手的。很难推理,因为很多事情同时在改变

  2. 你的函数做了太多的事情,很难分辨出真正的bug在哪里。至少考虑三个功能:

    • get_sentence_from_user()返回一个字符串

    • prep_sentence(sentence)摆弄,.字符,并返回结果“prepared”字符串

    • 使用字符串的split方法将其拆分为单词列表(不需要自己写这个。)

    • merge_words(words)通过每次追加一个单词来构建一个新的列表,任何出现的'a', 'thing'合并到单个元素'a thing'。它返回新的,可能更短的列表

  3. 如注释中所述,如果您真的想修改输入列表,它的pop方法将删除最右边的元素。要删除其他元素,必须给它该元素的整数索引(顺便说一句,如果您担心的话,这很可能比构建新的输出列表要慢。

  4. 当你找到一个单词'a'时,你立即开始处理列表中的下一个单词,而不必验证下一个单词是否存在。这将引发IndexError。。。有时候

相关问题 更多 >

    热门问题