Как я могу вернуться к началу цикла? - PullRequest
1 голос
/ 24 октября 2019

Я прошу прощения, если моя проблема кажется длинной. Я постараюсь быть максимально кратким.

Проблема: Напишите программу, которая преобразует вмененный вес в килограммах в фунты. Если пользователь вводит отрицательное значение, программа должна попросить игрока повторно ввести число.

Я создал три функции. Первая функция - возвращает входные данные игрока. Вторая функция - возвращает вес в фунтах. Третья функция - возвращает значение в фунтах, если вес положительный, или запрашивает другой ввод, если значение отрицательное.

 # function that asks for player input in kg
    def weight_input () :
      return float (input ("Enter valid weight: "))

    weight_kg = weight_input()

    # formula to convert kg into pounds
    def weight_conversion():
      return 2.2 * weight_kg

    weight_pds = weight_conversion ()

    def weight_info () :
      while True :
        weight_kg
        if weight_kg > 0 : # if weight > 0 we return the weight in pds
          return weight_pds
        else :
          print("Invalid weight.")
          continue  # go back to the start of the loop and ask for input
      return weight_pds

    print (weight_info () )

Моя программа возвращает правильное значение, если это же значение положительное. Однако, когда я ввожу отрицательное число с плавающей точкой, моя программа печатает «Неверный вес» навсегда. Мне говорили, что когда я пишу продолжить внутри цикла, я возвращаюсь к началу того же цикла, однако я не могу остановить свою программу.

Ответы [ 2 ]

1 голос
/ 24 октября 2019

Причина в том, что это печать «Неверный вес». навсегда, потому что вы берете ввод только один раз и используете его каждый раз, то есть weight_kg никогда не обновляется после ввода ввода.

Попробуйте код

# function that asks for player input in kg
def weight_input () :
  return float (input ("Enter valid weight: "))


# formula to convert kg into pounds
def weight_conversion(weight_kg):
  return 2.2 * weight_kg

def weight_info () :
  while True :
    weight_kg = weight_input()
    if weight_kg > 0 : # if weight > 0 we return the weight in pds
      return weight_conversion (weight_kg)
    else :
      print("Invalid weight.")
      continue  # go back to the start of the loop and ask for input
  return weight_pds

print (weight_info () )

СОВЕТ: При использовании функций не используйте глобальные переменные,Они сохранят последние значения, и если ваш код нуждался в том, чтобы они менялись / сбрасывались при каждом вызове. Предпочитаю использовать параметры функции

0 голосов
/ 24 октября 2019

Оператор continue используется для пропуска остальной части кода внутри цикла только для текущей итерации. Цикл не завершается, а продолжается со следующей итерации.

Оператор break завершает цикл, содержащий его. Управление программой переходит к оператору сразу после тела цикла. Если оператор break находится во вложенном цикле (цикл внутри другого цикла), break прервет самый внутренний цикл.

Так что в вашем случае с continue вы просто возвращаетесь к while, все еще с неправильным вводом.

Вы запрашиваете ввод один раз, вам нужно запрашивать его снова, если ввод неправильный.

...