Найти - Пользователи
Полная версия: Странное поведение в цикле FOR
Начало » Центр помощи » Странное поведение в цикле FOR
1
kostyakrasniy
 import random
line = int(input('Сколько должно быть строк? '))
column = int(input('Сколько должно быть столбцов? '))
a = [[0] * column] * line
print(a)
for r in range(line) :
    for c in range(column) :
        print('строка ' + str(r+1) + ' ряд ' + str(c+1))
        a[r][c] = random.randint(1, 100)
        print(a[r][c], '!')
        print(a)        
    print(a)    
print(a)


почему так происходит???
Romissevd
Есть такое поведение у python. Так как создаются ссылки на один и тот же объект. И потом этот объект меняется. Здесь немного расписано
 >>> a = []
>>> b = []
>>> a.append(1)
>>> a
[1]
>>> b
[]
>>> a = b = []
>>> a.append(1)
>>> b
[1]
>>> a
[1]

В твоем случае нужно сделать так
 import random
line = int(input('Сколько должно быть строк? '))
column = int(input('Сколько должно быть столбцов? '))
a = [[0 for _ in range(column)][:] for x in range(line)][:]
print(a)
for r in range(line) :
    for c in range(column) :
        print('строка ' + str(r+1) + ' ряд ' + str(c+1))
        a[r][c] = random.randint(1, 100)
        print(a[r][c], '!')
print(a)
Или же вообще так
 import random
line = int(input('Сколько должно быть строк? '))
column = int(input('Сколько должно быть столбцов? '))
print([[random.randint(1, 100) for _ in range(column)] for x in range(line)])
kostyakrasniy
Romissevd
Есть такое поведение у python. Так как создаются ссылки на один и тот же объект. И потом этот объект меняется. Здесь немного расписано

Спасибо, мил человек! Первый варик лучше, так как можно и значения в списках спросить:

 line = int(input('Сколько должно быть строк? '))
column = int(input('Сколько должно быть столбцов? '))
a = [[0 for y in range(column)][:] for x in range(line)][:]
print(a)
for r in range(line) :
    for c in range(column) :
        print('строка ' + str(r+1) + ' ряд ' + str(c+1))
        a[r][c] = int(input('Введите значение для ' + str(c+1) + '  ряда ' + \
                            str(r+1) + ' строки '))
               
    print(a)    
print(a)
amigo11
import random
a = int(input())
b = int(input())
c = [ for j in range(b)]
for i in c:
print(i)
[code python][/code]
AD0DE412
amigo11 чего бы вы не хотели бы этим кодом выразить у вас он с ошибкой
 import random
a = int(input())
##зачем здесь b
b = int(input())
##здесь у вас ошибка
##c = [ for j in range(a)]
##нужно так
c = [j for j in range(a)]
for i in c:
    print(i)
##и если цель напечатать с то можно было бы так
print(c)
##или так
[print(j) for j in c]

kostyakrasniy
есть такая штука как f-string которая вам я думаю была бы удобней
 a = int(input())
b = int(input())
print(f'первое значение {a} // второе значение {b}')
amigo11
AD0DE412
amigo11 чего бы вы не хотели бы этим кодом выразить у вас он с ошибкой
Я отправлял код, без ведения о существовании форматирования. И действительно код отобразился не так как я его предоставил.
amigo11
AD0DE412
amigo11 чего бы вы не хотели бы этим кодом выразить у вас он с ошибкой
AD0DE412
amigo11
код отобразился не так как я его предоставил
да ладн эт просто подпись ну чтоб не об'яснять долго ну и там на самом деле была ошибка
я так понимаю должно было быть что то вроде

 import random
a = int(input())
b = int(input())
c = iter([[random.randint(1, 9) for i in range(a)] for j in range(b)])
[print(next(c)) for i in range(b)]

зы
kostyakrasniy
Спасибо, дорогие.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB