Suchen bestimmter Zeichen in einer Liste

11

Das Ziel ist es, eine Liste aus dem Absatz des Benutzers zu erstellen und zu iterieren, damit ich zählen kann, wie viele Wörter spezielle Buchstaben "j, x, q, z" enthalten.

Beispieleingabe:
In einem Loch im Boden lebte ein Hobbit. Weder ein böses, schmutziges, nasses Loch, gefüllt mit den Enden von Würmern und einem nassen Geruch, noch ein trockenes, nacktes, sandiges Loch, in dem sich nichts zum Sitzen oder Essen befindet; Es war ein Hobbit-Loch, und das bedeutet Komfort.

Beispielausgabe: 1 Wort mit einem seltenen Zeichen

Ich habe den Code gestartet, in dem ich den Absatz des Benutzers in eine Liste aufteile, aber es fällt mir schwer, die Liste zu durchlaufen und jede Instanz der Sonderbuchstaben zu finden.

Das habe ich bisher:

def rareChar(words):
    rareWords = 0
    rareChars = ['j', 'x', 'q', 'z']
    for astring in words:
        wds = words.split()
        for char in wds:
            if char in rareChars:
                rareWords = rareWords + 1
    return rareWords

def CoolPara(words):
    print(rareChar(words), 'word(s) with a rare character')

    # DO NOT CHANGE CODE BELOW

    print(CoolPara(input("Enter: ")))

Wenn ich mit der Beispieleingabe laufe, erhalte ich eine Ausgabe von '0 Wörtern mit einem seltenen Zeichen'. Wie könnte ich das beheben, damit ich die erwartete Ausgabe bekomme? Jede Hilfe wäre sehr dankbar, da ich noch relativ neu in der Codierung bin

Auch ein kurzer Hinweis: Ich darf nur die Methoden / Funktionen von split () und Len () verwenden.

yariee
quelle
.indexsollte den Job machen
Bigbounty
Sie sollten durch die Ausgabe gehen und einige Druckanweisungen hinzufügen, um sicherzustellen, dass die Anweisungen und Bedingungen erfüllt sind.
Fallenreaper
Tippfehler. sollte die Linie über der inneren Schleife nicht wds = astring.split () sein
abhilb
Was ist der Zweck von for astring in words:?
Norok2
Von den Variablennamen denke ich, dass Sie verwirrt sind. Ändern Sie "für Astring in Wörtern:" in "für Wort in Wörtern.split ():". Dann "für char in wds:" bis für char in word: ". Und löschen Sie" wds = words.split () ".
kantal

Antworten:

4

Vielleicht könnte dies eine Gelegenheit sein, Ihnen einige Python-Funktionen vorzustellen:

from typing import List


def rare_char(sentence: str, rare_chars: List[str]=["j", "x", "q", "z"]) -> List[str]:
    return [word for word in sentence.split() if 
            any(char in word for char in rare_chars)]


def cool_para(sentence: str) -> str:
    return f"{len(rare_char(sentence))} word(s) with rare characters"

Diese Antwort verwendet:

  1. Tippen , das von Tools von Drittanbietern wie Typprüfern, IDEs und Lintern verwendet werden kann, aber vor allem, um Ihre Absichten anderen Menschen klar zu machen, die möglicherweise Ihren Code lesen.
  2. Standardargumente , anstatt sie innerhalb der Funktion fest zu codieren. Es ist sehr wichtig, Ihre Funktionen zu dokumentieren, damit ein Benutzer vom Ergebnis nicht überrascht wird (siehe Prinzip des geringsten Erstaunens ). Es gibt natürlich auch andere Möglichkeiten, Ihren Code zu dokumentieren (siehe Dokumentzeichenfolgen ) und andere Möglichkeiten, diese Schnittstelle zu entwerfen (könnte beispielsweise eine Klasse sein ), aber dies dient nur zur Veranschaulichung des Punktes.
  3. Listenverständnisse auf , die Ihren Code lesbarer machen können, indem er deklarativer statt zwingender wird . Es kann schwierig sein, die Absicht hinter imperativen Algorithmen zu bestimmen.
  4. String-Interpolation , die meiner Erfahrung nach weniger fehleranfällig ist als die Verkettung.
  5. Ich habe den pep8-Styleguide verwendet, um die Funktionen zu benennen. Dies ist die häufigste Konvention in der Python-Welt.
  6. Schließlich habe ich anstelle des Druckens ein strin der cool_paraFunktion zurückgegeben, da der Code unter dem # DO NOT CHANGE CODE BELOWKommentar das Ergebnis des Funktionsaufrufs druckt.
Marcus Vinícius Monteiro
quelle
1
Eine der besten Implementierungen, die ich bisher gesehen habe. Könnte nicht pythonischer sein. :-) Ich würde einfach umbenennen rare_chars()zu find_rare_words()statt.
Accdias
1

Idealerweise möchten Sie das Listenverständnis verwenden.

def CoolPara(letters):
  new = [i for i in text.split()]
  found = [i for i in new if letters in i]
  print(new) # Optional
  print('Word Count: ', len(new), '\nSpecial letter words: ', found, '\nOccurences: ', len(found))

CoolPara('f') # Pass your special characters through here

Dies gibt Ihnen:

['In', 'a', 'hole', 'in', 'the', 'ground', 'there', 'lived', 'a', 'hobbit.', 'Not',
 'a', 'nasty,', 'dirty,', 'wet', 'hole,', 'filled', 'with', 'the', 'ends', 'of',
'worms', 'and', 'an', 'oozy', 'smell,', 'no', 'yet', 'a', 'dry,', 'bare,', 'sandy',
'hole', 'with', 'nothing', 'in', 'it', 'to', 'sit', 'down', 'on', 'or', 'to', 'eat;',
'it', 'was', 'a', 'hobbit-hole,', 'and', 'that', 'means', 'comfort']
Word Count:  52
Special letter words:  ['filled', 'of', 'comfort']
Occurences:  3
Widerhaken
quelle
0
def rareChar(words):
rareWords = 0
rareChars = ['j', 'x', 'q', 'z']

#Split paragraph into words
words.split()
for word in words:
    #Split words into characters
    chars = word.split()
    for char in chars:
        if char in rareChars:
            rareWords = rareWords + 1
return rareWords

def CoolPara(words):
    #return value rather than printing
    return '{} word(s) with a rare character'.format(rareChar(words))


# DO NOT CHANGE CODE BELOW

print(CoolPara(input("Enter: ")))

Eingabe: Hallo, das ist ein Satz über Zoos

Ausgabe: 1 Wort (e) mit einem seltenen Zeichen

KILLtheWEEZEL
quelle
0

Der folgende Code ist eine Bearbeitung von Ihnen, die zur richtigen Antwort von führt 1

def main():

    def rareChar(words):
        rareWords = 0
        rareChars = ['j', 'x', 'q', 'z']

        all_words = list(words.split())

        for a_word in all_words:
            for char in a_word:
                if char in rareChars:
                    rareWords = rareWords + 1
        return rareWords

    def CoolPara(words):
        print(rareChar(words), 'word(s) with a rare character')


    # DO NOT CHANGE CODE BELOW

    print(CoolPara(input("Enter: ")))

main()

Antworten:

C:\Users\Jerry\Desktop>python Scraper.py
Enter: In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, no yet a dry, bare, sandy hole with nothing in it to sit down on or to eat; it was a hobbit-hole, and that means comfort.

1 word(s) with a rare character
wundermahn
quelle
0

Dieser Code funktioniert für Sie. Entfernen Sie die eingegebenen Wörter und notieren Sie die Zeichenfolgenanweisung, mit der ich den Code getestet habe.

Die para-Methode wird nicht benötigt.

def rareChar(words):
    rareWords = 0
    rareChars = ['j', 'x', 'q', 'z']
    for word in words:
        wds = word.split()
        for char in wds:
            if char in rareChars:
                rareWords = rareWords + 1
    return rareWords

words = 'john xray quebec zulu'
# words = (input("Enter: "))

x = rareChar(words)
print(f"There are {x} word(s) with a rare character")
VC Healy
quelle
0

Die von Barb bereitgestellte Lösung funktioniert für einen einzelnen Buchstaben:

CoolPara ('f')

Es funktioniert jedoch nicht mit mehreren Zeichen, wie vom Originalplakat gefordert. Zum Beispiel liefert dies nicht die richtigen Ergebnisse:

CoolPara ("jxqz")

Hier ist eine leicht verbesserte Version von Barbs Lösung:

def CoolPara(letters):
    new = [i for i in text.split()]
    found = list()
    for i in new:
        for x in i:
            for l in letters:
                if x == l:
                    found.append(i)
    print("Special letter words: ", found)
    print("word(s) with rare characters ", len(found))
Shantanuo
quelle