Python 2, в то время как l oop терпит неудачу во второй итерации - PullRequest
2 голосов
/ 03 апреля 2020

Я создал программу, которая запрашивает у пользователя предположение о температуре (температура пространства), затем вычисляет спектр черного тела для этой температуры и возвращает среднеквадратичное отклонение root против измеренных данных. Затем пользователю предлагается снова угадать:

Вот набранный код, поскольку я пока не могу встраивать изображения:

while True:
  temperature_guess = input("What is the temperature of the black body spectrum of space (in kelvin)?\
  Type 'stop' when you're happy with your estimate.")

  if temperature_guess == "stop":
    break

  else:
    T_guess = float(temperature_guess)

    print T_guess

    # Calculate intensities produced from measured wavelengths and user guess temperature

    intensities_guess=radiation(measured_lambda_metres,T_guess)

    print intensities_guess

    # Calculate root mean square deviation from measured values

    rmsd = rmsd(measured_intensity, intensities_guess)

    print "For your guessed temperature of" , T_guess , "kelvin, \
    the root mean square deviation from measured intensity data is" , "%.4g" %rmsd , \
    "to 4 significant figures."

Программа работает нормально за одну итерацию (одно предположение о температуре) , хорошо ломается, если я говорю, чтобы она остановилась, но если я ввожу другую температуру, она останавливается на полпути Я могу видеть из команд печати, что он принимает входную температуру и рассчитывает интенсивность на основе этого, но терпит неудачу в вычислении среднеквадратичного отклонения root.

Каким-то образом функции "rmsd" не нравится то, что она видит на втором go. Зачем это делать? Зачем останавливаться в середине?

1 Ответ

2 голосов
/ 03 апреля 2020

Вы, кажется, перезаписываете свою функцию rmsd ее возвращаемым значением. Используйте другое имя переменной в l oop, и у вас не будет этой проблемы:

while True:
    # ...

    rmsd_value = rmsd(...)   # don't do rmsd = ... here, or you overwrite the function!

    # ...
...