Форум сайта python.su
Задание такое: сделать 5 строк текста
с помощью random.choice достать из списков по одному слову, и с помощью random.randint определить какой структуры будет строка: 1) артикль + существительное + глагол + прилагательное; 2) артикль+ существительное + глагол
(задание №3 из книги Марка Саммерфилда)
код:
art = ["the", "a"] sush = ["cat", "dog", "woman", "man", "banana"] glag = ["run", "jumped", "going", "kill"] pril = ["aromatic", "blunt", "cold"] spisok1 = [art, sush, glag, pril] spisok2 = [art, sush, glag] import random g = 0 d = 0 w = 0 while g < 5: z = [] x = [] i = random.randint(1,2) if i == 1: while d < 4: z.append(random.choice(spisok1[w])) w += 1 d += 1 print(z) else: while d <3: x.append(random.choice(spisok2[w])) w += 1 d += 1 print(x) g =+1
Офлайн
Первая грубая ошибка в последней строке
g =+1
Отсюда зацикливание.
Далее, пустые списки, потому что переменные w и d после первого прохождения цикла while уже имеют значения не равные 0.
Измените последнюю строку на
g += 1
и добавьте
w = 0
d = 0
P.S. Зачем Вам while? Может стоит изменить его на for? И в задаче нужно получить строки, а не списки.
Отредактировано krot (Апрель 30, 2017 10:11:46)
Офлайн
спасибо, понял уже что нужны не списки, просто интересно было что именно в этом коде не так
Офлайн
Доброго времени суток!
Сейчас разбираюсь с генераторами списков по примерам из книги Лутца, а именно получение доступа к строкам и столбцам массива(списка). До конца не могу понять некоторые моменты. Прошу всех неравнодушных внести ясность.
Итак, есть следующий список (он же массив) :
1. Исходный список и манипуляции с ним в интерпретаторе
Больше всего вопросов у меня по этой инструкции : Выборка элементов матриц по диагонали
Ниже я приведу скриншоты со своими пометками, как я понимаю тот или иной фрагмент кода. Собственно у меня к Вам две просьбы: 1) как получить список содержащий элементы по диагонали 3, 5, 7 или 7, 5, 3 ?; 2) правильно ли я понимаю отдельные фрагменты кода ?
2. Как я понимаю запись M
3. Как я понимаю запись i
4. Как я понимаю запись
И еще такой вопрос. Как интерпретатор понимает что ему нужно проходиться по столбцам, а не по строкам в случае с : Выборка элементов второго столбца матрицы
Этот алгоритм предусмотрен в логике самих генераторов или как ?
Прошу прощения если перемудрил с формулировками или с способом изложения вопроса. Старался объяснить как можно понятнее.
Отредактировано citizen404 (Июнь 27, 2017 11:02:48)
Офлайн
citizen404
1) как получить список содержащий элементы по диагонали 3, 5, 7 или 7, 5, 3 ?;
diag2 = [M[2-i][i] for i in [0,1,2]]
citizen404
И еще такой вопрос. Как интерпретатор понимает что ему нужно проходиться по столбцам, а не по строкам
M[тут индекс строки начиная с 0][тут индекс столбца начиная с 0]
Отредактировано krok64 (Июнь 27, 2017 11:30:19)
Офлайн
krok64M[тут индекс строки начиная с 0][тут индекс столбца начиная с 0]
M[1][1]
...for i in [0, 1, 2]
[M[2-i][i]
Офлайн
citizen404да
т.е. для числа 5 соответствует индекс
? Я все правильно понял ?M[1][1]
citizen404это значения которые принимает переменная i. Т.е. переменная i сначала равняется 0, потом 1 и наконец 2. Как интерпретировать эту переменную решать тебе. В данном примере i отвечает за выбор строки и столбца. Например когда
И что тогда значат индексы 0, 1, 2 в фрагменте кода :Это индексы строки или столбца, или самого элемента матрицы ?...for i in [0, 1, 2]
i=0 мы выбираем M[2][0], когда i=1, выбираем M[1][1] и наконец i=2 и мы выбираем M[0][2]
citizen404да
число 2 только потому, что максимальный индекс который может быть для столбца и строки данного массива равен двум ??? Верно ?
Отредактировано krok64 (Июнь 27, 2017 12:55:54)
Офлайн
krok64, огромное Вам спасибо! Очень помогли.
Офлайн