[python] 목록에서 특정 문자 찾기

목표는 사용자의 단락에서 목록을 작성하고 반복하여 특수 문자 “j, x, q, z”를 포함하는 단어 수를 셀 수 있습니다.

입력 예 :
땅에있는 구멍에 호빗이있었습니다. 불결하고 더럽고 젖은 구멍이 아니며 벌레의 끝과 oozy 한 냄새로 가득 차 있지 않으며 아직 앉아 있거나 먹을 모래가없는 마른 모래 알 구멍이 없습니다. 그것은 호빗 구멍이었고, 그것은 위로를 의미합니다.

예제 출력 :
희귀 문자가있는 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 ()의 메소드 / 함수 만 사용할 수 있습니다



답변

어쩌면 이것은 파이썬 기능을 소개 할 수있는 기회 일 수 있습니다.

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 스타일 가이드를 사용하여 파이썬 세계에서 가장 일반적인 관례 인 함수의 이름을 지정했습니다.
  6. 마지막으로 주석 대신 코드 아래 에서 함수 호출의 결과를 인쇄 하기 때문에 인쇄하는 대신 함수 str에서 a 를 반환했습니다 .cool_para# DO NOT CHANGE CODE BELOW

답변

이상적으로는 목록 이해를 사용하고 싶습니다.

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


답변

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 개


답변

다음 코드는 귀하의 코드를 수정 한 것입니다. 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


답변

이 코드는 당신을 위해 작동합니다. 입력 한 단어의 주석을 지우고 코드를 테스트하는 데 사용한 단어 문자열 문을 주목하십시오.

파라 방법은 필요하지 않습니다.

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


답변

Barb이 제공하는 솔루션은 단일 문자로 작동합니다.

쿨 파라 ( ‘f’)

그러나 원래 포스터의 요청에 따라 여러 문자로 작동하지 않습니다. 예를 들어 올바른 결과를 반환하지 않습니다.

CoolPara ( “jxqz”)

다음은 약간 개선 된 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))


답변