2017-05-27 5 views
0

Fehler Spur:Attribute: 'str' Objekt hat kein Attribut 'pop'

C:\Users\Abhi.Abhi-PC\Desktop\PYE>ex25ex.py Traceback (most recent call last): File "C:\Users\Abhi.Abhi-PC\Desktop\PYE\ex25ex.py", line 41, in print_last_word(sentence) File "C:\Users\Abhi.Abhi-PC\Desktop\PYE\ex25ex.py", line 17, in print_last_word word = words.pop(1) AttributeError: 'str' object has no attribute 'pop'

Hier ist der Code

def break_words(stuff): 
    """This function will break up words for us.""" 
    words = stuff.split() 
    return words 

def sort_words(words): 
    """Sorts the words.""" 
    return sorted(words) 

def print_first_word(words): 
    """Prints the first word after popping it off.""" 
    word = words.pop(0) 
    print word 

def print_last_word(words): 
    """Prints the last word after popping it off.""" 
    word = words.pop(1) 
    print word 

def sort_sentence(sentence): 
    """Takes in a full sentence and returns the sorted words.""" 
    words = break_words(sentence) 
    return sort_words(words) 

def print_first_and_last(sentence): 
    """Prints the first and last words of the sentence.""" 
    words = break_words(sentence) 
    print_first_word(words) 
    print_last_word(words) 

def print_first_and_last_sorted(sentence): 
    """Sorts the words then prints the first and last one.""" 
    words = sort_sentence(sentence) 
    print_first_word(words) 
    print_last_word(words) 

sentence="island has lush vegetation, area. However, summers are cooler than those abundant." 

break_words(sentence) 
sort_words(sentence) 
print_last_word(sentence) 
print_last_word(sentence) 
print_first_and_last_sorted(sentence) 
print_first_and_last(sentence) 

Ich bin nicht in der Lage, das Problem mit dem Problem Figur. Ich bin neu in Python. Ich arbeite nach dem Buch "Wie man Python hart lernt".

+1

wie der Fehler sagt, Sie versuchen, 'pop()' auf der 'str' zu nennen, aber diese Funktion ist nicht mit Stichen –

+0

Satz ist eine Zeichenfolge, aber in' print_last_word 'könnten Sie erwarten, dass es dort zu sein die Funktion zu arbeiten ... auch für das letzte Wort möchten Sie vielleicht 'words.pop (-1)' statt 1 machen. – Suparshva

+0

was soll ich tun, um Pop zu benutzen? –

Antwort

0
def break_words(stuff): 
    """This function will break up words for us.""" 
    words = stuff.split() 
    return words 

def sort_words(words): 
    """Sorts the words.""" 
    return sorted(words) 

def print_first_word(words): 
    """Prints the first word after popping it off.""" 
    word = words.pop(0) 
    print(word) 

def print_last_word(words): 
    """Prints the last word after popping it off.""" 
    word = words.pop(-1) 
    print(word) 

def sort_sentence(sentence): 
    """Takes in a full sentence and returns the sorted words.""" 
    words = break_words(sentence) 
    return sort_words(words) 

def print_first_and_last(sentence): 
    """Prints the first and last words of the sentence.""" 
    words = break_words(sentence) 
    print_first_word(words) 
    print_last_word(words) 

def print_first_and_last_sorted(sentence): 
    """Sorts the words then prints the first and last one.""" 
    words = sort_sentence(sentence) 
    print_first_word(words) 
    print_last_word(words) 

sentence="island has lush vegetation, area. However, summers are cooler than those abundant." 

wordList=break_words(sentence) 
print('') 
print('wordList:',wordList) 
print('') 
print('Sorted :',sort_words(wordList)) 
print('') 
print_first_word(wordList) 
print('') 
print_last_word(wordList) 
print('') 
print_first_and_last_sorted(sentence) 
print('') 
print_first_and_last(sentence) 

RESULT

wordList: ['island', 'has', 'lush', 'vegetation,', 'area.', 'However,', 'summers', 'are', 'cooler', 'than', 'those', 'abundant.'] 

Sorted : ['However,', 'abundant.', 'are', 'area.', 'cooler', 'has', 'island', 'lush', 'summers', 'than', 'those', 'vegetation,'] 

island 

abundant. 

However, 
vegetation, 

island 
abundant. 
+0

danke !! Ich habe dich verstanden. Aber das Problem wurde nicht gelöst. Jetzt zeigt es auch den gleichen Fehler. –

0

Was Sie versuchen, hier zu tun, ist ein Wort aus einem String entfernen. Wenn Sie versuchen, sentence.pop(), versuchen Sie ein Element aus einem unveränderlichen Sequenztyp zu entfernen. Dies bedeutet, dass Sie versuchen, ein Element aus einer Zeichenfolge zu entfernen, was nicht zu viel Sinn macht. Was Sie stattdessen tun sollten, ist die Zeichenfolge in Wörter durch words.split(' ') zu brechen und dann entfernen, welches Element Sie daraus entfernen möchten. So eine Lösung zu ersetzen Linie 17:

word = words.split(' ').pop(len(words.split(' '))-1)

, dass das letzte Wort aus dem Satz entfernen wird und weisen Sie ihn word.

Hinweis: Dies ist offensichtlich nicht die effizienteste Lösung. Ich habe es abgebrochen, um es lesbar zu machen.

this helps

1

Das Problem mit Ihrem Code ist, dass Sie die Rückgabewerte Ihrer Funktionen ignorieren, vor allem break_words und arbeiten immer über den ursprünglichen Eingang. Dies würde das Problem beheben:

words = break_words(sentence) 
sort_words(words) 
print_first_word(words) 
print_last_word(words) 
print_first_and_last_sorted(sentence) 
print_first_and_last(sentence) 

Es ist ein weiteres kleines Problem, das Sie words.pop(-1) den Zugriff auf das letzte Element in den Worten-Liste verwenden sollen.

Wie können Sie das Problem anhand der Fehlermeldung identifiziert haben? Die Ausnahme ist ein AttributeError, der besagt, dass 'str' object has no attribute 'pop'. So ist in der Zeile words.pop(0) words ein String, keine Liste von Strings, wie der Variablenname andeutet. Sie brauchen dann nur einen kurzen Blick darauf zu werfen, warum diese Variable eine Zeichenkette ist: Wenn Sie die Funktion mit print_last_word(sentence) aufrufen, übergeben Sie ihr die Originaldaten (vom Typ str) und nicht die vorverarbeiteten Daten, die Sie vielleicht übergeben haben.

Verwandte Themen