Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Erro ao tentar o gráfico no Matplolib

Eu tentei fazer um teste, e não estou entendendo o motivo do erro, podem me ajudar:

primeiro determinei as notas:

#importação das funções randrange e seed
from random import randrange, seed

#criação de função para imprimir as notas aleatórias e os nomes
def impressao_notas():

  #criação de lista vazia para receber as notas aleatórias
  notas_portugues = []

  #criação de variável com função de entrada para receber o nome do aluno
  nome_aluno = input('Digite o nome do aluno: ')

  #chamada a função seed para poder sempre pegar os mesmos valores
  seed(11)

  #criação de loop for para pegar as notas aleatórias e inserir na lista vazia
  for notas in range(8):
    notas_portugues.append(randrange(0,11))

  #impressão de nome dos alunos junto com as notas
  print(f'O aluno {nome_aluno} teve as seguintes notas: {notas_matematica}')

#chamada a função impressao_notas
impressao_notas()

depois fiz a função do gráfico:

import matplotlib.pyplot as plt

x = list(range(1, 9))
y = notas_portugues

plt.plot(x, y, marker='o')
plt.title('Notas de Portugues')
plt.xlabel('Provas')
plt.ylabel('Notas')
plt.show()

mas ocorreu o seguinte erro:


NameError Traceback (most recent call last) in 2 3 x = list(range(1, 9)) ----> 4 y = notas_portugues 5 6 plt.plot(x, y, marker='o')

NameError: name 'notas_portugues' is not defined

  • porque isso ocorre?
2 respostas
solução!

Olá Thiago, tudo bem? Espero que sim!

A lista notas_porgues é um elemento criado dentro do escopo da função, portanto ao executar a função por si só ele não é conhecido globalmente e não consegue ser utilizado.

Para poder utilizá-lo globalmente, utilize a cláusula return para retornar essa lista e poder utilizá-la externamente, dessa forma:

#importação das funções randrange e seed
from random import randrange, seed

#criação de função para imprimir as notas aleatórias e os nomes
def impressao_notas():

  #criação de lista vazia para receber as notas aleatórias
  notas_portugues = []

  #criação de variável com função de entrada para receber o nome do aluno
  nome_aluno = input('Digite o nome do aluno: ')

  #chamada a função seed para poder sempre pegar os mesmos valores
  seed(11)

  #criação de loop for para pegar as notas aleatórias e inserir na lista vazia
  for notas in range(8):
    notas_portugues.append(randrange(0,11))

  #impressão de nome dos alunos junto com as notas
  print(f'O aluno {nome_aluno} teve as seguintes notas: {notas_matematica}')

  return notas_portugues

#chamada a função impressao_notas
notas_pt = impressao_notas()

No momento de iniciar a função, devemos armazenar em uma variável o retorno. Essa variável pode conter um nome diferente da lista que está dentro do escopo da função. Depois, basta utilizar essa variável no momento de plotar o gráfico:

import matplotlib.pyplot as plt

x = list(range(1, 9))
y = notas_pt

plt.plot(x, y, marker='o')
plt.title('Notas de Portugues')
plt.xlabel('Provas')
plt.ylabel('Notas')
plt.show()

Bons estudos!

Obrigado, ajudou muito.