2024
Considere o seguinte programa:
import matplotlib.pyplot as plt
from collections import Counter
import string
def plot_frequency(string):
string = string.lower()
string = string.translate(str.maketrans('', '', string.punctuation + string.whitespace))
letter_counts = Counter(string)
sorted_letter_counts = sorted(letter_counts.items(), key=lambda x: x[1], reverse=True)
letters = [item[0] for item in sorted_letter_counts]
counts = [item[1] for item in sorted_letter_counts]
# Plotando o gráfico de barras
plt.bar(letters, counts)
plt.xlabel('Letras')
plt.ylabel('Frequência')
plt.title('Frequência de Letras (Ordenado)')
plt.show()
Eu recebi a seguinte mensagem de erro: “AttributeError: ‘str’ object has no attribute ‘punctuation’”
O erro ocorre porque a função punctuation não pertence diretamente a uma string. Ela é parte do módulo string, então você precisa acessá-la através do módulo. Para corrigir isso, você pode modificar a linha que usa punctuation da seguinte forma:
string = string.translate(str.maketrans('', '', string.punctuation + string.whitespace))
Para isso, você precisa importar o módulo string no início do seu código, juntamente com matplotlib e Counter:
import matplotlib.pyplot as plt
from collections import Counter
import string
Continuou dando o mesmo erro: ‘AttributeError: ’str’ object has no attribute ‘punctuation’’
Peço desculpas pela confusão anterior. O erro ocorre porque a variável string está sendo usada como o nome do parâmetro da função e também como o nome do módulo string, o que causa a confusão. Para corrigir isso, você pode renomear o parâmetro da função para algo diferente de string, como input_string, por exemplo. Aqui está o código corrigido:
import matplotlib.pyplot as plt
from collections import Counter
import string as str
def plot_frequency(input_string):
input_string = input_string.lower()
translator = str.maketrans('', '', str.punctuation + str.whitespace)
input_string = input_string.translate(translator)
....
O que aconteceu é que o parametro da função se chamada
string
e o pacote se chama string
e a função
usa string.punctuation + string.whitespace
Que
string
é esse? o parametro ou o pacote.
Veja que ele exagerou na solucao, trocou o nome do pacote para
str
e trocou o nome do parametro para
input_string
Mas isso nao funciona tambem.
Agora eu estou recebendo o erro “AttributeError: module ‘string’ has no attribute ‘maketrans’”
O erro ocorre porque o método maketrans não está sendo importado corretamente. Parece que há um conflito de nomes entre o módulo string e a função string utilizada no código. Para corrigir isso, você pode importar apenas a função maketrans do módulo str e utilizá-la diretamente. Aqui está o código corrigido:
import matplotlib.pyplot as plt
from collections import Counter
from string import punctuation, whitespace, maketrans
def plot_frequency(input_string):
input_string = input_string.lower()
translator = maketrans('', '', punctuation + whitespace)
input_string = input_string.translate(translator)
...
agora estou recebendo o erro “ImportError: cannot import name ‘maketrans’ from ‘string’”
Peço desculpas pela confusão anterior. Parece que houve um erro na minha explicação. O método maketrans não está mais disponível no módulo string no Python 3. Em vez disso, você pode usar a função str.maketrans para criar a tabela de tradução. Aqui está o código corrigido:
import matplotlib.pyplot as plt
from collections import Counter
import string
def plot_frequency(input_string):
input_string = input_string.lower()
translator = str.maketrans('', '', string.punctuation + string.whitespace)
input_string = input_string.translate(translator)
...
Agora funcionou
Escreva uma funcao que dado o tipo sanguineo do pai, da mae e de uma crianca, retorna True se o a crianca pode ser filho do casal tendo em vista o tipo sanguineo
pode dar ou nao certo