CiaraMc96 Ответов: 2

Что случилось с моей петлей for?


Я пытаюсь взять диапазон частот от А до В от пользователя и преобразовать этот диапазон в длину волны и энергию. Я хочу увеличить его в 10^2. У меня есть вход, но я не могу заставить свой цикл for работать. Он продолжает говорить, что моя энергия равна 0

Что я уже пробовал:

from scipy.constants import Planck

c=299792458

for i in range(a,b,10**5):
    energy=Planck*i
    wavelength=c/i
    
      
    print('{0:>18}'.format(i),'|'\
          '{0:>18.7f}'.format(wavelength), '|', \
          '{0:>18.7f}'.format(energy))


Я тоже пробовал это

from scipy.constants import Planck

def energy(x,dx):
    return(Planck*x)
    
def wavelength(x,dx):
    return(c/x)

c=299792458
dx=10**5

for i in range(a,b,dx):
    x=i
    c_wave=wavelength(x,dx)
    c_energy=energy(x,dx)
    
    print('{0:>18}'.format(i),'|'\
          '{0:>18.7f}'.format(c_wave), '|', \
          '{0:>18.7f}'.format(c_energy))

Я не включил в него части получения a и b, но есть раздел для пользователя, чтобы ввести a и b

2 Ответов

Рейтинг:
0

Richard MacCutchan

Я думаю, что у вас есть свои значения диапазона вокруг неправильного пути. Правильный путь-это

range(start, end, step)

В вашем примере значение шага равно 100 000, поэтому вполне вероятно, что он будет выполнять только один расчет.


CiaraMc96

Шаги должны были быть 10^2, я просто неправильно их прочитал. Я заставил его работать, чтобы напечатать все линии для энергии, но все они по-прежнему говорят 0. Диапазон кажется рабочим, потому что он печатает все значения между a и b с шагом между ними и вычисляет правильную длину волны для каждого значения

Richard MacCutchan

Затем вам нужно проверить каждое вычисление, чтобы увидеть, какие значения возвращаются. Добавьте несколько операторов печати, чтобы вы могли видеть все значения на каждом шаге.

Рейтинг:
0

CPallini

"Проблема" заключается в том, что Доска- это константа.
Она (и энергия одиночного фотона) очень и очень мала (около 6 * 10-34).
В указанном вами формате код показывает только нули.
Это работает для меня

import scipy.constants as const

for f in range(1,10**5, 10**2):
    energy=const.Planck*f
    wavelength=const.c/f
    print('{0:>18}'.format(f),'|'\
          '{0:>18.7f}'.format(wavelength), '|', \
          '{:>.2E}'.format(energy))
Выходные данные (выдержка из)
('                 1', '| 299792458.0000000', '|', '6.63E-34')
('               101', '|   2968242.1584158', '|', '6.69E-32')
('               201', '|   1491504.7661692', '|', '1.33E-31')
('               301', '|    995988.2325581', '|', '1.99E-31')
('               401', '|    747612.1147132', '|', '2.66E-31')
('               501', '|    598388.1397206', '|', '3.32E-31')
('               601', '|    498822.7254576', '|', '3.98E-31')
('               701', '|    427663.9914408', '|', '4.64E-31')
('               801', '|    374272.7315855', '|', '5.31E-31')
...