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


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.