Пошук конкретних символів у списку


11

Мета - скласти список із абзацу користувача та повторити його, щоб я міг порахувати, скільки слів містять спеціальні літери "j, x, q, z".

Приклад введення:
У норі в землі жив хобіт. Не бридкий, брудний, вологий отвір, наповнений кінцями черв’яків і пожовклим запахом, а ще не сухий, голий, піщаний отвір, в якому немає нічого сідати або їсти; це був отвір хобіта, а це означає комфорт.

Приклад виведення: 1 слово з рідкісним символом

Я запустив код, коли я розбиваю абзац користувача на список, але мені важко перебирати список і знаходити кожен екземпляр спеціальних літер.

Ось що я маю досі:

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: ")))

Якщо я запускаю з прикладу введення, я отримую висновок "0 слів із рідкісним символом". Як я можу це виправити, щоб отримати очікуваний результат. Будь-яка допомога буде дуже вдячна, оскільки я все ще відносно новий в кодуванні

Також швидка примітка: мені дозволяється використовувати лише методи / функції split () та Len ()


.indexповинні виконати роботу
bigbounty

Вам слід пройти через висновок та додати деякі заяви про друк, щоб переконатися, що твердження та умовні умови виконуються.
Fallenreaper

друкарські помилки. не повинна лінія над внутрішньою петлею бути wds = astring.split ()
abhilb

Яка мета for astring in words:?
norok2

З імен змінних я думаю, що ви плутаєтесь. Змініть "для астрингу в словах:" на "для слова в словах.split ():". Потім "для char в wds:" для для char в слові: ". І видаліть" wds = words.split () ".
kantal

Відповіді:


4

Можливо, це може бути можливістю ознайомити вас з деякими можливостями пітона:

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"

Ця відповідь використовує:

  1. вводити текст , який може використовуватися сторонніми інструментами, такими як шашки типу, IDE, лінери, але що ще важливіше, щоб зрозуміти ваші наміри іншим людям, які можуть читати ваш код.
  2. аргументи за замовчуванням , замість жорсткого кодування їх всередині функції. Дуже важливо документувати свої функції, щоб користувач не був здивований результатом (див. Принцип найменшого здивування ). Звичайно, існують інші способи документування коду (див. Docstrings ) та інші способи проектування цього інтерфейсу ( наприклад, клас ), але це лише для демонстрації суті.
  3. Перелічіть розуміння , які можуть зробити ваш код більш читабельним, зробивши його більш декларативним, а не імперативним . Визначити наміри, що стоять за імперативними алгоритмами, може бути важко.
  4. інтерполяція рядків , яка, на мій досвід, менш схильна до помилок, ніж об'єднання.
  5. Я використав посібник зі стилю pep8, щоб назвати функції, що є найпоширенішою умовою в світі python.
  6. Нарешті, замість друку я повернувся через strу cool_paraфункції , так як код нижче # DO NOT CHANGE CODE BELOWкоментаря друкує результат виклику функції.

1
Одна з найкращих реалізацій, яку я бачив досі. Не може бути більше пітонічним. :-) Я б просто перейменувати rare_chars()в find_rare_words()замість цього.
аккід

1

В ідеалі ви хочете використовувати розуміння списку.

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

Це дає вам:

['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

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: ")))

Вхід: Привіт, це речення про зоопарки

Вихід: 1 слово (слова) з рідкісним символом


0

Наступний код - це Ваша редакція, що призводить до правильної відповіді 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()

Відповідь:

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

0

Цей код буде працювати для вас. Відмітьте відмітку від слова, що вводиться, та зауважте, що висловлюєте рядок слів, які використовували для тестування коду.

Пара-метод не потрібен.

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")

0

Рішення, яке надає Барб, працює для однієї літери:

CoolPara ('f')

Але це не працює з мультиплексними символами, як запитує оригінальний плакат. Наприклад, наприклад, це не повертає правильних результатів:

CoolPara ("jxqz")

Ось дещо вдосконалена версія рішення Барба:

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))
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.