Skip to content

Instantly share code, notes, and snippets.

@osiro
Created March 31, 2015 02:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save osiro/6cb36fae07ad53c1cfac to your computer and use it in GitHub Desktop.
Save osiro/6cb36fae07ad53c1cfac to your computer and use it in GitHub Desktop.
# 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