Jump to content

Print simples antecipa-se a print formatado, como regular?


jonhhy

Recommended Posts

Bom dia P@P,

neste programa, a ordem dos prints esta a sair trocada:

Desafio 059:  Crie um programa que leia dois valores e mostre um menu na tela:

[1] Somar

[2] Multiplicar

[3] Maior

[4] Novos números

[5] Sair do programa

Seu programa deverá realizar a operação solicitada em cada caso.

def readNums():
  a = int(input('Digit a number: '))
  b = int(input('Digit other number: '))
  return a, b
    
option = 3.5
while True:
  if option == 3.5:
    num1, num2 = readNums()
  else:
    print('''\nBem Vindo ao Menu! 
          \nDigite uma das opções:\n
            [1] Somar
            [2] Multiplicar
            [3] Maior
            [4] Novos números
            [5] Sair do programa\n\n''')


    
            
  while option > 6 and option < 0:
    option = int(input('Say a option: '))
  if option == 1:
    print('Sum: {} + {} = {}'.format(num1, num2, num1+num2)) 
  elif option == 2:
    print('Multiplication: {} * {} = {}'.format(num1, num2, num1*num2)) 
  elif option == 3:
    print('Greater is {}'.format(max(num1, num2))) 
  elif option == 4: 
    num1, num2 = readNums() 
  elif option == 5: 
    print('The End!') 
    break
  option = int(input('Say a option: '))

Digit a number: 4

Digit other number: 3

Say a option: 1

 

Bem Vindo ao Menu!

Digite uma das opções:

[1] Somar

[2] Multiplicar

[3] Maior

[4] Novos números

[5] Sair do programa

5eDOemn.png <- Output em imagem (representado acima)

 

Sum: 4 + 3 = 7   <-  # este print devia ter vindo antes de Bem Vindo ao Menu! (texto a itálico)

Say a option:

 

Como faço?  (em C à a limpexa de buffer senão estou esquecido ..)

Link to comment
Share on other sites

Tens a condição mal feita nesta linha:

while option > 6 and option < 0

A condição correcta é option > 6 or option < 0.
A opção que está a ser lida é da tua última linha de código, não deste ciclo while.

Já agora, o "problema" do buffer de input é importante em C, mas não se apresenta em Python.

Aproveitaria para rever a estrutura do programa.

  • Vote 1

Knowledge is free!

Link to comment
Share on other sites

Em 28/07/2022 às 19:57, thoga31 disse:

Tens a condição mal feita nesta linha:

while option > 6 and option < 0

A condição correcta é option > 6 or option < 0.
A opção que está a ser lida é da tua última linha de código, não deste ciclo while.

Já agora, o "problema" do buffer de input é importante em C, mas não se apresenta em Python.

Aproveitaria para rever a estrutura do programa.

Muito grato pelas sugestões úteis Thoga31, já tinha alterado o valor lógico, mas após ler o comentário e correr o programa de novo reparei o tão mau estava a estrutura (além de confusa). Acho que nem o ciclo de execução estava a seguir direito e daí ter surgido a questão do buffer, sorry for that.

Penso que esta versão está pelo menos um pouco melhor:

 

def readNums():
  a = int(input('Digit a number: '))
  b = int(input('Digit other number: '))
  return a, b

num1, num2 = readNums()
while True:
  print('''\nWelcome! 
          \nChoose a option:\n
            [1] Sum
            [2] Multiplication
            [3] Greater
            [4] New numbers
            [5] Exit \n\n''')
  option = int(input('\nSay a option: '))
            
  while option > 6 or option < 0:
    option = int(input('Invalid option ...\nSay a option: '))
  print(f'\n[{option}]')
  if option == 1:
    print('Sum: {} + {} = {}'.format(num1, num2, num1+num2)) 
  elif option == 2:
    print('Multiplication: {} * {} = {}'.format(num1, num2, num1*num2)) 
  elif option == 3:
    # max(num1, num2))
    print('Greater is {}'.format(max(num1, num2))) 
  elif option == 4: 
    num1, num2 = readNums() 
  elif option == 5: 
    print('\nThe End!') 
    break

 

Link to comment
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.