У меня больше проблем с определением операторов

#input #while-loop #undefined

#ввод #во время цикла #не определено

Вопрос:

Я пытаюсь выполнить определяющий оператор с помощью цикла ввода. если ввод находится за пределами оператора, моя единственная проблема заключается в том, что он повторяет ввод дважды, что довольно странно. при вводе только внутри цикла while это выдает ошибку amt not defined .

     def Loan_Amount(amt):
    while True:
        amt = int(input("Please put in the loan amount you would like to take out: "))
        if amt < 500:
           print("Sorry, we don't offer loans below 500 dollars")
           continue
        elif amt >= 500:
           break
    print(Loan_Amount(amt))
  

Другой способ, который выглядит странно

     amt = int(input('Please put in the loan amount you would like to take out: '))
    
    def Loan_Amount(amt):
    while True:
        amt = int(input("Please put in the loan amount you would like to take out: "))
        if amt < 500:
           print("Sorry, we don't offer loans below 500 dollars")
           continue
        elif amt >= 500:
           break
    print(Loan_Amount(amt))
  

Ответ №1:

Хорошо, я оставляю это на случай, если кто-нибудь еще столкнется с этой проблемой, но, просмотрев документацию, я понял это.

    def Loan_Amount(prompt)
        While True:
             global amt
             amt = int(input(prompt))
             if amt < 500:
                  print("Sorry, we don't offer loans below 500 dollars")
                  continue

             else:
                  break
    Loan_Amount('Please put in the loan amount you would like to take out: ')
    print(amt)
  

Я не уверен на 100 процентов, правильно ли я это объясню, поэтому примите мою интерпретацию свободно. По сути, вместо того, чтобы иметь amt внутри круглой скобки, как такой def Loan_Amount(amt), в результате чего он становится одновременно параметром и глобальной переменной, вместо этого он запрашивается, и вместо ввода ввода внутри цикла он вводится при вызове оператора. там есть глобальная часть amt, я почти уверен, поэтому, когда amt присваивается число, оно сделает amt глобальной переменной вместо того, чтобы сохранять ее локальной внутри цикла, чтобы вы могли распечатать ее вне цикла, и она по-прежнему остается определенной переменной. Надеюсь, это поможет всем, кто так же потерян, как и я!