overRider Postado Dezembro 4, 2014 Denunciar Share Postado Dezembro 4, 2014 Alguém pode me ajudar? Sou novo com Python e estou praticando pelo Codecademy, mas cheguei em um exercício que não consigo resolver. o código é o seguinte: lloyd = { "name": "Lloyd", "homework": [90.0, 97.0, 75.0, 92.0], "quizzes": [88.0, 40.0, 94.0], "tests": [75.0, 90.0] } alice = { "name": "Alice", "homework": [100.0, 92.0, 98.0, 100.0], "quizzes": [82.0, 83.0, 91.0], "tests": [89.0, 97.0] } tyler = { "name": "Tyler", "homework": [0.0, 87.0, 75.0, 22.0], "quizzes": [0.0, 75.0, 78.0], "tests": [100.0, 100.0] } classe = ["lloyd", "alice", "tyler"] def average(numbers): total = sum(numbers) total = float(total) total = total / len(numbers) return total def get_average(student): homework = average("homework"[student]) quizzes = average("quizzes"[student]) tests = average("tests"[student]) total = homework * 0.10 + quizzes * 0.30 + tests * 0.60 return total def get_letter_grade(score): if score >= 90: return "A" elif score >= 80: return "B" elif score >= 70: return "C" elif score >= 60: return "D" else: return "F" def get_class_average(students): results = [] for student in classe: get_average(student) results = results.append() results = average(results) return results Ele me retorna o seguinte erro: get_class_average([alice]) resultou em um erro: string indices must be integers, not str alguém pode me ajudar? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ArteEN Postado Dezembro 14, 2014 Denunciar Share Postado Dezembro 14, 2014 Ola overRider já conseguiu resolver o problema com o script? bom, vou relatar as coisas que eu vi. 1- a lista classe foi feita com tres strings, ela deveria ser feita com os tres dicionarios: classe = [lloyd, alice, tyler] 2- a função get_class_average(students) pede students, e esta variável não é usada no corpo da função. Isso não atrapalha a execução do código aqui em casa, mas mata a reutilização da função, pois o for usa a lista classe mas era para ser a lista students ainda nesta função temos a função get_average(student) sem proposito, pois os dados de saída não estão sendo guardados para uso posterior. results = results.append() vai retornar um erro, pois .append() precisa de argumento results = average(results) é uma execução desnecessária, pois average() já foi chamada em get_average(student). recomendo a solução #Este for não esta edentado na função, foi uma falha durante a postagem da duvida? for student in students: results.append(get_average(student)) o return results pode ficar fora do for 3- em get_average(student) usa incorretamente a saida do dicionario codigo original - homework = average("homework"[student]) codigo corrigido - homework = average(student["homework"]) ### com isso o seu codigo deve funcionar Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
overRider
Alguém pode me ajudar? Sou novo com Python e estou praticando pelo Codecademy, mas cheguei em um exercício que não consigo resolver. o código é o seguinte:
lloyd = {
"name": "Lloyd",
"homework": [90.0, 97.0, 75.0, 92.0],
"quizzes": [88.0, 40.0, 94.0],
"tests": [75.0, 90.0]
}
alice = {
"name": "Alice",
"homework": [100.0, 92.0, 98.0, 100.0],
"quizzes": [82.0, 83.0, 91.0],
"tests": [89.0, 97.0]
}
tyler = {
"name": "Tyler",
"homework": [0.0, 87.0, 75.0, 22.0],
"quizzes": [0.0, 75.0, 78.0],
"tests": [100.0, 100.0]
}
classe = ["lloyd", "alice", "tyler"]
def average(numbers):
total = sum(numbers)
total = float(total)
total = total / len(numbers)
return total
def get_average(student):
homework = average("homework"[student])
quizzes = average("quizzes"[student])
tests = average("tests"[student])
total = homework * 0.10 + quizzes * 0.30 + tests * 0.60
return total
def get_letter_grade(score):
if score >= 90:
return "A"
elif score >= 80:
return "B"
elif score >= 70:
return "C"
elif score >= 60:
return "D"
else:
return "F"
def get_class_average(students):
results = []
for student in classe:
get_average(student)
results = results.append()
results = average(results)
return results
Ele me retorna o seguinte erro:
get_class_average([alice]) resultou em um erro: string indices must be integers, not str
alguém pode me ajudar?
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.