Jump to content
Gonkali

[Resolvido] Resolução de Exercício

Recommended Posts

Gonkali

Bom Dia,

Vou colocar uma dúvida que acho (quase a certeza) que é um pouco parva, comoçei recentemente a estudar a linguagem python e a realizar alguns exercicios através do cscircles e deparei-me com um problema que aparentemente me parece ser básico de resolver, mas que eu bloqueiei.

Eis o problema:

"Coding Exercise: One Road

For part 1, there is a single road between the two cities. The road has three bridges with weight limits a, b, c:

In order to drive along the route, your truck needs to drive first over the bridge with weight limit a, then the one with weight limit b, then the one with weight limit c. Your truck will crash if you overload any of the three weight limits. Write a program that prints out the maximum weight that can be transported along this road. Your code should assume that the variables a, b, and c already contain the bridge weight limits."

***Este consegui resolver com o seguinte código

print(min(a, b, c))

Sendo a =186; b=168 e c=96

A primeira duvida que tenho, é não perceber porque temos que usar a função min não max, sendo que pretendemos verificar o peso máximo que pode ser transportado?***

Na 2ª parte do problema é pedido o seguinte:

"Part #2: Now we will tell you the whole story. There is also a second route consisting of two bridges, the first with weight limit d, and the second with weight limit e.

Your truck can take either route. Write a program that prints out the maximum weight that can be transported between the two cities. Assume that the variables a, b, c, d, and e contain the bridge weight limits."

***Para a resolução do mesmo tentei o seguinte:

x = min(a,b,c)
y = min(d,e)
print (min(x,y))

Para o seguinte resultado:

Did not pass tests. Please check details below and try again.

Results for test case 1 out of 5

Before running your code: We defined a equal to 116, b equal to 228, c equal to 317, d equal to 62, and e equal to 90.

Program executed without crashing.

Program output:

62

Expected this correct output:

116

Result of grading: Your output is not correct.***

Sinceramente, estou á nora com este problema aparentemente básico, não consigo encontrar a lógica e motivo do uso da função min, neste problema, já reli várias vezes o cápitulo acerca destas funções, mas não chego lá, se alguem me pudesse "iluminar" agradecia.

Obrigado

Edited by thoga31
Tags code + GeSHi

" The quieter you become, the more you are able to hear"

"Eu adoraria mudar o mundo, mas não me deram o código-fonte."

"A arte de programar consiste na arte de organizar e dominar a complexidade."

"Qualquer um pode escrever um código que o computador entenda. Bons programadores escrevem códigos que os humanos entendam."

Share this post


Link to post
Share on other sites
Pedro C.

Olá,

Para a tua primeira questão:

"Coding Exercise: One Road

For part 1, there is a single road between the two cities. The road has three bridges with weight limits a, b, c:

In order to drive along the route, your truck needs to drive first over the bridge with weight limit a, then the one with weight limit b, then the one with weight limit c. Your truck will crash if you overload any of the three weight limits. Write a program that prints out the maximum weight that can be transported along this road. Your code should assume that the variables a, b, and c already contain the bridge weight limits."

Repara que o camião tem de passar por três pontes. Têm um acidente se exceder o limite em qualquer uma delas o que implica que se pedires o valor máximo então o camião vai exceder o valor em todas as pontes excepto aquela que tem o valor máximo. A única maneira do camião passar pelas 3 pontes é não excedendo o limite minimo das três e o limite mínimo é min(a,b,c).

Com este "algoritmo" tu consegues saber qual é o peso máximo que o camião pode trasnsportar (o minimo desse caminho portanto). Agora é te dado um segundo caminho:

"Part #2: Now we will tell you the whole story. There is also a second route consisting of two bridges, the first with weight limit d, and the second with weight limit e.

Your truck can take either route. Write a program that prints out the maximum weight that can be transported between the two cities. Assume that the variables a, b, c, d, and e contain the bridge weight limits."

Caminho 1: (a,b,c) -> min(a,b,c) = c1

Caminho 2: (d,e) -> min(d,e) = c2

Portanto a carga máxima que consegues levar considerando que podes ir pelos dois caminhos é: max(c1,c2)

Nota: Não podes andar a ver o mínimo de todas as pontes (que foi o que fizeste, o minimo dos minimos) porque quando tu vais na segunda opção, por exemplo c2, não tens de passar em a,b ou c implicando que o minimo que tiras de lá não te interessa. Se tiveres dúvidas avisa.

Share this post


Link to post
Share on other sites
djthyrax

Em relação ao usares o min e não o max, o máximo de peso que podes ter tem de ser no máximo igual ao peso máximo que cada ponte consegue suportar. Se tiveres 2 pontes aguentarem 3000kg mas a outra só aguentar 1500kg, o máximo que podes transportar são 1500kg senão vais dar cabo dessa ponte.

Na segunda parte, tens 2 caminhos possíveis, em vez de só teres um. Para cada caminho, vai haver um peso máximo que podes transportar sem partires nenhuma ponte. Tendo esses pesos, tens de ver qual é o caminho pelo qual podes passar mais peso.


Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Share this post


Link to post
Share on other sites
Gonkali

Obrigado, pela ajuda :)

Finalmente consegui perceber e resolver.

Route1 = min(a,b,c)
Route2 = min(d,e)
print (max(Route1,Route2))

Correct!

Edited by thoga31
Tags code + GeSHi

" The quieter you become, the more you are able to hear"

"Eu adoraria mudar o mundo, mas não me deram o código-fonte."

"A arte de programar consiste na arte de organizar e dominar a complexidade."

"Qualquer um pode escrever um código que o computador entenda. Bons programadores escrevem códigos que os humanos entendam."

Share this post


Link to post
Share on other sites
Gonkali

Aproveitando o tópico, para não estar a criar um novo pretendi saber se alguem me podia ajudar no seguinte problema:

"Write a program which reads an integer from input using pancakes = int(input()). If pancakes is more than 3, print out Yum! and if pancakes is not more than 3, print out Still hungry! instead."

Para resolver o mesmo fiz o seguinte:

pancakes = int(input(inputStr))
if pancakes > 3:
print ("Yum!")
if pancakes < 3:
print ("Still hungry!")

E deu o seguinte erro:

Traceback (most recent call last):
 In line 3 of the code you submitted:
   print ("Yum!")
       ^
Indentationerror: expected an indented block

A questão é que não percebo porque me está a dar este erro, já tentei alterar os apóstrofos e parênteses, mas não estou a conseguir, se me puderem indicar o que estou a fazer de mal agradecia.

Gonçalo

Edited by thoga31
Tags code + GeSHi

" The quieter you become, the more you are able to hear"

"Eu adoraria mudar o mundo, mas não me deram o código-fonte."

"A arte de programar consiste na arte de organizar e dominar a complexidade."

"Qualquer um pode escrever um código que o computador entenda. Bons programadores escrevem códigos que os humanos entendam."

Share this post


Link to post
Share on other sites
KiNgPiTo

O teu problema está na indentação. Em python (ao contrário de linguagens como C que utilizam chavetas) define-se um bloco com indentação de 4 espaços, no teu caso:

pancakes = int(input(inputStr))
if pancakes > 3:
print ("Yum!")
if pancakes < 3:
print ("Still hungry!")

Para além de que deves ver melhor o if/else/elif no teu caso se pancakes=3 não acontece nada..

Caso queiras "Still hungry!" então em vez de if basta fazeres else (isto é <=3) se quiseres como está podes meter elif (else if) caso queiras acrescentar ainda o caso == 3 basta acrescentares um else com um print que quiseres.

Edited by KiNgPiTo

Share this post


Link to post
Share on other sites
Gonkali

O teu problema está na indentação. Em python (ao contrário de linguagens como C que utilizam chavetas) define-se um bloco com indentação de 4 espaços, no teu caso:

pancakes = int(input(inputStr))
if pancakes > 3:
print ("Yum!")
if pancakes < 3:
print ("Still hungry!")

Para além de que deves ver melhor o if/else/elif no teu caso se pancakes=3 não acontece nada..

Caso queiras "Still hungry!" então em vez de if basta fazeres else (isto é <=3) se quiseres como está podes meter elif (else if) caso queiras acrescentar ainda o caso == 3 basta acrescentares um else com um print que quiseres.

Obrigado pela ajuda ;)

Neste caso só posso mesmo utilizar o if, porque é um tutorial prático do cscircles, só depois de realizar todos os exercicios neste caso de if, é que consigo avançar para o else.


" The quieter you become, the more you are able to hear"

"Eu adoraria mudar o mundo, mas não me deram o código-fonte."

"A arte de programar consiste na arte de organizar e dominar a complexidade."

"Qualquer um pode escrever um código que o computador entenda. Bons programadores escrevem códigos que os humanos entendam."

Share this post


Link to post
Share on other sites
Gonkali
Em 17/10/2013 às 21:45, thoga31 disse:

Thoga, Obrigado, vou ter atenção.

Abraço


" The quieter you become, the more you are able to hear"

"Eu adoraria mudar o mundo, mas não me deram o código-fonte."

"A arte de programar consiste na arte de organizar e dominar a complexidade."

"Qualquer um pode escrever um código que o computador entenda. Bons programadores escrevem códigos que os humanos entendam."

Share this post


Link to post
Share on other sites
Gonkali

Outra questão e desculpem ser chato...

Surgiu-me o seguinte exercicio:

"Write a program that reads an integer from input, representing someone's age. If the age is 18 or larger, print out You can vote. If the age is between 0 and 17 inclusive, print out Too young to vote. If the age is less than 0, print out You are a time traveller."A

A minha duvida é como utilizar a função if ou a comparação Boolean para que quando a idade seja entre os 0 e os 17 o output seja Too Young to vote e apresente apenas um output, o que me está a acontecer, sendo que eu não estou a conseguir fazer a comparação o que acontece é que tanto para valores negativos como para valores entre os 0 e 17 me dá dois outputs ( You are a time traveller e Too young to vote ).

age = int(input())
if age > 18:
print ("You can vote")
if age < 17:
print ("Too young to vote")
if age < 0:
print ("You are a time traveler")

Edited by Rui Carlos

" The quieter you become, the more you are able to hear"

"Eu adoraria mudar o mundo, mas não me deram o código-fonte."

"A arte de programar consiste na arte de organizar e dominar a complexidade."

"Qualquer um pode escrever um código que o computador entenda. Bons programadores escrevem códigos que os humanos entendam."

Share this post


Link to post
Share on other sites
Virneto

No futuro talvez devas criar um tópico por cada questão e não juntar questões no mesmo.

Quanto a esta questão, verifica as condições que estás a testar e se as tuas condições são exclusivas acho que pode usar if, elif else

Quando digo verifica as tuas condições quero dizer que há vários caminhos que podes seguir para verificar uma mesma questão, por exemplo:

if age > 0:
  if age > 17:
 print("Podes Votar")
  else:
 print("Muito Novo")
else:
  print("não é maior que 0")

Espero ter ajudado (pelo menos a pensar).


"Que inquieto desejo vos tortura, Seres elementares, força obscura? Em volta de que ideia gravitais?" >> Anthero de Quental

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Linuxando.com | ...

Share this post


Link to post
Share on other sites
Gonkali

No futuro talvez devas criar um tópico por cada questão e não juntar questões no mesmo.

Quanto a esta questão, verifica as condições que estás a testar e se as tuas condições são exclusivas acho que pode usar if, elif else

Quando digo verifica as tuas condições quero dizer que há vários caminhos que podes seguir para verificar uma mesma questão, por exemplo:

if age > 0:
  if age > 17:
 print("Podes Votar")
  else:
 print("Muito Novo")
else:
  print("não é maior que 0")

Espero ter ajudado (pelo menos a pensar).

Obrigado pela ajuda, no exercicio so posso utilizar a condição if e ou as comparações Boolean.


" The quieter you become, the more you are able to hear"

"Eu adoraria mudar o mundo, mas não me deram o código-fonte."

"A arte de programar consiste na arte de organizar e dominar a complexidade."

"Qualquer um pode escrever um código que o computador entenda. Bons programadores escrevem códigos que os humanos entendam."

Share this post


Link to post
Share on other sites
Virneto

Não tenho dúvidas que alguém conseguirá uma solução mais elegante do que esta, mas tenta:

age = int(input())
if age >= 0:
if age > 17:
	print("hum... Podes votar!")
if age < 18:
	print("Não tens idade!")
if age < 0:
print("Menos de zero? Não devias estar na creche?")


"Que inquieto desejo vos tortura, Seres elementares, força obscura? Em volta de que ideia gravitais?" >> Anthero de Quental

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Linuxando.com | ...

Share this post


Link to post
Share on other sites
Virneto

Olha Gonkali, para o desenvolvimento em python em geral, podes também ver estes recursos que o @thoga31 organizou aqui no p@p. Está muito fixe e tem bons recursos.

http://www.portugal-a-programar.pt/topic/56584-links-uteis-documentacao-livros-tutoriais-snippets/


"Que inquieto desejo vos tortura, Seres elementares, força obscura? Em volta de que ideia gravitais?" >> Anthero de Quental

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Linuxando.com | ...

Share this post


Link to post
Share on other sites
Gonkali

Não tenho dúvidas que alguém conseguirá uma solução mais elegante do que esta, mas tenta:

age = int(input())
if age >= 0:
if age > 17:
	print("hum... Podes votar!")
if age < 18:
	print("Não tens idade!")
if age < 0:
print("Menos de zero? Não devias estar na creche?")

Já tentei e o que acontece é que em vez de para cada uma das condições ele dar apenas um output, ele vai dar 2 output's quando a condição for menor de 18, vai dar o output "Too young to vote" e you are a time traveller.


" The quieter you become, the more you are able to hear"

"Eu adoraria mudar o mundo, mas não me deram o código-fonte."

"A arte de programar consiste na arte de organizar e dominar a complexidade."

"Qualquer um pode escrever um código que o computador entenda. Bons programadores escrevem códigos que os humanos entendam."

Share this post


Link to post
Share on other sites
Virneto

Já tentei e o que acontece é que em vez de para cada uma das condições ele dar apenas um output, ele vai dar 2 output's quando a condição for menor de 18, vai dar o output "Too young to vote" e you are a time traveller.

tens a certeza que dá este output com a minha proposta de resolução? É que pelo que vejo uma condção menor do que 18 e maior do que zero dá "Não tens idade". e Se for menor do que zero não entra no primeiro if mas apenas no segundo "Menos de zero.....".

edit:

Repara também que no exercício do cscircles vais ter erro se a string imprimida não for exatamente igual à solicitada, ou seja, tens de tirar as baboseiras que pus a imprimir e colocar exatamente o que pedem.

Assim:

age = int(input())
if age >= 0:
   if age > 17:
    print("You can vote")
   if age < 18:
    print("Too young to vote")
if age < 0:
   print("You are a time traveller")

Edited by Virneto

"Que inquieto desejo vos tortura, Seres elementares, força obscura? Em volta de que ideia gravitais?" >> Anthero de Quental

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Linuxando.com | ...

Share this post


Link to post
Share on other sites
thoga31

Vamos optimizar :D

age = int(input())
if age > 17:
   print("You can vote")
elif age < 0:
   print("You are a time traveller")
elif age < 18:
   print("Too young to vote")

Edited by thoga31
  • Vote 1

Knowledge is free!

Share this post


Link to post
Share on other sites
Gonkali

Obrigado a todos pela ajuda ;)

Ficou Resolvido.


" The quieter you become, the more you are able to hear"

"Eu adoraria mudar o mundo, mas não me deram o código-fonte."

"A arte de programar consiste na arte de organizar e dominar a complexidade."

"Qualquer um pode escrever um código que o computador entenda. Bons programadores escrevem códigos que os humanos entendam."

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.