Помогите понять, почему не правильно работает, пожалуйста
Программа должна создать массив из N (где N - четное) случайных целых чисел из отрезка [-a; b] таким образом, чтобы отрицательных и положительных элементов там было поровну и не было нулей. При этом порядок следования элементов должен быть случаен (т. е. не подходит вариант, когда в массиве постоянно выпадает сначала 6 положительных, а потом 6 отрицательных чисел или же когда элементы постоянно чередуются через один и пр.). Вывести полученный массив на экран.
from random import randint
a = int(input("Введите положительное число a = "))
b = int(input("Введите положительное число b = "))
n = int(input("Введите чётное количество элементов массива: "))
array = []
k1 = n / 2 #количество положительных элементов
k2 = n / 2 #количество отрицательных элементов
for i in range(n):
if k1 > 0 or k2 > 0:
array.append(randint(-a, b))
if array[i] > 0:
k1 -= 1
elif array[i] < 0:
k2 -= 1
else:
array[i] = randint(-a, b)
if array[i] > 0:
k1 -= 1
elif array[i] < 0:
k2 -= 1
print(*array)
Ответы (1 шт):
Можно сделать гораздо проще:
- добавить в список нужное число положительных случайных элементов
- добавить в список нужное число отрицательных случайных элементов
- перемешать список с помощью функции
random.shuffle
В вашем же коде в случае, если выпадает 0 или если выпадает уже лишний элемент не того знака, что нужно, нужно было бы "бросать кости" до победного конца - пока не выпадет допустимый элемент, а вы только один раз пытаетесь исправить результат, и только в случае нуля, а этого может быть недостаточно - и ноль может выпасть два и более раз подряд и на перекос в числе элементов нужного знака вы проверку не делаете.