Created
March 31, 2015 02:30
-
-
Save osiro/6cb36fae07ad53c1cfac to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# inclusão da biblioteca útil para o sorteio de números | |
import random | |
def main(): | |
# semente para gerar os números aleatórios | |
semente = int(input("Semente: ")) | |
# inicialize o gerador de números aleatórios | |
random.seed(semente) | |
# escreva o resto da função main() abaixo. | |
SIMULACAO = True | |
simu = 1 | |
while SIMULACAO: | |
print("--------------------------------") | |
print("Início da simulação", simu) | |
print() | |
print("Em cada iteração as opções possíveis são:") | |
print(" 0 para abandonar") | |
print(" 1 para depositar no recipiente 1") | |
print(" 2 para depositar no recipiente 2") | |
print(" 3 para depositar no recipiente 3") | |
print(" 4 para descartar a quantidade de água") | |
print() | |
vol_1 = 0 | |
vol_2 = 0 | |
vol_3 = 0 | |
excedente = 0 | |
descartes = 0 | |
pontos_perdidos = 0 | |
cap_1 = random.randrange(10,51) | |
cap_2 = random.randrange(3,50) | |
cap_3 = random.randrange(1,49) | |
cap = int(cap_1 + cap_2 + cap_3) | |
volume_ocupado = vol_1 + vol_2 + vol_3 | |
vol_livre1 = cap_1 - vol_1 | |
vol_livre2 = cap_2 - vol_2 | |
vol_livre3 = cap_3 - vol_3 | |
vol_livre_total = vol_livre1 + vol_livre2 + vol_livre3 | |
derramado = 0 | |
iteracao = 1 | |
ITERACAO = True | |
while ITERACAO: | |
print(" . . . . . . . . . . . . . . . . . . . . .") | |
quant_agua = random.randrange(1,int(cap/4 + 1)) | |
print(" Iteração :", iteracao) | |
print(" Descartes :", descartes) | |
print(" Pontos :", pontos_perdidos) | |
imprima_volumes(cap_1, cap_2, cap_3, vol_1, vol_2, vol_3) | |
print(" Quantidade disponibilizada:", quant_agua) | |
id_recip = int(input(" Opção desejada: ")) | |
if id_recip != 0: | |
if id_recip == 4: | |
descartes = descartes + 1 | |
print("Você perdeu", quant_agua, "pontos" ) | |
else: | |
vol_1, vol_2, vol_3, excedente = deposite(id_recip, cap_1, cap_2, cap_3, vol_1, vol_2, vol_3, quant_agua, excedente) | |
imprima_volumes(cap_1, cap_2, cap_3, vol_1, vol_2, vol_3) | |
elif id_recip == 0 or descartes >= 3: | |
SIMULACAO = False | |
while excedente != 0 and vol_livre1 != 0 and vol_livre2 != 0 and vol_livre3 != 0: | |
print("Excedeu recipiente", id_recip, "em", excedente) | |
deposite(id_recip, cap_1, cap_2, cap_3, vol_1, vol_2, vol_3, quant_agua, excedente) | |
imprima_volumes(cap_1, cap_2, cap_3, vol_1, vol_2, vol_3) | |
print("Você perdeu", excedente, "pontos") | |
id_recip = int(input("Escolha recipiente para depositar excedente de", excedente, ": ")) | |
deposite(id_recip, cap_1, cap_2, cap_3, vol_1, vol_2, vol_3, quant_agua, excedente) | |
imprima_volumes(cap_1, cap_2, cap_3, vol_1, vol_2, vol_3) | |
pontos_perdidos(cap_1, cap_2, cap_3, vol_1, vol_2, vol_3, pontos, excedente, quant_agua) | |
if excedente != 0 and vol_livre1 == 0 and vol_livre2 == 0 and vol_livre3 == 0: | |
print("Não há volume livre, houve derramamento") | |
derramado = excedente | |
ITERACAO = False | |
if excedente == 0 and vol_livre1 == 0 and vol_livre2 == 0 and vol_livre3 == 0: | |
print("Parabéns, você preencheu os três recipientes sem derramamento!") | |
ITERACAO = False | |
iteracao = iteracao + 1 | |
print(" . . . . . . . . . . . . . . . . . . . . .") | |
print("Fim da simulação") | |
print((" Volumes ocupados : [ %d] [ %d] [ %d]")%(vol_1, vol_2, vol_3)) | |
print((" Capacidades : %d %d %d")%(cap_1, cap_2, cap_3)) | |
print(" Capacidade total : ", cap) | |
print(" Volume ocupado : ", volume_ocupado) | |
print(" Volume livre : ", vol_livre_total) | |
print(" Volume derramado : ", derramado) | |
print(" Descartes : ", descartes) | |
if derramado == 0: | |
if vol_1 == cap_1 and vol_2 == cap_2 and vol_3 == cap_3: | |
pontos_ganhos = 5*cap | |
elif volume_ocupado > float(0,9*cap): | |
pontps_ganhos == cap | |
elif volume_ocupado > float(0,75*cap): | |
pontos_ganhos = cap//2 | |
else: | |
pontuacao = 0 | |
print(" Pontos ganhos : ", pontos_ganhos) | |
print(" Pontuação total : ", pontos + pontos_ganhos) | |
print("--------------------------------") | |
print() | |
resposta = input("Quer simular novamente (s/n)?") | |
if resposta == s: | |
SIMULACAO = True | |
simu = simu + 1 | |
else: | |
SIMULACAO = False | |
print("Você simulou", simu, "vezes") | |
#----------------------------------------------------------------------- | |
def deposite(id_recip, cap_1, cap_2, cap_3, vol_1, vol_2, vol_3, quant_agua, excedente): | |
''' (int, int, int, int, int, int, int, int, int) -> int, int | |
Recebe o número de identificação id_recip de um recipiente, a | |
sua capacidade cap, o seu volume ocupado vol e uma quantidade | |
de agua quant_agua. A função deposita a quantidade de água no | |
recipiente e retorna o novo volume ocupado e o volume | |
excedente. | |
Além disso, caso o volume excedente seja não nulo, a função | |
imprime uma mensagem indicando que o volume do recipiente | |
foi excedido. | |
Exemplos: | |
>>> deposite(1, 10, 7, 2) | |
(9, 0) | |
>>> deposite(1, 10, 7, 3) | |
(10, 0) | |
>>> deposite(1, 10, 7, 4) | |
Excedeu recipiente 1 em 1 | |
(10, 1) | |
>>> deposite(1, 10, 7, 5) | |
Excedeu recipiente 1 em 2 | |
(10, 2) | |
>>> deposite(2, 10, 7, 6) | |
Excedeu recipiente 2 em 3 | |
(10, 3) | |
>>> | |
''' | |
if id_recip == 1: | |
vol_1 = vol_1 + quant_agua | |
if vol_1 >= cap_1: | |
excedente = vol_1 - cap_1 | |
vol_1 = cap_1 | |
elif id_recip == 2: | |
vol_2 = vol_2 + quant_agua | |
if vol_2 >= cap_2: | |
excedente = vol_2 - cap_2 | |
elif id_recip == 3: | |
vol_3 = vol_3 + quant_agua | |
if vol_3 >= cap_3: | |
excedente = vol_3 - cap_3 | |
return(vol_1, vol_2, vol_3, excedente) | |
#----------------------------------------------------------------------- | |
def imprima_volumes(cap_1, cap_2, cap_3, vol_1, vol_2, vol_3): | |
''' (int, int, int, int, int, int) -> None | |
Recebe as capacidades cap_1, cap_2 e cap_3 e os volumes | |
ocupados vol_1, vol_2 e vol_3 dos recipiente 1, 2 e 3, | |
respectivamente, e imprime uma mensagem com o volume ocupado em | |
cada recipiente. Esse volume está entre colchetes se o | |
recipiente não está cheio e entre asterísticos se está. | |
Exemplos: | |
>>> imprima_volumes(15, 13, 10, 15, 11, 10) | |
Volumes ocupados = *15* [11] *10* | |
>>> imprima_volumes(15, 13, 10, 12, 13, 9) | |
Volumes ocupados = [12] *13* [ 9] | |
>>> imprima_volumes(15, 13, 10, 12, 5, 9) | |
Volumes ocupados = [12] [ 5] [ 9] | |
>>> | |
''' | |
if vol_1 < cap_1 and vol_2 < cap_2 and vol_3 < cap_3: | |
print((" Volumes ocupados : [ %d] [ %d] [ %d]")%(vol_1, vol_2, vol_3)) | |
elif vol_1 >= cap_1 and vol_2 < cap_2 and vol_3 < cap_3: | |
print((" Volumes ocupados : * %d* [ %d] [ %d]")%(vol_1, vol_2, vol_3)) | |
elif vol_1 < cap_1 and vol_2 >= cap_2 and vol_3 < cap_3: | |
print((" Volumes ocupados : [ %d] * %d* [ %d]")%(vol_1, vol_2, vol_3)) | |
elif vol_1 < cap_1 and vol_2 < cap_2 and vol_3 >= cap_3: | |
print((" Volumes ocupados : [ %d] [ %d] * %d*")%(vol_1, vol_2, vol_3)) | |
elif vol_1 >= cap_1 and vol_2 >= cap_2 and vol_3 < cap_3: | |
print((" Volumes ocupados : * %d* * %d* [ %d]")%(vol_1, vol_2, vol_3)) | |
elif vol_1 < cap_1 and vol_2 >= cap_2 and vol_3 >= cap_3: | |
print((" Volumes ocupados : [ %d] * %d* * %d*")%(vol_1, vol_2, vol_3)) | |
elif vol_1 >= cap_1 and vol_2 < cap_2 and vol_3 >= cap_3: | |
print((" Volumes ocupados : * %d* [ %d] * %d*")%(vol_1, vol_2, vol_3)) | |
else: | |
print((" Volumes ocupados : * %d* * %d* * %d*")%(vol_1, vol_2, vol_3)) | |
#----------------------------------------------------------------------- | |
def pontos_perdidos(cap_1, cap_2, cap_3, vol_1, vol_2, vol_3, pontos_perdidos, excedente, quant_agua): | |
''' (int, int, int, int, int, int, int, int, int) -> None | |
Recebe as capacidades cap_1, cap_2 e cap_3, os volumes | |
ocupados vol_1, vol_2 e vol_3 dos recipiente 1, 2 e 3, | |
respectivamente, os pontos, o volume excedente e a quantidade de agua | |
e realiza a contagem de pontos perdidos, depois imprime os pontos. | |
''' | |
if id_recip == 1: | |
cap = cap_1 | |
vol = vol_1 | |
elif id_recip == 2: | |
cap = cap_2 | |
vol = vol_2 | |
elif id_recip == 3: | |
cap = cap_3 | |
vol = vol_3 | |
if id_recip == 4: | |
pontos_perdidos = pontos_perdidos - quant_agua | |
if excedente != 0 and vol_livre1 != 0 and vol_livre2 != 0 and vol_livre3 != 0: | |
pontos_perdidos = pontos_perdidos - excedente | |
elif excedente != 0 and vol_livre1 == 0 and vol_livre2 == 0 and vol_livre3 == 0: | |
pontos_perdidos = pontos_perdidos - 10*excedente | |
#----------------------------------------------------------------------- | |
main() # chamada da função main, inicio da execução do programa | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment