Рубрики
Без рубрики

Краткое руководство Python, часть 3: последовательности

Красивая серия учебников Python направлена на людей без знаний о программировании и хотелось бы … Теги с Python, начинающими, CodeNewie, учебником.

Красивая серия Caphify Python Tutorial направлена на людей без знаний о программировании и хотела бы забрать его. Как и в случае предыдущих частей, решения для упражнений доступны в Версия, размещенная на моем собственном сайте .

На этот раз мы пройдем последовательность Типы данных, и все вещи кики, которые вы можете сделать с ними. На самом деле, вы вроде уже видели последовательность типа: строки. Строки – это последовательность персонажей. Технически, в Python Strings – это особый случай и отличается от других типов данных последовательности, но вы все равно можете сделать для них много последовательностей. Как только вы видели несколько, я представим кортеж тип данных.

Наиболее основной особенностью последовательностей является возможность доступа к конкретному элементу внутри них. Это делается подобным:

>>> "Hello"[3]
'l'

Критическое свойство индексов в том, что Они начинаются в 0 Отказ "Привет" [0] это 'H' Отказ «Привет» [1] это 'E' Отказ Это на самом деле довольно распространено в вычислениях.

Вы также можете, конечно, индекс с переменной.

>>> i = 1
>>> "Hello"[i]
'e'

Упражнение: Сделайте программу, которая просит пользователю строку, а затем номер и печатает символ в этой позиции в строке. (Для дополнительных веселых, сделайте это в одну строку:) Честно говоря, одна линейная версия не очень хорошая идея Для читабельности ради …)

<Решение опущено>

Отрицательный индекс

Возможно, вы уже подумали попробовать это и выяснили, как это работает, но что происходит, если вы запустите "Привет" [- 1] ?

Отрицательные индексы начинаются с конца. Обратите внимание, что это означает Они не подвержены нулевой индексации С -0 такой же, как 0. 0 – первый элемент, 1 является вторым элементом, -1 – последний элемент, – 2 – второй – последний. Если вы найдете это запутанные, вы не одиноки:)

Если вы попытаетесь получить доступ к элементу, который не существует, например «бла» [10] Вы получите ошибку. Это хорошее время, чтобы представить удобный Лен Функция, которая может помочь вам избежать этого:

>>> len("hi")
2

Упражнение: Измените программу индексации строки, чтобы она не сбила, если пользователь просит неверный индекс, но вместо этого печатайте сообщение.

Еще одна супер классная особенность последовательностей – нарезки : Способность индексировать ряд элементов за раз.

>>> 'pizza'[1:3]
'iz'

Это дает нам строку, которая начинается в положении 1 и заканчивается в положении 3, давая нам символы # 1 и # 2. (Вы можете подумать об этом, как ломтик всегда от и в том числе начальная позиция и до но не включая конечное положение.)

Если вы опускаете одно или оба количества среза, он идет к началу или концу:

>>> 'pizza'[2:]
'zza'
>>> 'pizza'[:2]
'pi'

Обратите внимание, что «Пицца» [: - 1] это «Pizz» в то время как «Пицца» [:] это «Пицца» Отказ Пропущенная пусковая позиция такая же, как 0 , но опущенная конечная позиция – не так же, как -1 . -1 это последний пункт, поэтому нарезка до -1 вырезает это.

Неверный диапазон ломтики, где начальное положение больше, чем конечное положение ( Как [5: 1] ), просто спокойно вернет пустую строку.

Упражнение : Попробуйте сделать программу, которая принимает строку, а затем печатает ее обратно ограниченной максимальной длиной. Если строка должна быть отрезана, она должна закончиться ... Чтобы указать, что есть еще, но общая длина напечатана должна быть точно максимальной, включая эллипсис. Например, если вы выберете 10 как максимальную длину, и я ввожу Привет мой друг это должно печатать Привет, мой ... Отказ

<Решение опущено>

Шаг нарезки

Хорошо, это довольно неясная особенность, но я мог бы также продемонстрировать это, пока я говорю об этом. Вы можете иметь третий номер в срезах лонкена, что указывает размер «шаг»:

>>> 'abcabcabcabcabc'[::3]
'aaaaa'

Эти ломтики с самого начала (потому что пункт начала опущены) до конца (потому что конечное положение опущено), выбирая только каждый третий символ. Вы можете думать о размере шага как по умолчанию до 1.

Яргон: Итерация : Петить последовательностью и сделать что-то с каждым элементом внутри него. Он может быть использован с «на», либо «над» в качестве предлога.

Упражнение : Используйте свои знания циклов и индексацию, чтобы написать программу, которая получает строку от пользователя, а затем печатает каждый символ внутри него на собственной строке. (Я собираюсь представить более прошедший способ сделать это, но я хочу, чтобы вы пошли, как это можно сделать без него.)

<Решение опущено>

за

Одно из самых важных ключевых слов, связанных с последовательностями: для Является ли альтернативная конструкция петли, которая делает итерацию на гораздо проще повторять:

for letter in input("enter a word:"):
    print(letter)

Обратите внимание, что с для , выражение, которое говорит о том, что последовательность является итерацией (в этом случае, результатом входа вход («Введите слово:«) ) только один раз, а затем он просто внутренне управляет циклом Письмо установить каждому символу в этой строке. Так с за Это безопасно поставить вход в для линия.

В общем, в Python вам никогда не придется итерации, когда я пришел, прежде чем я рассказал вам об этом, но многие другие языки требуют его (C, JavaScript в некоторых ситуациях), так что это очень хорошая проблема, чтобы решить Отказ

Другая проблема, которую вы можете решить сейчас : Сделайте программу, которая получает строку от пользователя, а затем букву и определяет, находится ли буква в строке.

<Решение опущено>

в

Да, проблема, которую я только что заставил вас решить, была еще одна ненужная: P Вы можете использовать в за пределами контекста для Чтобы проверить, находится ли что-то внутри последовательности:

>>> 'e' in 'Hello'
True
>>> 'x' in 'Hello'
False

Ну не так ли нет! Я просто хотел, чтобы вы решали эту проблему сложным способом в качестве интеллектуального упражнения, и потому что многие другие ланггии не имеют этого ключевого слова или что-либо равновесие. (C не работает только для строк, но не для других типов последовательности.)

Кроме того, на струнах, в Работает с несколькими символами подстроки. Проверь это:

>>> 'He' in 'Hello'
True
>>> 'eH' in 'Hello'
False

Тестирование того, находится ли многосигнальная строка внутри другой строки вручную, является кошмаром Compred для этого. (Если вы хотите, сделайте удар на нем.)

не в Работает так, как вы ожидаете, хотя технически, вы должны ожидать, что это будет не (х в Y) (который также работает). Ведь x не> y это синтаксическая ошибка. В основном это как не в является оператором самостоятельно.

перерыв и продолжать

Теперь, когда мы итерация на вещи, это очень хорошее время, чтобы представить два удобных ключевых слова, используемые в петлях: Перерыв Заявление, которое выходит из цикла непосредственно даже если это условие все еще верно, а Продолжить , который пропускает оставшуюся часть нынешней итерации и продолжается от верхней части петли. Вот демография обоих:

number = 0
while number < 10:
    number += 1
    if number == 5: # skip 5 for no reason
        continue
    print("the next number is", number)
    if input("want to see another? (y/n)") == 'n':
        break

Кортежи являются более общей последовательностью типа данных. Они хранят произвольный список произвольных ценностей. Синтаксис для кортежных литералов заключается в том, чтобы приложить их в скобках и отдельные элементы запятыми:

>>> nums = (6, 1, 4)
>>> nums
(6, 1, 4)
>>> nums[0]
6
>>> for num in nums: print(num)
6
1
4
>>> greetings = ("Hi", "Hello", "Good day", "Salutations")
>>> greetings[2]
"Good day"
>>> for greeting in greetings: print(greeting)
Hi
Hello
Good Day
Saluations
>>> print(greetings[:2])
('Hi', 'Hello')

Как видите, кортежи подлежат индексации, нарезке, а остальная часть сумки так же, как строки, но они не ограничиваются удерживающими струнами ; Они могут удержать INT, поплавки, струны, логии или любого другого типа.

Предупреждение! Объявление кортежа только с одним элементом не сделано так, как вы могли ожидать! nums = (5) не делает кортеж; Поскольку скобки также используются в качестве математических или логических операторов, это утверждение просто установило бы Nums к 5 Отказ Python только интерпретирует скобки как охватывание кортеля, если внутри есть хотя бы одна запятая (или внутри нет внутри). Установить Nums к одному элементу кортежа, вы могли бы сделать nums = (5,) – ненужные комиссионные запятые разрешены. На самом деле, вы даже можете просто написать Nums, Отказ

Вы также можете добавить кортежи вместе:

>>> nums = (1, 2, 3)
>>> more_nums = (4, 5, 6)
>>> nums + more_nums
(1, 2, 3, 4, 5, 6)

Что-то я боролся с тем, когда у обучения Python пытался добавить один элемент в кортеж, как: Nums Отказ Это поднимет Типеррр говоря …| может только объединить кортеж (не «int») кортежу Отказ Помните, так как var1 Снаряжение для var1 + var2 , числа говорит Nums + 5 Отказ Чтобы добавить что-то в кортеж, новое дополнение к себе должна быть сделана в кортеж, как: Nums + = (5,) Отказ

На самом деле, вы также можете умножить кортежи:

>>> nums = (1, 2, 3)
>>> nums * 3
(1, 2, 3, 1, 2, 3, 1, 2, 3)

Но это очень редко полезно.

Есть одна разница в том, как в Оператор работает: с «реальными» последовательностями, как кортежи, в Только тесты, если один из членов последовательности после в равно элементу до в Отказ С струнами, в Есть ли «подряд», проверяя, а не «является членом», проверка, поэтому «Он» в «Hello» оценивает Истинный , Но с кормами, («H», «E») в («H», «E», «L», «L», «O») или (5, 3) в (5, 3, 6) оценивает Ложь Поскольку никто из членов кортежа справа не является кортеж слева. Причина этого поведения в том, что, как вы уже догадались, вы можете иметь кортежи от кортежей:

Вложенные кортежи

>>> high_scores = (("Alice", 1260), ("Bob", 1135), ("Carl", 1390))
>>> for score in high_scores:
...   print(score[0], 'scored', score[1])
...
Alice scored 1260
Bob scored 1135
Carl scored 1390
>>> high_scores[1][0] # demonstrating double-indexing: high_scores[1] is ('Bob', 1135)
'Bob'

Разве это не круто! Каждый элемент в High_scores Является ли кортеж, который удерживает имя в положении 0 и оценку в положении 1. («Алиса», 1260) в High_scores будет оценивать Правда Отказ (Строки не имеют концепции вложенных последовательностей в том, как делают кортежи, поэтому строки являются единственным типом последовательности, которые имеют «подряд» для в вместо «является членом».)

Это также хорошее время, чтобы представить пару небольших функций о разрывах линии.

Продолжение линии

Когда вам нужно сломать заявление на нескольких строках, вам разрешено делать это, если он содержит запятые:

names = (
    'Alice',
    'Bob',
    'Carl',
    'Dana',
    'Elijah',
    'Fiona',
)

Но если это не с запятой, вам нужно использовать обратную косание в конце строки:

# This will raise a syntax error:
#sentence = "The " + "quick " + "brown " + "fox " +
#   "jumps"

# This works:
sentence = "The " + "quick " + "brown " + \
    "fox " + "jumps " + "over " + \
    "the " + "lazy" + "dog"

Вы также можете поставить две строковые литералы вместе без + , и предполагается:

>>> print("hello" "friend")
hellofriend

Я не рекомендую использовать это, хотя. Я нахожу это менее ясно, чем использование + И это не более 2 персонажей короче, а большинство других языков нет, Так что это не хорошая привычка для строительства. (Это также работает только на строковых литералах, а не строковые переменные.) Я честно желаю, чтобы это не было на языке. Это заставило меня включить этот раздел, чтобы объяснить это , который стоит как мое время, так и твое.

Встроенные блоки

До сих пор мы всегда положили блок Если , в то время как или подобное ключевое слово, отступ в условиях, но если это только одна строка, вы действительно можете сделать это:

>>> if True: print("logic has not been broken")
logic has not been broken

Однако вы не можете закрыть их, даже если они могут теоретически все быть на одной строке:

>>> for letter in "hi": if letter != 'h': print(letter)
  File "", line 1
    for letter in "hi": if letter != 'h': print(letter)
                         ^
SyntaxError: invalid syntax

Наиболее распространенное время, которое я использую встроенные блоки, с Перерыв и Продолжить Отказ

Запястье

Вы также должны быть в курсе запятых. Вы можете поставить несколько несвязанных операторов в одну строку, используя Semicolon:

>>> a = 5; print(a)
5

Вы обычно не должны, хотя, потому что это менее читаемый иметь несколько семантически отличных инструкций на одну строку.

Тройные цитируемые строки

Еще одна вещь, о которой я расскажу, пока мы находимся на теме линии продолжения: тройные цитируемые строки, заключенные с обеих сторон с "" или '' ' , разрешено охватывать несколько строк без обратной косочки.

message = """Incoming transmission:

Hi, I hacked Yujiri's dev.to account and replaced his original example string with this!

Plz don't point this out to him. I'm wondering how long it'll be before he notices."""

Они часто используются, когда вам нужно хранить большое сообщение в строке, например, помочь текстовому тексту для инструмента командной строки.

Несколько заданий

Быстрый трюк: Можно назначить две переменные к тому же значению в одной строке без запятой:

>>> a = b = 5
>>> print('a is', a, 'and b is also', b)
a is 5 and b is also 5

Эта функция не очень полезна, но я должен упомянуть об этом.

Конвенция: Капитализация имени переменных

По соглашению, переменные имена в Python являются строчными, но есть исключение. Константы (Переменные, которые предназначены для того, чтобы никогда не меняться) часто записаны на всех крышках. Я говорю это, потому что я собираюсь использовать его в следующем проекте, и не хочу, чтобы это выглядит странно.

С этим вы готовы написать гораздо более интересную программу, чем в последней главе.

Правительство нанимает вас, чтобы написать программу для автоматической цензуры, которые содержат политически неприемлемую речь. Есть предопределенный набор слов, которые вы ищете (для упражнения, вы можете выбрать то, что они есть). Ваша программа должна принять многострочный вход (пустая строка сигнализирует конец сообщения), а затем выводится: сообщение со всеми строками, содержащими грязные слова; И некоторые метаданные для надзирателя отдела цензурпии, в том числе отчет о том, какие недопустимые слова были обнаружены в сообщении (все перечислены на одной строке, без скобок вы получаете при печати кортежа, но с запятыми размещены соответствующим образом) и Количество удаленных линий.

Например, Если слова, которые будут цензурены, являются «угнетательными», «свободными» и «бунтарь», и сообщение:

I wanted to do X today, but it was illegal.
This is terrible. We shouldn't be prevented from doing X.
We need to do something about our oppression. What if we rebelled?
I don't know, maybe I'm just getting crazy ideas.
It wouldn't work anyway, right?
Oh well, I guess there's nothing we can do about it.
I'll have to go do Y instead. I didn't want to do Y, though.
I just wish we had more freedom.

Программа должна выводиться:

I wanted to do X today, but it was illegal.
This is terrible. We shouldn't be prevented from doing X.
I don't know, maybe I'm just getting crazy ideas.
It wouldn't work anyway, right?
Oh well, I guess there's nothing we can do about it.
I'll have to go do Y instead. I didn't want to do Y, though.

words found: oppress, rebel, free
lines removed: 2

Это должно быть довольно сложное назначение для кого-то без опыта программирования за пределами этих трех уроков. Дайте это некоторое время. Когда я узнал Python из книги, которая научила меня, некоторые из проектов в конце концов, приняли меня несколько часов, но если вы можете решить проблему этого калибра самостоятельно, то вы действительно ловить.

Оригинал: “https://dev.to/yujiri8/the-concise-python-tutorial-part-3-sequences-4n3f”