Продолжаем учить язык программирования пайтон Python. Переходим к изучению 5 главы по книге: Майкл Доусон «Программируем на Python», 2014 (Michael Dawson «Python Programming for the Absolute Beginner», 3rd Edition), где освоим списки, списочные методы и словари.
Содержание:
Списки в Python
Списки похожи на кортежи, которые мы изучали в прошлой главе. Важно запомнить, что в отличие от кортежей, списки могут изменяться. Общие принципы работы с кортежами применимы к спискам.Общий вид списка:
spisok=['раз', 'два', 'три','n']
Python: циклы for, константы, срезы, кортежи, последовательности len, range, in, choice
Как и в кортежах для списка можно узнать длину при помощи функции len()
, можно делать перебор значений или запускать цикл for
с помощью оператора in
, делать срезы, проводить конкатенацию, находить элементы по индексам.
Изменение списка — это его основная фишка при сравнении с кортежами:
- присвоить новое значение любому элементу:
spisok[0]='кот'
- присвоить новое значение срезу списка:
spisok[0:2]='кот'
- удалить элемент из списка:
del spisok[0]
, при этом длина списка уменьшится; - аналогично можно удалить срез списка.
Списочные методы — расширения для управления списками:
- добавить новый элемент в конец списка:
spisok.append(переменная)
- вставить элемент в конкретную позицию списка:
spisok.insert(позиция, значение)
; - удалить элемент из списка:
spisok.remove(переменная)
при этом важно проверить, если ли удаляемый элемент в списке через условные конструкции; - сортировка списка:
spisok.sort
по возрастанию;spisok.sort(reverse=True)
по убыванию;
- подсчет количества раз повторения элемента в списке:
spisok.count(переменная)
; - показать номер позиции в списке, где впервые встречается значение:
spisok.index(переменная)
; - показать значение конкретной позиции списка и удалить его из списка:
- spisok.pop([позиция]);
- spisok.pop([]) — покажется и удалится последний элемент списка.
Вложенные списки — список организации данные, где внутри списков находятся не отдельные элементы, а списки или кортежи. Аналогично можно создать вложенный кортеж.
Общий вид вложенного списка:
vlojenniy_spisok=['раз', ['кот', 'медведь'], ('сыр', 'колбаса')]
Общий вид вызова элементов вложенных списков или кортежей:
print(vlojenniy_spisok[3][1])
Эта запись означает: покажи первый элемент третьего элемента списка: колбаса
.
Распаковка последовательности — создание для каждого элемента из списка / кортежа своей переменной. Если есть список: spisok=['kot','eda']
, то его распаковка будет выглядеть так: basya, miska = ['kot','eda']
.
Словари в Python
Словари — это пары «ключ» и «значение» по аналогии с обычными словарями в реальной жизни.
Общий вид словаря:
slovar={'ключ_1':'значение_1', 'ключ_2':'значение_2'}
Создать новую пару значений в словаре или заменить существующую:
slovar[ключ]=значение
Удалить пару значений из словаря:
del slovar[ключ]
Чтобы достать значение из словаря, нужно ввести ключ: slovar['ключ_1']
, будет выведено 'значение_1'
. Как и в случае удаление элементов из списка, при доставании значений из словаря сначала лучше проверить, если такой ключ в словаре или нет при помощи условных конструкций.
Словарный методы:
get()
— достает значение по ключу, а если ключа нет, то выдает значениеNone
или любое другое заранее установленное значение, напримерslovar.get('ключ_3', 'Значение по умолчанию вместо None')
;keys()
— показывает все ключи словаря;values()
— показывает все значения словаря;items()
— показывает все пары ключей и значений в виде кортежей.
Игра «Что в моей сумке»
Задача: Написать текстовую игру. Программа изначально хранит список вещей в сумке пользователя. Показывает общее количество предметов. Через индекс дает возможность проверить, что находится под каким номером. Показывает содержимое среза по двум номерам. Далее пользователь находит пакет в дропбоксе, в котором есть содержимое, которое можно видеть. Далее пользователь кладет вещи из дропбокса в свою сумку. Пользователь может заменить любую вещь из своей сумки на любую другую. Далее пользователь покупает за деньги из сумки волшебный пончик. В конце программы на пользователя нападает вор и крадет часть вещей. Что осталось в вашей сумке?
spisok_veshey=['карта','паспорт','ключи','телефон','ручка'] print('В вашей сумке находится:') for i in spisok_veshey: print(i) print('Общее количество предметов:',len(spisok_veshey)) index=int(input('Введите номер предмета и нажмите Entr \n')) print('Под номером' ,index, 'находится', spisok_veshey[index]) print('Введите начальный и конечный индекс, чтобы увидеть \ содержимое среза вашей сумки') index_nach=int(input('Начальный индекс: ')) index_kon=int(input('Конечный индекс: ')) print('В срезе вашей сумки',index_nach,':',index_kon, \ 'находится:\n') for i in spisok_veshey[index_nach:index_kon]: print(i) print('\nВы нашли пакет с вещами в дропбоксе, в котором лежит:\n') dropbox=['шапочка','варежки','платок'] for i in dropbox: print(i) input('\nЧтобы положить вещи из дропбокс пакета в свою сумку, \ нажмите Entr') spisok_veshey+=dropbox print('\nТеперь в вашей сумке лежит:\n') for i in spisok_veshey: print(i) print('\nВам выпал шанс заменить любой предмет на любой другой') new_predmet=input('Напишите, что вы хотите добавить в сумку\n') index_new=int(input('Напишите номер предмета, вместо которого \ вы возьмете новый предмет\n')) spisok_veshey[index_new]=new_predmet print('\nТеперь в вашей сумке лежит:\n') for i in spisok_veshey: print(i) print('\nУ вас осталось немного денег, как раз хватит, чтобы \ купить волшебный пончик!') input('Нажмите Entr, чтобы купить волшебный пончик') new_item='волшебный пончик' spisok_veshey.append(new_item) print('\nТеперь в вашей сумке лежит:\n') for i in spisok_veshey: print(i) print('\nВу! На вас напал воришка и украл некоторые вещи!') del spisok_veshey[:4] print('\nВ вашей сумке осталось только:\n') for i in spisok_veshey: print(i)
Вот так выглядит сама программа при ее запуске:
В вашей сумке находится: карта паспорт ключи телефон ручка Общее количество предметов: 5 Введите номер предмета и нажмите Entr 4 Под номером 4 находится ручка Введите начальный и конечный индекс, чтобы увидеть содержимое среза вашей сумки Начальный индекс: 1 Конечный индекс: 3 В срезе вашей сумки 1 : 3 находится: паспорт ключи Вы нашли пакет с вещами в дропбоксе, в котором лежит: шапочка варежки платок Чтобы положить вещи из дропбокс пакета в свою сумку, нажмите Entr Теперь в вашей сумке лежит: карта паспорт ключи телефон ручка шапочка варежки платок Вам выпал шанс заменить любой предмет на любой другой Напишите, что вы хотите добавить в сумку пирожок Напишите номер предмета, вместо которого вы возьмете новый предмет 4 Теперь в вашей сумке лежит: карта паспорт ключи телефон пирожок шапочка варежки платок У вас осталось немного денег, как раз хватит, чтобы купить волшебный пончик! Нажмите Entr, чтобы купить волшебный пончик Теперь в вашей сумке лежит: карта паспорт ключи телефон пирожок шапочка варежки платок волшебный пончик Ву! На вас напал воришка и украл некоторые вещи! В вашей сумке осталось только: пирожок шапочка варежки платок волшебный пончик >>>
Ладдер игры
Задача: написать программу, которая показывает топ-5 игроков с их рекордами (сделать через словарь). Пользователь также может добавить запись с новым рекордом, удалить любой рекорд из списка. Если ничего делать не нужно, то пользователь может выйти из программы.
records={'Кот':'6', 'Медведь':'3', 'Барсук':'15'} vibor=None while vibor!=4: vibor=int(input('''"Ладдер игры". 1-Посмотреть ладдер 2-Добавить рекорд 3-Удалить рекорд 4-Выход Ваш выбор?\n''')) if vibor==1: for i in records: print(i,':',records[i],'\n') elif vibor==2: new_record_name=input('Введите имя игрока\n') new_record_score=input('Введите рекорд\n') records[new_record_name]=new_record_score for i in records: print(i,':',records[i],'\n') elif vibor==3: delete_record=input('Введите имя игрока, чей \ рекорд нужно удалить.\n') if delete_record in records: del records[delete_record] else: print('Игрока с таким именем нет в ладдере') for i in records: print(i,':',records[i],'\n') if vibor==4: input('Пока пока! Нажмите Entr, чтобы выйти.')
А вот так работает программа, когда ее запускаешь:
"Ладдер игры". 1-Посмотреть ладдер 2-Добавить рекорд 3-Удалить рекорд 4-Выход Ваш выбор? 1 Кот : 6 Медведь : 3 Барсук : 15 "Ладдер игры". 1-Посмотреть ладдер 2-Добавить рекорд 3-Удалить рекорд 4-Выход Ваш выбор? 2 Введите имя игрока Ласка Введите рекорд 9 Кот : 6 Медведь : 3 Барсук : 15 Ласка : 9 "Ладдер игры". 1-Посмотреть ладдер 2-Добавить рекорд 3-Удалить рекорд 4-Выход Ваш выбор? 3 Введите имя игрока, чей рекорд нужно удалить. Кот Медведь : 3 Барсук : 15 Ласка : 9 "Ладдер игры". 1-Посмотреть ладдер 2-Добавить рекорд 3-Удалить рекорд 4-Выход Ваш выбор? 4 Пока пока! Нажмите Entr, чтобы выйти.
В задании еще нужно было добавить возможность сортировать результаты во убыванию и по возрастанию. Но для этого нужно выполнять задачу через списки
, а не через словари
. Так как словарь нельзя просто так отсортировать через sort()
.
Игра «Виселица»
Задача: написать программу — игра «Виселица», где компьютер выбирает неизвестное пользователю слово, игрок должен угадать это слово, предполагая наличие в слове разных букв. Игрок предлагает букву, если такой буквы нет в слове, то компьютер дорисовывает изображение. Если за ограниченное количество попыток игрок не угадает все слово, то он проиграет.
SLOVA=('кот','мяв','хрю') import random zag_slovo=random.choice(SLOVA) otgad_slovo='*'*len(zag_slovo) oshibki=0 isp_bukvi=[] CAT=(''' . ▕▔▔╲▂▂▂▂▂╱▔▔▏┈┈┈ ▕╲╱╱┋┋┋┋┋╲╲╱▏▕▔▏ ''', ''' . ▕▔▔╲▂▂▂▂▂╱▔▔▏┈┈┈ ▕╲╱╱┋┋┋┋┋╲╲╱▏▕▔▏ ┉╲╱╭▆╮┋╭▆╮╲╱┉┉╲╲ ┉▕╲┉┉┉▅┉┉┉╱▏┉┉▕▕ ''', ''' . ▕▔▔╲▂▂▂▂▂╱▔▔▏┈┈┈ ▕╲╱╱┋┋┋┋┋╲╲╱▏▕▔▏ ┉╲╱╭▆╮┋╭▆╮╲╱┉┉╲╲ ┉▕╲┉┉┉▅┉┉┉╱▏┉┉▕▕ ┉▕┉▔▔╰┻╯▔▔┉▏┉┉╱╱ ┉┈╲▂▂▂▂▂▂▂╱╲┉▕▕┉ ┉┉╱╰╰╰╯╯╯╮╮╮╲╱╱┉ ''') MAX_OSHIBKI=len(CAT)-1 print('Игра "Виселица"') while oshibki<MAX_OSHIBKI and otgad_slovo!=zag_slovo: print (CAT[oshibki]) print('Загаданное слово:', otgad_slovo) print('Использованные варианты букв:', isp_bukvi) otgadka=input('Угадайте букву: ') otgadka=otgadka.lower() while otgadka in isp_bukvi: print('Вы уже предлагали букву',otgadka) otgadka=input('Угадайте букву: ') otgadka=otgadka.lower() isp_bukvi.append(otgadka) if otgadka in zag_slovo: print('Ура! Буква',otgadka,'есть в слове:') new='' for i in range(len(zag_slovo)): if otgadka == zag_slovo[i]: new+=otgadka else: new+=otgad_slovo[i] otgad_slovo=new else: print('Ошибочка! Буквы',otgadka,'нет в слове.') oshibki+=1 if oshibki == MAX_OSHIBKI: print(CAT[oshibki]) print('Вы не успели отгадать слово и стали котом') else: print('Ура! Вы угадали! Это слово:',zag_slovo) input('Нажмите Entr для выхода из игры.')
А вот так выглядит игра «Виселица», когда запускаешь программу:
Игра "Виселица" . ▕▔▔╲▂▂▂▂▂╱▔▔▏┈┈┈ ▕╲╱╱┋┋┋┋┋╲╲╱▏▕▔▏ Загаданное слово: *** Использованные варианты букв: [] Угадайте букву: р Ура! Буква р есть в слове: . ▕▔▔╲▂▂▂▂▂╱▔▔▏┈┈┈ ▕╲╱╱┋┋┋┋┋╲╲╱▏▕▔▏ Загаданное слово: *р* Использованные варианты букв: ['р'] Угадайте букву: а Ошибочка! Буквы а нет в слове. . ▕▔▔╲▂▂▂▂▂╱▔▔▏┈┈┈ ▕╲╱╱┋┋┋┋┋╲╲╱▏▕▔▏ ┉╲╱╭▆╮┋╭▆╮╲╱┉┉╲╲ ┉▕╲┉┉┉▅┉┉┉╱▏┉┉▕▕ Загаданное слово: *р* Использованные варианты букв: ['р', 'а'] Угадайте букву: ю Ура! Буква ю есть в слове: . ▕▔▔╲▂▂▂▂▂╱▔▔▏┈┈┈ ▕╲╱╱┋┋┋┋┋╲╲╱▏▕▔▏ ┉╲╱╭▆╮┋╭▆╮╲╱┉┉╲╲ ┉▕╲┉┉┉▅┉┉┉╱▏┉┉▕▕ Загаданное слово: *рю Использованные варианты букв: ['р', 'а', 'ю'] Угадайте букву: х Ура! Буква х есть в слове: Ура! Вы угадали! Это слово: хрю Нажмите Entr для выхода из игры. >>>