Menemukan karakter tertentu dalam daftar

11

Tujuannya adalah untuk membuat daftar dari paragraf pengguna dan iterasi sehingga saya dapat menghitung berapa banyak kata yang mengandung huruf khusus "j, x, q, z".

Contoh input:
Di sebuah lubang di tanah, hiduplah seorang hobbit. Bukan lubang yang kotor, kotor, basah, penuh dengan ujung-ujung cacing dan bau oozy, belum juga lubang kering, telanjang, berpasir yang tidak ada apa-apa untuk diduduki atau dimakan; itu adalah lubang hobbit, dan itu berarti kenyamanan.

Contoh output: 1 kata dengan karakter langka

Saya telah memulai kode tempat saya memecah paragraf pengguna ke dalam daftar, tetapi saya mengalami kesulitan untuk mengulangi daftar dan menemukan setiap contoh dari surat-surat khusus.

Inilah yang saya miliki sejauh ini:

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

Jika saya menjalankan dengan input contoh, saya mendapatkan output '0 kata (s) dengan karakter langka'. Bagaimana saya bisa memperbaikinya sehingga saya bisa mendapatkan hasil yang diharapkan. Setiap bantuan akan sangat dihargai karena saya masih relatif baru dalam pengkodean

Juga catatan singkat: Saya hanya diperbolehkan menggunakan metode / fungsi split () dan Len ()

yariee
sumber
.indexharus melakukan pekerjaan
bigbounty
Anda harus menelusuri output dan menambahkan beberapa pernyataan cetak untuk memastikan pernyataan dan persyaratan terpenuhi.
Fallenreaper
salah ketik. seharusnya garis di atas lingkaran dalam tidak boleh wds = astring.split ()
abhilb
Apa tujuannya for astring in words:?
norok2
Dari nama variabel saya pikir Anda bingung. Ubah "untuk astring dalam kata-kata:" menjadi "untuk kata dalam words.split ():". Lalu "for char in wds:" to for char in word: ". Dan hapus" wds = words.split () ".
kantal

Jawaban:

4

Mungkin ini bisa menjadi kesempatan untuk memperkenalkan Anda ke beberapa fitur python:

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"

Jawaban ini menggunakan:

  1. mengetik , yang dapat digunakan oleh alat pihak ketiga seperti jenis checker, IDE, linter, tetapi yang lebih penting untuk memperjelas niat Anda kepada manusia lain yang mungkin membaca kode Anda.
  2. argumen default , alih-alih hardcoding di dalam fungsi. Sangat penting untuk mendokumentasikan fungsi-fungsi Anda, sehingga pengguna tidak akan terkejut dengan hasilnya (lihat Prinsip Keterbatasan Terkecil ). Ada cara tentu saja lain mendokumentasikan kode Anda (lihat docstrings ) dan cara-cara lainnya merancang antarmuka yang (bisa menjadi kelas misalnya), tapi ini hanya untuk menunjukkan titik.
  3. Daftar pemahaman , yang dapat membuat kode Anda lebih mudah dibaca dengan membuatnya lebih deklaratif daripada penting . Mungkin sulit untuk menentukan niat di balik algoritma imperatif.
  4. interpolasi string , yang menurut pengalaman saya lebih sedikit rawan kesalahan daripada penggabungan.
  5. Saya menggunakan panduan gaya pep8 untuk memberi nama fungsi, yang merupakan konvensi paling umum di dunia python.
  6. Akhirnya, bukannya mencetak Aku kembali strdi cool_parafungsi karena kode di bawah # DO NOT CHANGE CODE BELOWkomentar mencetak hasil dari pemanggilan fungsi.
Marcus Vinícius Monteiro
sumber
1
Salah satu implementasi terbaik yang pernah saya lihat sejauh ini. Tidak mungkin lebih Pythonic. :-) Saya hanya akan mengganti nama rare_chars()menjadi find_rare_words().
Accdias
1

Idealnya Anda ingin menggunakan pemahaman daftar.

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

Ini memberi Anda:

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

Input: Halo ini adalah kalimat tentang kebun binatang

Output: 1 kata dengan karakter yang langka

KILLtheWEEZEL
sumber
0

Kode berikut adalah hasil edit Anda yang menghasilkan jawaban yang tepat 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()

Menjawab:

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
sumber
0

Kode ini akan bekerja untuk Anda. Hapus tanda komentar kata-kata dan berikan pernyataan string kata-kata yang saya gunakan untuk menguji kode.

Metode para tidak diperlukan.

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
sumber
0

Solusi yang diberikan oleh Barb bekerja untuk satu huruf:

CoolPara ('f')

Tapi itu tidak bekerja dengan karakter mulitple seperti yang diminta oleh poster aslinya. Untuk mis. Ini tidak mengembalikan hasil yang benar:

CoolPara ("jxqz")

Ini adalah versi yang sedikit lebih baik dari solusi Barb:

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
sumber