Entrega da matéria Computational Thinking with Python para a primeira Sprint da CHALLENGE.
RM: 556785 // Carlos Eduardo dos Santos Ribeiro Filho
RM: 555530 // Djalma Moreira de Andrade Filho
RM: 558447 // Felipe Paes de Barros Muller Carioba
RM: 556506 // Nicolas Caciolato Reis
RM: 554736 // Rafael Federici de Oliveira
Este projeto refere-se ao site desenvolvido com o objetivo de popularizar e mostrar, de melhor forma, o que é a Fórmula-E no Brasil. A percepção de que a Fórmula-E é apenas uma divisão secundária da Fórmula 1 deve deixar de existir e, é com este pensamento, que desenvolvemos nosso site para uma percepção mais agradável do público em relação ao esporte de automobilismo elétrico fórmula. Focamos em não desvincular totalmente a fórmula E dos veículos à combustão, mas sim, mostrar as semelhanças e comparações sutis entre ambos. (Inclusive, tal ato pode ser visto na propaganda do EP de Tokyo de 2024, que chamaram Sung Kang, ator do Han, de Velozes e Furiosos, para gravar um comercial com diversos veículos à combustão personalizados e customizados. Tal propaganda possuía o intuito de promover a Fórmula E com sua estética e vincular a Fórmula E com corridas de rua). Utilizaremos de um site intuitivo, customizável e imersivo para um melhor agrado do usuário. Com isto, traremos comparações com a Fórmula 1 sobre estatísticas, tempo de volta, velocidade, entre outros. Decidimos que, focar em estética, vínculo com corridas em cenários de rua, tecnologia e acessibilidade, seria o ideal para a popularização da Fórmula E no Brasil, visto que, o brasileiro se interessa por esses quatro pontos.
Este projeto consiste em um simulador de corridas da fórmula E. Ele simula um grid de largada com os pilotos disponíveis, possibilita torcida e apostas, simula ultrapassagens e quando a simulação se encerra, o programa verifica se o piloto vencedor é o mesmo escolhido pelo usuário, e se o mesmo fez alguma aposta para calcular seu retorno ou prejuízo. Após todo este processo o programa pergunta se o usuário deseja simular a corrida novamente e participar de toda essa nova aventura denovo.
- Instalar uma IDE ou Editor de Código (PyCharm ou Visual Studio Code) em seu computador.
- Instalar Python em seu computador.
- Abrir estre projeto no aplicativo escolhido.
- Abrir este projeto em uma IDE ou Editor de Código.
- Compilar e 'rodar' o código.
- Seguir as intruções qua aparecerão no console do programa.
import random
import time
pilotos = ["Sergio Camara", "Lucas di Grassi", "Norman Nato", "Sébastien Buemi", 'Sam Bird', 'Stoffel Vandoorne']
creditos = 100
def checarNumero(msg):
num = input(msg)
while not num.isnumeric():
num = input(msg)
return int(num)
def definir_posicoes_de_largada(pilotos):
posicoes_largada = pilotos[:]
random.shuffle(posicoes_largada)
return posicoes_largada
def simular_corrida(pilotos, voltas=10):
posicoes = pilotos[:]
for volta in range(1, voltas + 1):
print(f"\nVolta {volta}")
for i in range(len(posicoes)):
if i > 0 and random.random() < 0.3:
posicoes[i], posicoes[i - 1] = posicoes[i - 1], posicoes[i]
print("Posições:", posicoes)
time.sleep(1)
return posicoes
def calcular_ganho(posicao_largada, aposta):
return int(aposta * (len(pilotos) / (posicao_largada + 1)))
def corrida_formula_e():
# Função que inicia a simulação da corrida
global creditos
while True:
# Este loop existe para que no final o usuário possa escolher simular de novo
print("Início da corrida de Fórmula E")
posicoes_largada = definir_posicoes_de_largada(pilotos)
print("\nPosições de Largada:")
for i, piloto in enumerate(posicoes_largada):
# For que enumera as posições dos pilotos
print(f"{i + 1}. {piloto}")
escolha = checarNumero("Escolha um piloto para torcer (número): ")
while not (1 <= escolha <= len(pilotos)):
# While que garante que o usuário escolha um corredor válido
print('Digite um número válido do piloto')
escolha = checarNumero("Escolha um piloto para torcer (número): ")
escolha -= 1
piloto_escolhido = posicoes_largada[escolha]
print(f"Você escolheu: {piloto_escolhido}")
print(f"Você tem {creditos} créditos disponíveis.")
aposta = 0
if creditos > 0:
# Verifica se o usuário possui créditos para poder apostar
aposta_opcional = input("Você quer apostar? (s/n): ").lower()
while aposta_opcional != 's' and aposta_opcional != 'n':
# Verifica se o usuário da uma resposta de sim ou não válida
print('Por favor digite "s" ou "n"')
aposta_opcional = input("Você quer apostar? (s/n): ").lower()
if aposta_opcional == 's':
# Se a aposta for sim o programa pede o valor
aposta = checarNumero("Digite o valor da aposta: ")
while aposta <= 0 or aposta > creditos:
# Verifica se a aposta tem um valor válido
if aposta <= 0:
print('Digite um valor de aposta válido')
else:
print(f'Você não pode apostar mais do que seus créditos disponíveis ({creditos}).')
aposta = checarNumero("Digite o valor da aposta: ")
print(f"Você apostou {aposta} no {piloto_escolhido}")
else:
print("Você não tem créditos suficientes para apostar. A corrida será simulada sem apostas.")
posicoes_finais = simular_corrida(posicoes_largada)
print("\nPosições Finais:", posicoes_finais)
vencedor = posicoes_finais[0]
print(f"\nO vencedor da corrida é: {vencedor}")
if vencedor == piloto_escolhido:
# Verifica se o piloto escolhido pelo usuário é o mesmo que ganhou a corrida
if aposta > 0:
# Se o usuário apostou e ganhou, o programa calcula o valor de retorno
ganho = calcular_ganho(escolha, aposta)
creditos += ganho
print(f"Parabéns! O piloto que você escolheu ganhou a corrida! Você ganhou {ganho} créditos!")
else:
#Se ele não apostou, ele ganha 50 créditos para apostar futuramente
creditos += 50
print("Parabéns! O piloto que você escolheu ganhou a corrida!")
else:
if aposta > 0:
# Se o usuário apostou e o corredor não ganhou, ele perde o valor de aposta
creditos -= aposta
print("Que pena! O piloto que você escolheu não ganhou a corrida. Você perdeu sua aposta.")
else:
print("Que pena! O piloto que você escolheu não ganhou a corrida.")
print(f"Você agora tem {creditos} créditos.")
jogar_novamente = input("Você gostaria de simular a corrida novamente? (sim/nao): ").strip().lower()
while jogar_novamente != 'sim' and jogar_novamente != 'nao':
jogar_novamente = input('Digite um valor válido (sim ou nao)')
if jogar_novamente != 'sim':
# Se o input de jogar novamente for diferente de sim, o loop da simulação quebra e é encerrado
break
corrida_formula_e()