Продолжаем учить язык программирования пайтон 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 для выхода из игры. >>>