Написал код для распада атомов, не могу вывести промежуточные цифры
Этот код пытается уменьшить кол-во атомов с шансом 0,5.Цикл состоит из самого кол-ва атомов, например, я беру 10 атомов, значит цикл в этом случае равен 10, спустя 10 проверок цикл поменяется, и в конце работы цикла ил, если не повезет, то до него записывается то число, что получилось в ходе работы кода. Он может убрать 1 атом или все 7 за цикл, мне нужно в ответ указать все числа, что получились за каждый цикл.
Пример работы: было 10 -прошло 10 циклов, стало 5,прошло 5 циклов, получилось 1.В ответе должно быть 10(начальное число),5,1.
import random
a=[]
b=int(input())
i=0
l=0
z=b
p=0
k=b
while i<b:
a.append(1)
i+=1
while k>z/100:
for x in range(1,len(a)+1):
if k<=z/100:
break
print(x,"q")
p+=1
print(p,"p")
f=random.randint(1,2)
if f ==1:
l+=1
k-=1
a.remove(1)
print(len(a))
print(l,len(a),p//10)
Ответы (1 шт):
Нужен дополнительный массив, куда будет добавляться текущее количество атомов после каждого «этапа» распада.
from random import random
atoms_init = 10 # int(input('Initial atoms > '))
atoms_curr = atoms_init
decay_info = [atoms_init] # Сюда будет записываться число атомов на каждом «этапе»
while atoms_curr > atoms_init / 100:
for _ in range(atoms_curr):
if atoms_curr <= atoms_init / 100:
break
if random() < 0.5: # дает дробные числа между 0 и 1. Если < 0.5 → попало в 50%
atoms_curr -= 1
decay_info.append(atoms_curr)
print('Done:', *decay_info) # Done: 10 7 3 2 2 2 0
Или, можно было без массива, прямо печатать print(atoms_curr, end = ' ') на каждой итерации, вместо append.
P.s. Трудно было вникать в однобуквенный код :) Для вас из контекста задачи очевидно, а со стороны не понятно, что за i, l, z, b, p, k. Поэтому принято давать переменным более осмысленные имена (или, при необходимости, оставлять расшифровку аббревиатур в виде комментариев)