Listedeki belirli karakterleri bulma


11

Amaç, kullanıcının paragrafından bir liste yapmak ve yineleme yapmaktır, böylece kaç kelime "j, x, q, z" içerdiğini sayabilirim.

Örnek girdi:
Yerdeki bir delikte bir hobbit yaşadı. Solucanların uçları ve sızma kokusu ile dolu kötü, kirli, ıslak bir delik değil, oturmak veya yemek için hiçbir şey olmayan kuru, çıplak, kumlu bir delik; bir hobbit deliğiydi ve bu rahatlık anlamına geliyor.

Örnek çıktı: Nadir karakterli 1 kelime

Ben bir liste içine kullanıcının paragrafını kırmak kodu başladı ama liste üzerinden yineleme ve özel harflerin her örneğini bulmakta zorlanıyorum.

Şimdiye kadar sahip olduğum şey bu:

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

Örnek girdi ile çalıştırırsam, 'nadir karakterli 0 sözcük (ler) çıktısı alıyorum. Beklenen çıktıyı alabilmem için bunu nasıl düzeltebilirim. Hala kodlama konusunda nispeten yeni olduğum için herhangi bir yardım çok takdir edilecektir

Ayrıca hızlı bir not: Yalnızca split () ve Len () yöntemlerini / işlevlerini kullanmama izin verildi


.indexişi yapmalı
bigbounty

İfadelerin ve koşulların yerine getirildiğinden emin olmak için çıktıyı gözden geçirmeli ve bazı basılı ifadeler eklemelisiniz.
Fallenreaper

yazım hatası. iç döngünün üstündeki çizgi wds = astring.split ()
abhilb

Amaç nedir for astring in words:?
norok2

Değişken isimlerinden bence kafan karıştı. Kelimelerde büzülme için ": words.split ():" içindeki kelime için "olarak" değiştirin. Sonra "wds içinde char için:" için kelime içinde char için: ". Ve silmek" wds = words.split () ".
kantal

Yanıtlar:


4

Belki bu sizi bazı python özelliklerine tanıtmak için bir fırsat olabilir:

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"

Bu cevap şunları kullanır:

  1. tip denetleyicileri, IDE'ler, linterler gibi üçüncü taraf araçlar tarafından kullanılabilen, ancak daha da önemlisi, kodunuzu okuyan diğer insanlara niyetlerinizi netleştirmek için yazarak .
  2. varsayılan bağımsız değişkenler , bunları işlev içinde sabit kodlamak yerine. İşlevlerinizi belgelemek çok önemlidir, böylece bir kullanıcı sonuçtan şaşırmaz (bkz. . En Az Şaşkınlık İlkesi ). Elbette kodunuzu belgelemenin başka yolları da vardır ( docstrings'e bakınız ) ve bu arayüzü tasarlamanın başka yolları da vardır ( örneğin bir sınıf olabilir ), ama bu sadece noktayı göstermek içindir.
  3. Kodunuzu zorunlu yapmak yerine daha bildirimsel hale getirerek daha okunabilir hale getirebilecek kavrayışları listeleyin . Zorunlu algoritmaların arkasındaki niyeti belirlemek zor olabilir.
  4. benim deneyime göre birleştirme daha az hata eğilimli dize enterpolasyon .
  5. Kullandım Python dünyasındaki en yaygın kongre olan fonksiyonları adlandırmak pep8 stil kılavuzunu kullandım.
  6. Yerine baskı En sonunda, bir iade striçinde cool_paraaşağıdaki kod çünkü işlevi # DO NOT CHANGE CODE BELOWcomment işlevi çağrısının sonucunu yazdırıyor.

1
Şimdiye kadar gördüğüm en iyi uygulamalardan biri. Daha Pitonik olamazdı. :-) Sadece adlandırmak istiyorum rare_chars()için find_rare_words()yerine.
accdias

1

İdeal olarak liste kavrayışını kullanmak istersiniz.

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

Bu size şunları sağlar:

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

Girdi: Merhaba bu hayvanat bahçeleri hakkında bir cümle

Çıktı: Nadir karakterli 1 kelime


0

Aşağıdaki kod, sizin 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()

Cevap:

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

Bu kod sizin için çalışacaktır. Girdi sözcüklerinin işaretini kaldırın ve kodu sınamak için kullandığım string dizisini ifade edin.

Para yöntemine gerek yoktur.

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

Barb tarafından sağlanan çözüm tek bir mektup için çalışır:

CoolPara ( 'f')

Ancak orijinal posterin istediği gibi basit karakterlerle çalışmaz. Örneğin, bu doğru sonuçları döndürmez:

CoolPara ( "jxqz")

İşte Barb'ın çözümünün biraz geliştirilmiş versiyonu:

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))
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.