uaveiro-leci/1ano/1semestre/fp/aula09/tabelaFutebol.py

86 lines
2.8 KiB
Python

# Tabela classificativa da Primeira Liga de futebol de Portugal em 2018-11-30.
# (Descarregada de https://www.resultados.com/futebol/portugal/primeira-liga/)
tabela = [
("Rio Ave", 5, 3, 2, 17, 13),
("Tondela", 2, 3, 5, 12, 14),
("Moreirense", 5, 1, 4, 11, 14),
("Feirense", 2, 3, 5, 7, 11),
("Maritimo", 3, 1, 6, 6, 13),
("Benfica", 6, 2, 2, 19, 11),
("Setubal", 4, 2, 4, 13, 11),
("Portimonense", 3, 2, 5, 12, 18),
("Guimaraes", 4, 3, 3, 15, 12),
("Boavista", 2, 3, 5, 8, 14),
("Nacional", 2, 3, 5, 10, 19),
("Belenenses", 2, 6, 2, 7, 8),
("Santa Clara", 4, 2, 4, 17, 16),
("FC Porto", 8, 0, 2, 21, 6),
("Braga", 6, 3, 1, 19, 10),
("Sporting", 7, 1, 2, 18, 10),
("Aves", 3, 1, 6, 11, 15),
("Chaves", 2, 1, 7, 9, 17)
]
# Cada registo na tabela classificativa contém:
# Nome, Vitórias, Empates, Derrotas, Golos Marcados e Golos Sofridos
# Pode usar estes identificadores para os campos:
N, V, E, D, GM, GS = 0, 1, 2, 3, 4, 5
def printTabela(tabela):
print()
print("{:19s} {:>3} {:>3} {:>3} {:>3} {:>3}:{:<3} {:>3}".format(
"Equipa", "J", "V", "E", "D", "GM", "GS", "P"))
for reg in tabela:
nome,v,e,d,gm,gs = reg
print("{:19s} {:3d} {:3d} {:3d} {:3d} {:3d}:{:<3d} {:3d}".format(
nome, numJogos(reg), v, e, d, gm, gs, pontos(reg)))
# numJogos é uma função definida por uma expressão lambda que,
# dado um registo de uma equipa, devolve o número de jogos que a equipa jogou.
numJogos = lambda reg: reg[V]+reg[E]+reg[D]
# a)
# Complete a expressão lambda para definir uma função que,
# dado um registo de uma equipa, devolva o número de pontos da equipa.
# (Cada vitória vale 3 pontos, cada empate vale 1 ponto.)
pontos = lambda reg: reg[V]*3+reg[E]
def main():
# Teste:
print(tabela[3][N], numJogos(tabela[3])) # Feirense 10?
print(tabela[-1][N], pontos(tabela[-1])) # Chaves 7?
# Mostra a tabela classificativa original, não ordenada:
printTabela(tabela)
# b)
# Acrescente os argumentos adequados à função sorted para
# obter uma tabela ordenada por ordem decrescente de pontos:
tab = sorted(tabela, key=pontos, reverse=True)
printTabela(tab)
# c)
# Acrescente os argumentos adequados à função sorted para
# obter uma tabela ordenada por ordem decrescente da diferença GM-GS:
tab = sorted(tabela, key=lambda reg: reg[GM]-reg[GS], reverse=True)
printTabela(tab)
# d)
# Acrescente os argumentos adequados à função sorted para
# obter uma tabela ordenada por ordem decrescente de pontos e,
# se iguais, por ordem da diferença GM-GS:
tab = sorted(tabela, key=lambda reg: (pontos(reg), reg[GM]-reg[GS]), reverse=True)
printTabela(tab)
if __name__ == "__main__":
main()