Уведомления

Группа в Telegram: @pythonsu

#1 Май 30, 2020 22:42:16

kostyakrasniy
Зарегистрирован: 2020-05-30
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Странное поведение в цикле FOR

 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)


почему так происходит???

Прикреплённый файлы:
attachment Снимок экрана 2020-05-30 в 22.39.42.png (32,8 KБ)

Офлайн

#2 Май 30, 2020 23:50:16

Romissevd
От: Счастье
Зарегистрирован: 2015-03-01
Сообщения: 533
Репутация: +  76  -
Профиль   Отправить e-mail  

Странное поведение в цикле FOR

Есть такое поведение у 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)])

Офлайн

#3 Май 31, 2020 01:49:16

kostyakrasniy
Зарегистрирован: 2020-05-30
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Странное поведение в цикле FOR

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)

Офлайн

#4 Июнь 1, 2020 00:27:21

amigo11
Зарегистрирован: 2020-04-29
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Странное поведение в цикле FOR

import random
a = int(input())
b = int(input())
c = [ for j in range(b)]
for i in c:
print(i)

[code python][/code]

Отредактировано amigo11 (Июнь 1, 2020 15:10:49)

Офлайн

#5 Июнь 1, 2020 14:47:05

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

Странное поведение в цикле FOR

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}')



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Отредактировано AD0DE412 (Июнь 1, 2020 14:50:50)

Офлайн

#6 Июнь 1, 2020 15:15:56

amigo11
Зарегистрирован: 2020-04-29
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Странное поведение в цикле FOR

AD0DE412
amigo11 чего бы вы не хотели бы этим кодом выразить у вас он с ошибкой
Я отправлял код, без ведения о существовании форматирования. И действительно код отобразился не так как я его предоставил.

Отредактировано amigo11 (Июнь 1, 2020 15:21:38)

Офлайн

#7 Июнь 1, 2020 15:20:36

amigo11
Зарегистрирован: 2020-04-29
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Странное поведение в цикле FOR

AD0DE412
amigo11 чего бы вы не хотели бы этим кодом выразить у вас он с ошибкой

Прикреплённый файлы:
attachment 20200601_141901.png (35,3 KБ)

Офлайн

#8 Июнь 2, 2020 08:59:20

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

Странное поведение в цикле FOR

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)]

зы



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Отредактировано AD0DE412 (Июнь 2, 2020 09:03:11)

Офлайн

#9 Июнь 3, 2020 12:39:41

kostyakrasniy
Зарегистрирован: 2020-05-30
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Странное поведение в цикле FOR

Спасибо, дорогие.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version