По какой причине этот цикл while не генерирует вывод? - PullRequest
0 голосов
/ 12 февраля 2019

Я новичок в Python и пытаюсь учиться, выполняя небольшие проекты.

Проблема

Стронций-90, радиоактивный элемент, который является частью радиоактивных осадков от ядерных взрывов, имеетпериод полураспада 28 лет.Это означает, что определенное количество стронция-90 будет испускать радиоактивные частицы и разлагаться до половины его размера каждые 28 лет.Сколько лет требуется для того, чтобы 100 грамм стронция-90 распались до менее 1 грамма?

Мой код ввода:

full_life = int(100)
while full_life < int(1):
      full_life -= 0.5*full_life
      year +=28
      print("The decay time is:",year)

При выполнении вышеизложенного вывод не генерируется.Почему это так?что мне не хватает?

Ответы [ 4 ]

0 голосов
/ 12 февраля 2019

full_life представляет количество стронция, которое у вас есть.Первоначально у вас есть 100 грамм, и вы начинаете с года 0.

year = 0
full_life = 100

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

while full_life >= 1:
    full_life /= 2
    year +=28
print("The decay time is:",year)

Каждый раз, когда условие выполняется, вы делите full_life пополам и увеличиваете year к 28 годам.После завершения цикла вы можете вывести общее количество лет до условия, потому что ложно.


Обратите внимание, что это не совсем правильно, поскольку масса не остается постоянной в течение 28 лет, а затем сразупадение в 2 раза. Это наиболее очевидно, если вы начнете с 1 грамма стронция.Для того чтобы любой из этого распался, не требуется 28 лет.

Что вам действительно нужно сделать, это выбрать гранулярность (час, день, месяц и т. Д.) И вычислить изпериод полураспада, сколько образца будет распадаться за это время.Затем вы можете уменьшить full_life на меньшие величины, увеличив при этом время, чтобы выяснить, когда full_life окончательно падает ниже 1.

0 голосов
/ 12 февраля 2019

Сразу после того, как вы сделали full_life 100, проверка условия в цикле while сразу становится ложной (поскольку 100 <1 ложно).Так как это ложно, вы не пройдете через цикл.Я представляю, что вы ищете, чтобы изменить знак с <на>

full_life = int(100)
while full_life < int(1):
    do stuff

на

full_life = int(100)
while full_life > int(1):
    do stuff
0 голосов
/ 12 февраля 2019

После того, как вы измените логику цикла while следующим образом:

while full_life>1:
   do something

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

year=0
0 голосов
/ 12 февраля 2019

в то время как логика цикла обратная должна быть:

while full_life > int(1):

...