0
array = []
import random
for i in range(10):
    i = i + 1
    random_number = random.randint(1,100)
    array.append(random_number)
    while i == 10:
        break
if i == 10:
    print(array)

Помогите, пожалуйста, упростить код. После заполнения масива на 10 значений надо напечатать это массив. Желательно без использования оператора if.

Используется Python 3.5

jfs
  • 52,361

3 Answers3

2

Подытожим все сказанное и не сказанное: (учитывая, что Вы видимо, новичок, начнем по-порядку):

  1. Как подметил @insolor: не нужно увеличивать переменную i на единицу каждый раз, она и так будет увеличиваться.
  2. Нужды в цикле while нет, цикл for сам завершить после 10 итераций («повторений» если проще выражаться). И в конструкции if тоже нет смысла — вполне логично, что после завершения цикла переменная i будет равна 10: тут просто без вариантов.

Т.е. код можно упростить до такого:

array = []
import random
for i in range(10):
    random_number = random.randint(1,100)
    array.append(random_number)
print(array)

Далее, есть такая вещь как «Генераторы списков», если Вы не знаете, что это Вам стоит почитать об этом, это не сложно.

Простой пример генераторов списков:

array = [1, 2, 4, 5, 6, 98, 123, 45]
# % — операция вычисления остатка от деления 
# если остаток от деления на 2 равен единице, то число нечетно
only_odd_numbers = [n for n in array if n % 2 == 1]
print(only_odd_numbers ) # [1, 5, 123, 45]

С помощью генераторов списка можно еще больше упростить код:

import random
array = [random.randint(1,100) for i in range(10)]
print(array)

UPDATE:

Есть еще такая функция как random.choices. Суть этой функции на примерах:

import random
arr1 = random.choices([1, 2], k=10)
arr2 = random.choices(range(1, 10))
arr3 = random.choices(range(1, 100), k=10)
arr4 = random.choices(range(1, 10), k=20)

print(arr1)  # [1, 1, 1, 2, 2, 1, 2, 1, 2, 2]
print(arr2)  # [8]
print(arr3)  # [60, 35, 80, 26, 7, 65, 58, 9, 77, 2]
print(arr4)  # [1, 1, 6, 4, 2, 6, 7, 2, 2, 2, 2, 1, 1, 6, 1, 7, 8, 3, 5, 3]

Обратите внимание: arr1 содержит только единицы и двойки.

Таким образом: random.choices возвращает список, состоящий из определенного количества (определяемого параметром k) элементов, каждый из которых является случайным элементом последовательности, которую мы передали в первом аргументе.

UPDATE Важно замечание сделал @jfs: «randint включает правую границу, а range — нет»

Ruberoid
  • 351
  • 1
  • 9
  • 1
    обратите внимание randint включает правую границу, а range — нет. random.choices(range(1,101),k=10) – jfs Mar 03 '18 at 08:08
1

У вас в любом случае список заполняется 10-ю значениями, поэтому if не нужен. Просто выводите список с помощью print после цикла.

Что еще не нужно:

  • i = i + 1 т.к. i и так как у вас в цикле i и так на каждой итерации автоматически становится на 1 больше.
  • while с break внутри цикла for в данном случае не имеет смысла. Цикл for и так закончит выполнение после 10 итераций. Просто уберите while.

Итого остается:

import random

array = []

for i in range(10):
    random_number = random.randint(1,100)
    array.append(random_number)

print(array)
insolor
  • 49,104
0

Не изобретайте велосипед, в Python всё включено:

import random
random.sample(range(1, 100), 10)

range(from, to) вернёт итератор на множество целых чисел от from до to с шагом 1, а sample(population, k) выберет k случайных элементов из множества population.

https://docs.python.org/3/library/random.html#random.sample

fori1ton
  • 23,403
  • Если человек еще не понимает как работает цикл for и другие базовые конструкции языка, то итераторам его учить как-то рановато. – insolor Mar 03 '18 at 06:37
  • 1
    В вашем решении есть одна проблема, в данном случае, конечно все хорошо, но что если нужен массив из 1000 случайных чисел между 0 и 9? random.sample возвращает только список из уникальных элементов. – Ruberoid Mar 03 '18 at 07:00
  • Вы правы, конечно. Но, как говорится, "без нормального ТЗ результат будет ХЗ". ТЗ было "упростите код, желательно без if", результат ему полностью удовлетворяет. Никаких требований к качеству сгенерированных чисел предъявлено не было. Зато на момент написания этого комментария у ТСа есть целых 3 (не считая его собственного) варианта решения его задачи. – fori1ton Mar 03 '18 at 07:12
  • В принципе, да, Вы правы. Но ожидать нормального ТЗ от человека только начинающего учить Python, согласитесь, вряд ли стоит. – Ruberoid Mar 03 '18 at 07:20