Loop the loop after performing functions

Asked

Viewed 167 times

2

I’m having difficulty in this code, I adapted in two functions as guided by prof. but I’m having difficulty in the final phase, which asks: use for or while n times (n is equivalent to the quantity of products reported). Within the repeating structure, I must call the function "verifi_product", allowing the user to register all products and check whether or not there was a limit left to buy them.

Could someone help me structure this phase?

def obter_limite (salario, idade, limite):
  print('Irei fazer uma análise de crédito para você, para isso preciso apenas de alguns de seus dados. \n')

  salario = float(input('Qual seu salário? '))
  ano_nascimento = int(input('Qual seu ano de nascimento? \n'))

  import datetime
  agora = datetime.datetime.now()
  idade = agora.year - int(ano_nascimento)
  print('Sua idade é: ', idade)

  limite = float(salario * idade / 1.000) + 100
  print('\nJá analisei seu crédito! Você poderá gastar na loja: R${:.2f}'.format(limite))

  return limite
limite = obter_limite(salario, idade, limite)

def verificar_produto (limite):
  produto = input('Informe o nome do produto que deseja comprar: ')
  preço = float(input('Informe o valor: '))

  porcentagem = preço*100/limite
  if porcentagem <= 60:
    print('\nLiberado')
  elif porcentagem <= 90:
    print('\nLiberado ao parcelar em até 2 vezes')
  elif porcentagem <= 100:
    print('\nLiberado ao parcelar em 3 ou mais vezes')
  else:
    print('\nBloqueado')
    print('Escolha outro produto com valor inferior ao seu limite de crédito')

  desconto = float(7)
  if preço >= 23 and preço <= idade:
    print('Você ganhou um desconto, o valor do produto ficará: R${:.2f}'.format(preço - 7))

  return limite, preço, desconto
limite, preço, desconto = verificar_produto (limite)

#Quantidade #laço repetição de produto soma valores e verificação do limite
n = int(input('\nQuantos produtos deseja cadastrar? '))
for n (verificar_produto)
  while preço <= limite
print(verificar_produto)

1 answer

0


To repeat something n times, you can use a for along with range:

for _ in range(n):
    # faz algo

range(n) generates a sequence of 0 to n - 1 (which in practice will cause the loop itere per n times).

The variable _ is a Python convention indicating that I don’t care about the value of the number (since then I won’t use that value, I’m just using the range to perform something several times).

Another detail is that the function makes no sense obter_limite receive as parameters age, salary and limit, since this information will be overwritten within the function. Also, verificar_produto is accessing the idade, but this variable only exists within obter_limite and it will not be possible to access it outside this function.

Anyway, from what I understood of the operation of the program, would be like this:

import datetime

def obter_limite():
  print('Irei fazer uma análise de crédito para você, para isso preciso apenas de alguns de seus dados. \n')

  salario = float(input('Qual seu salário? '))
  ano_nascimento = int(input('Qual seu ano de nascimento? \n'))

  agora = datetime.datetime.now()
  idade = agora.year - int(ano_nascimento)
  print('Sua idade é: ', idade)

  limite = float(salario * idade / 1.000) + 100
  print('\nJá analisei seu crédito! Você poderá gastar na loja: R${:.2f}'.format(limite))

  # retorna o limite e a idade, que serão usados depois
  return limite, idade

def verificar_produto(limite, idade):
  produto = input('Informe o nome do produto que deseja comprar: ')
  preço = float(input('Informe o valor: '))

  porcentagem = preço * 100 / limite
  if porcentagem <= 60:
    print('\nLiberado')
  elif porcentagem <= 90:
    print('\nLiberado ao parcelar em até 2 vezes')
  elif porcentagem <= 100:
    print('\nLiberado ao parcelar em 3 ou mais vezes')
  else:
    print('\nBloqueado')
    print('Escolha outro produto com valor inferior ao seu limite de crédito')

  desconto = float(7)
  if preço >= 23 and preço <= idade:
    preço -= 7
    print('Você ganhou um desconto, o valor do produto ficará: R${:.2f}'.format(preço))

  # desconta o preço do limite e retorna o novo limite atualizado
  return limite - preço, preço


limite, idade = obter_limite()

n = int(input('\nQuantos produtos deseja cadastrar? '))
for _ in range(n):
    limite, preço = verificar_produto(limite, idade)

Note that the function verificar_produto receives the current limit and returns the new updated limit (already discounted from the price of the product that has just been purchased).

Of course you have other details to tidy up (if the product is blocked, shouldn’t you ask to type in another product or then close? the calculation of age is not necessary, because it only takes into account the year, etc.), but then you would run a little away from the scope of the question, which was how to do the loop.

  • @Letíciamaciel If the answer solved your problem, you can accept it, see here how and why to do it. It is not mandatory, but it is a good practice of the site, to indicate to future visitors that it solved the problem. Don’t forget that you can also vote in response, if it has found it useful.

  • 1

    Ual! Helped me doubt about the repeating structure and further clarified on the detail of the parameters. Thank you so much!

Browser other questions tagged

You are not signed in. Login or sign up in order to post.