Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.70/43: Рейтинг темы: голосов - 43, средняя оценка - 4.70
1 / 1 / 0
Регистрация: 27.02.2020
Сообщений: 101

Изучаем Python по книге Лутца

17.04.2020, 12:37. Показов 9197. Ответов 87
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
на 490 стр 5 того издания 1 части Лутца встречаются первые задания по практики...
1. Написание базовых циклов. В данном упражнении предлагается поэкспериментировать с циклами for.
а) Напишите цикл for, который выводит код ASCII каждого символа в строке по
имени S. Для преобразования символа в целочисленный код ASCII используйте встроенную функцию ord (символ). Формально функция ord в Python З.Х
возвращает кодовую точку Unicode, но если вы ограничите содержимое строки символами ASCII, то будете получать обратно коды ASCIL (Опробуйте ее
интерактивно, чтобы посмотреть, как она работает.)
Python
1
2
3
4
s = 'spam'
for i in s:
    v = ord(i)
    print(v, end=' ')
б) Далее измените цикл для вычисления суммы кодов ASCII всех символов в строке.

здесь что то пошло не так..
Python
1
2
3
4
5
s = 'spam'
for i in s:
    v = ord(i)
    print(v, end=' ')
print(sum(v))
1
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.04.2020, 12:37
Ответы с готовыми решениями:

Объясните текст из книги Лутца "Изучаем python"
В книге написано: В текущей реализации python это ещё и программный пакет который называется интерпретатором. Интерпретатор - это такой...

М. Лутц Изучаем Python. Том 1
Добрый день! Заказал по ошибке 2 книги (5 издание, 1 том) с ozon (...

Лутц Марк - Изучаем Python. 5 издание
Как ориентироваться в исходниках? https://www.oreilly.com/library/view/learning-python-5th/9781449355722/ ...

87
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
31.05.2020, 15:20
Студворк — интернет-сервис помощи студентам
coa3, У Лутца, в главе посвященной спискам, есть таблица наиболее распространенных средств для работы со списками. Но там просто перечисляются команды. Я же дополнил список пояснениями к каждой команде, что бы уже из этого списка можно было выбрать нужную команду. И после этого смотреть ее синтаксис в справочнике, ссылку на который я тебе давал.

Таблица 8.1. Распространенные списковые литералы и операции

Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
Операция                                         Описание
 
L = []                        Пустой список
 
L = [123, 'abc', 1.23, {}]   Четыре элемента: индексы 0..3
 
L = ['Bob', 40.0, ['dev', 'mgr']]  Вложенные подсписки
 
L = list('spam')              Список элементов итерируемого объекта # [‘s’, ‘p’, ‘a’, ‘m’]
 
L = list(range(-4, 4))          Cписок последовательных целых чисел # [-4, -3, -2, -1, 0, 1, 2, 3]
 
L[i]                              Индекс (аналогичен срезу состоящему из одного элемента. При присвоении заменяет элемент в отличие от метода 
                                  insert, который вставляет элемент раздвигая список).
L[i][j]                         Индекс индекса
 
L[i:j]                           Срез
 
len(L)                          Длина
 
LI + L2                        Конкатенация
 
L * 3                            Повторение
 
for х in L: print (х)         Итерация
 
3 in L                            Членство
 
                                   Методы: увеличение
 
L. append(4)                Добавляет элемент в конец списка
 
L.extend([5,6,7] )        Дополняет список элементами из итерируемого объекта, добавляя их в конец.
 
L.insert(i, X)                 Вставляет элемент раздвигая список (в отличие от L[i] = X , который заменяет элемент в списке)
 
                                    Методы: поиск
 
L.index(X)                   Находит индекс указанного элемента
 
L.count(X)                    Возвращает количество вхождений указанного элемента в список
 
                                  Сортировка
 
L.sort()                        Сортирует элементы списка на месте, возвращая при этом None.
 
sorted()                       Возвращает новый отсортированный список, составленный из элементов итерируемого объекта.
 
                                   Обращение
 
L.reverse()                   Перестраивает элементы списка в обратном порядке. Модифицирует исходный объект на месте, 
                                   возвращая при этом None.
reversed()                    Функция reversed возвращает обратный итератор по указанной последовательности.
 
L.copy()                        Копирование (Python 3.3+)
 
L.clear()                        Очистка (Python 3.3+)
 
                                    Методы: уменьшение
 
L.pop(i)                        Возвращает элемент [на указанной позиции], удаляя его из списка. По умолчанию удаляет 
                                         последний элемент.
L. remove(X)                 Удаляет из списка указанный элемент. Удаляется только первый обнаруженный в списке элемент.
 
                                     Операторы: уменьшение
 
del L[i]                          Инструкция удаляет элемент по индексу.
 
del L[i:j]                        Инструкция удаляет срез.
 
L[i:j] = []                       Удаление среза.
 
L[i] = 3                          Присваивание по индексу
 
L[i:j] = [4,5,6]               Присваивание по срезу
 
L = [x ** 2 for x in range (5) ]    Списковые включения
 
list(map(ord, 'spam'))          Отображения      # [115, 112, 97, 109]
 
                                             (главы 4, 14, 20)
1
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
02.06.2020, 14:53
coa3, Я, полазив по интернету, наконец разобрался с тем, что такое хеширование. Это важно понимать при создании словарей. Так как ключами словаря могут быть только хешируемые объекты.
Не буду пока забивать тебе голову теорией хеширования, разберем ее как нибудь потом, при случае.
Хешируются только неизменяемые объекты, изменяемые не хешируются. Поэтому ключами в словаре могут быть числа, строки, кортежи и другие неизменяемые объекты.
А например списки и множества (если они не frozenset) не могут быть ключами.
А вообще, если есть сомнение, можно ли использовать объект в качестве ключа в словаре (например экземпляр класса, которые ты будешь изучать позже), то следует использовать встроенную функцию hash(object). если она возвращает значение хеша, то значит объект хешируется.
Python
1
2
3
>>> hash('q')
     
7484775824700074398
Или для кортежа
Python
1
2
>>> hash((1,2,3))
2528502973977326415
Если же эта функция возбуждает ошибку, как например для списка
Python
1
2
3
4
5
>>> hash([1,2,3])
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    hash([1,2,3]
TypeError: unhashable type: 'list'
, то такой объект нельзя использовать в качестве ключа для словаря, так как в коде будет возникать ошибка.

Добавлено через 7 минут
Кстати по поводу экземпляров класса. Для некоторых классов их экземпляры хешируются, а для некоторых нет. Поэтому важно, прежде чем использовать экземпляры класса в качестве ключей словаря, проверять их на хеширование с помощью функции hash(object). Но ты пока голову себе этим не забивай, пока не начнешь изучать ООП (объектно ориентированное программирование) во втором томе книги Лутца.
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
03.06.2020, 15:18
coa3, Я освежал в памяти работу с функцией zip(). Ее синтаксис:
Python
1
2
3
4
zip(*iterables) -> 3.0 iterator 2.0 list
 
iterables : Итерируемые объекты, элементы которых следует упаковать в кортежи. Если передана одна последовательность, вернётся итератор по кортежам, состоящим из единственного элемента. Если последовательности не переданы, возвращается пустой итератор.
Итератор останавливается, когда исчерпана кратчайшая из последовательностей.
Пример:
Python
1
2
    list(zip([1, 2, 4], [4, 5], [5, 7]))  
    # [(1, 4, 5), (2, 5, 7)]
Если итерируемый объект один, то получаемые кортежи будут содержать по одному элементу
Python
1
2
>>> list(zip([1, 2, 3]))
[(1,), (2,), (3,)]
В справочнике, ссылку на который я давал, есть такой пример:
Дан список
Python
1
seq = [1,2,3,4,5,6]
Разбить его на пары [(1, 2), (3, 4), (5, 6)] , а также на тройки [(1, 2, 3), (4, 5, 6)]
Там же дано решение
Python
1
2
3
4
5
>>> seq = [1,2,3,4,5,6]
>>> list(zip(*[iter(seq)] * 2))
[(1, 2), (3, 4), (5, 6)]
>>> list(zip(*[iter(seq)] * 3))
[(1, 2, 3), (4, 5, 6)]
Я когда то разобрался как это работает, но сейчас не мог понять и вновь пришлось разбираться.
Я объясню, но не расстраивайся, если не поймешь. Для понимания этого примера нужен опыт.
Главное запомни этот пример, позволяющий разбивать последовательность на пары, тройки, четверки элементов и так далее.
Итак объясняю.
Во первых нужно разобраться, какая звезда "*" работает первой.
Поэкспериментировав я выяснил, что первой работает вторая звезда. Возможно здесь действует правило, которого я не знаю. Возможно оператор умножения (вторая звезда) имеет приоритет, или возможно распаковывающая звезда (которая первая) всегда выполняется последней.
Дальше я написал код, который помог мне разобраться.
Python
1
2
3
4
5
6
7
seq = [1,2,3,4,5,6]
x = [iter(seq)] * 2
print(x)  # [<list_iterator object at 0x0000023C40C58160>, <list_iterator object at 0x0000023C40C58160>]
y = list(map(list, [iter(seq)] * 2))
print(y)                         # [[1, 2, 3, 4, 5, 6], []]
L = list(zip(*([iter(seq)] * 2)))
print(L)                         # [(1, 2), (3, 4), (5, 6)]
Итак, умножение итератора на два
[iter(seq)] * 2
возвращает список, элементами которого является один и тот же итератор взятый дважды.
[<list_iterator object at 0x0000023C40C58160>, <list_iterator object at 0x0000023C40C58160>]
Как станет ясно дальше, это именно один и тот же итератор, к которому мы можем обращаться из двух мест (а не два одинаковых итератора).
Дальше
list(map(list, [iter(seq)] * 2))
возвращает
[[1, 2, 3, 4, 5, 6], []]
Так как функция map() применяет функцию list() сначало к первому элементу списка, а потом ко второму то полученный результат говорит о том. что оба элемента списка это один и тот же итератор. Тут я вспомнил, что при обращении к итератору, его содержимое не просто читается по одному элементу, а забирается из него. Поэтому первое применение функции list() забирает все элементы из итератора, а второе ее применение обращается к уже опустевшему итератору (так как это один и тот же итератор) и поэтому выводится пустой список [] .
Теперь становится понятно, как работает
list(zip(*([iter(seq)] * 2)))
1) Итератор умножается на 2 и получаем список из одного и того же итератора но размещенного в двух местах в списке (по смещению 0 и по смещению 1) .
Первая звезда распаковывает этот список. В результате мы получаем у функции zip() два аргумента zip(arg1, arg2). Но что интересно, оба аргумента, это один и тот же итератор, но взятый и в качестве первого аргумента и в качестве второго.
Дальше как с этими аргументами работает функция zip(arg1, arg2) .
Она берет один элемент из arg1 (тем самым забирая первый элемент из итератора, то есть "1"), затем берет один элемент из arg2. Но это тот же итератор, из которого уже забран элемент "1", поэтому берется элемент "2".
Функция zip() формирует из этих элементов пару (1, 2).
Затем она берет следующий элемент из arg1, это будет "3", и затем следующий элемент из arg2, это будет "4", и формирует пару (3, 4) и так далее, пока итератор не опустеет.
Если сейчас не понял, позже поймешь, когда будет больше опыта. а пока просто запомни, как можно разбивать последовательность на двойки, тройки, четверки и так далее.
Python
1
2
3
4
5
>>> seq = [1,2,3,4,5,6]
>>> list(zip(*[iter(seq)] * 2))
[(1, 2), (3, 4), (5, 6)]
>>> list(zip(*[iter(seq)] * 3))
[(1, 2, 3), (4, 5, 6)]
Добавлено через 50 минут
coa3, Вообще то я не совсем правильно выразился написав что
Цитата Сообщение от Viktorrus Посмотреть сообщение
оба аргумента, это один и тот же итератор, но взятый и в качестве первого аргумента и в качестве второго.
Особенность питона, что переменные не хранят объекты, а хранят ссылки на объекты. Поэтому в нашем случае мы получаем в качестве двух аргументов функции zip() две ссылки на один и тот же объект, являющийся итератором:
zip(<list_iterator object at 0x0000023C40C58160>, <list_iterator object at 0x0000023C40C58160>)
Цифры показывают адрес в оперативной памяти, где размещен объект, в нашем случае итератор списка. Можно увидеть, что адрес в памяти, на который указывают ссылки, один и тот же.
1
1 / 1 / 0
Регистрация: 27.02.2020
Сообщений: 101
20.08.2020, 15:42  [ТС]
фух, прочитал книгу в 720 страниц о XTML И CSS Фримана. даже успел теперь соскучится по питону. с чего же теперь начать- продолжить в изучении питона...?
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
20.08.2020, 16:17
Цитата Сообщение от coa3 Посмотреть сообщение
продолжить в изучении питона...?
Я думаю да. Как я понимаю Вы хотите заняться web программированием. Нужно добить книгу "Изучаем Python" . Но не все из нее Вам нужно. А потом перейти к книге
Лутц М. Программирование на Python. Том 1 (4-е издание, 2011) и
Лутц М. Программирование на Python. Том 2 (4-е издание, 2011)
где есть часть посвященная веб программированию.
Так Вы на чем остановились при изучении питона? На какой странице?

Добавлено через 3 минуты
Из этого двухтомника Вам понадобится только глава 1 и затем часть, посвященная веб программированию.
0
1 / 1 / 0
Регистрация: 27.02.2020
Сообщений: 101
20.08.2020, 16:50  [ТС]
Цитата Сообщение от Viktorrus Посмотреть сообщение
Так Вы на чем остановились при изучении питона? На какой странице?
у себя отметку сделал 570стр. главу 19 перечитать еще раз...

Добавлено через 4 минуты
Цитата Сообщение от Viktorrus Посмотреть сообщение
Как я понимаю Вы хотите заняться web программированием
не уверен в этом. уверен только в том, что буду заходить опять на второй круг и повторять питон и те темы, что остались не понятными, вот только еще не осмыслил какой метод выбрать для этого...
0
5037 / 1064 / 149
Регистрация: 29.01.2013
Сообщений: 6,215
20.08.2020, 17:13
coa3, начинайте помогать на форуме страждущим. Вам, перед вторым прочтением книг по пайтону, надо много-много практики языка.
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
20.08.2020, 19:50
coa3, Изучайте главу 19. Что будет не понятно, то спрашивайте.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.08.2020, 19:50
Помогаю со студенческими работами здесь

Не работает код Эрик Матиз - Изучаем Python, упражнение 19.1
Здравствуйте Помогите пожалуйста с решением задачи 19.1 из книги Эрика Матиза - Изучаем Python Блог: создайте новый проект Django...

Изучаем С++ по книге Майкла Доусона
Всем привет, недавно начал изучать C++ и начал я с книги (Майкл Доусон - Изучаем С++ через программирование игр) по мере прочтения и...

Исходники к книге Дэвида Гриффитса - Изучаем программирование на с
Может есть у кого-нибудь хоть какие-нибудь???

Обучение программированию по книге "Изучаем С#"
Я ничего не знал о С# и почемуто купил книгу &quot;Изучаем С#&quot; (3-е издание 2014) Эндрю Стиллмен и Дженифер Грин дочитал до 350 страницы и...

Проект на PyGame из книги «Изучаем Python. Программирование игр, визуализация данных, веб-приложения», Мэтиза
Пишу первый проект на Питоне, никак не могу разобрать как исправить ошибку. Код переписывать (перекопировать с учебника) уже пытался.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
88
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru