Цикл for не подсчитывает количество символов, сгенерированных правильно

#python

#python

Вопрос:

вот мой код:

 import random
y = 0
while True:
    input('press enter to generate')
    for x in range(25):
        y = random.randint(0,1)
        if x == 5 or x == 10 or x == 15 or x == 20 or x == 25:
            print(f'{y}')
        else:
            print(f'{y}',end='')
  

и вот результирующий результат:

 press enter to generate
011011
11011
00000
01101
1011press enter to generate
  

я пытаюсь сделать его чистым и в формате 5×5, и я попытался изменить количество повторов в цикле и положение новых строк.

желаемый результат:

 00000
00000
00000
00000
00000
  

числа могут быть 1/0

Комментарии:

1. можете ли вы показать нам, каков желаемый результат? как бы вы хотели, чтобы это выглядело?

2. @snatchysquid добавит редактирование

3. вот чистая версия вашего кода на данный момент, возможно, вы захотите использовать это вместо

4. Это проще с двумя циклами (строки и столбцы).

Ответ №1:

Количество, которое вы проверяете, отклонено на единицу. range(25) выполняется от 0 до 24 , поэтому последний элемент каждой строки встречается в 4, 9, 14, 19 и 24. Вы можете исправить это с помощью:

 if x == 4 or x == 9 or x == 14 or x == 19 or x == 24:
  

или проще:

 if x in (4, 9, 14, 19, 24):
  

Вы также могли бы сделать:

 if (x 1) % 5 == 0:
  

Комментарии:

1. почему бы не использовать % (modulu)?

Ответ №2:

Вы можете вообще избежать цикла for, используя numpy.

 import numpy as np
while True: 
    input('npress enter to generate')
    y = np.random.randint(0,2,25).reshape(5,5)
    print(np.array2string(y).
        replace('[',' ').replace(']','').replace(' ','')) 
  

Вывод:

 press enter to generate
10001
01010
10100
01010
10111
  

Ответ №3:

Изменить range на range(1, 26) :

 y = 0
while True:
    input('press enter to generate')
    for x in range(1, 26):
        y = random.randint(0, 1)
        if x % 5 == 0:
            print(f'{y}')
        else:
            print(f'{y}', end='')
  

Вы можете использовать x % 5 == 0 вместо того, что у вас есть.

Комментарии:

1. нажмите enter, чтобы сгенерировать 0 00010 00110 11100 01110 11101 нажмите enter, чтобы сгенерировать вывод из этого кода

2. @7abc778 Что вы имеете в виду? Приведенный выше код работает так, как ожидалось.