Ajuda com objects em Python

Oi, pessoal! Estou cursando Python em uma plataforma chamada Cognitive Class, mas estou em dúvida sobre um código envolvendo objects.

Alguém topa dar uma ajuda? Uma chamada no meets, talvez.

PS: não sei se esse é o lugar certo pra recorrer a uma ajuda do tipo, mas se alguém estiver disponível pra dar umas dicas, tudo bem :smiley:

1 Curtida

Acho que seria melhor se vc pudesse colar aqui a parte do código que te deixou com dúvida, pra que a gente possa te dar uma resposta mais certeira. Pode ser de qualquer jeito mesmo, o que for melhor pra vc

Oi Leonardo.

O código faz parte uma lição que utiliza objects. Vou tentar colocar uma prévia aqui:

ou have been recruited by your friend, a linguistics enthusiast, to create a utility tool that can perform analysis on a given piece of text. Complete the class ‘analysedText’ with the following methods -

  • Constructor - Takes argument ‘text’,makes it lower case and removes all punctuation. Assume only the following punctuation is used - period (.), exclamation mark (!), comma (,) and question mark (?). Store the argument in “fmtText”
  • freqAll - returns a dictionary of all unique words in the text along with the number of their occurences.
  • freqOf - returns the frequency of the word passed in argument.

The skeleton code has been given to you. Docstrings can be ignored for the purpose of the exercise.
Hint: Some useful functions are replace(), lower(), split(), count()

Essa é a parte que vem logo em seguida pra ser editada; eu já fiz algumas alterações:

class analysedText(object):

def __init__ (self, text):
    pass self.lower(text)
    fmtText=text
    return fmtText

def freqAll(self):        
    pass stext=self.split(text)

    for k in stext:
        count(stext)
        return k
    



def freqOf(self,word):
    word=text
    pass 
word.count()
if

Se vc estiver falando sobre o termo object, que aparece herdado dentro da declaração da classe analysedText, a resposta é simples: em Python 2.x, vc ganhava algumas ferramentas adicionais pra customizar a sua classe, enquanto em Python 3.x, não faz diferença alguma declarar class analysedText ou class analysedText(object).

Caso não seja essa a sua dúvida, pode me escrever. Meu contato é [email protected]. Me manda uma mensagem por lá e a gente pode marcar um meet pra que eu possa te ajudar melhor!

1 Curtida

Valeu, Leo

Eu to perdido com esse pass do código. Não lembro de ter visto isso nos vídeos do curso, mas vou tentar te contatar. Talvez eu não tenha tempo no fim de semana, mas depois eu abro um meet contigo.

Abçs.

Eu fiquei meio bitolado na história do objects que perdi a noção do resto do código haha. Vc tem razão em não entender esses pass, pq essa sintaxe está errada mesmo. O pass indica que o Python realmente não deve fazer nada quando determinada condição se apresenta. No nosso caso aqui, não temos necessidade de utilizar o pass em nenhum dos métodos.

De acordo com o enunciado, o código faria sentido pra mim da seguinte forma:

  class analysedText(object):
    def __init__(self, text: str):
        # Atribui o texto a um objeto dentro da classe, converte string para
        # caixa-baixa e depois remove toda a pontuaçao, como pede o exercício.
        self.fmtText = (
            text.lower()
            .replace(".", "")
            .replace("!", "")
            .replace(",", "")
            .replace("?", "")
        )

        # Daria pra fazer de um jeito mais prático e eficiente também, utilizando
        # o `translate`, também método da classe `str`. Estamos dizendo que todas
        # as pontuações encontradas no texto devem ser traduzidas para "" basicamente.
        # O pacote `string`, natural do Python, compila pra gente todas as pontuações em
        # `string.punctuation`.
        #
        # >> self.fmtText = text.lower().translate(str.maketrans("", "", string.punctuation))

    def freqAll(self):
        # Separamos todas as palavras do nosso objeto principal
        stext = self.fmtText.split()

        # Inicializamos um dicionário com as keys sendo as palavras únicas
        # encontradas no texto e todos os valores sendo 0. A funçao `set`
        # vai tratar de achar tudo o que é único na nossa lista de palavras criando
        # um objeto do tipo `set`.
        freq = dict.fromkeys(set(stext), 0)

        # Iteramos a lista de palavras e a cada iteraçao contamos 1 à key
        # correspondente à palavra no dicionário
        for k in stext:
            freq[k] += 1

        return freq

    def freqAll2(self):
        # Esse seria um aproach mais didático: splitaríamos o texto, criaríamos
        # um dicionário vazio e depois, a cada iteração de palavras, perguntaríamos
        # ao dicionário se a key da palavra já existe. Caso exista, somamos um.
        # Caso não, criamos ela com o valor de 1 contagem e pedimos ao Python para
        # que passe para próxima iteração com o `continue`, já que a contagem já foi feita.
        stext = self.fmtText.split()

        freq = {}

        for k in stext:
            if k not in freq.keys():
                freq[k] = 1
                continue

            freq[k] += 1

        return freq

    def freqOf(self, word):
        # `count` é um método da classe `str` e vai identificar dentro da string
        # quantas vezes determinada palavra apareceu, o que facilita muito a vida
        return self.fmtText.count(word)

Qualquer dúvida estou à disposição!

1 Curtida

Oi, Leonardo. Muito grato pela ajuda, o código rodou com êxito. Talvez eu te contate por email se bater mais alguma dúvida.

Estou aprendendo Python porque quero utilizar a linguagem em análise de dados, futuramente. Tem alguma dica de como praticar? Fiz um curso ano passado, mas acabei ficando “enferrujado”, sem ter mais usado Python.

Valeu! Abçs.