среда, 30 декабря 2020 г.

Найти имя скачанного файла и проверить содержит ли оно определенный текст (Python/Selenium)

 Итак, задача такая: 

 - клиент кликает на Скачать кнопку,  начинается загрузка. Нужно найти скачиваемый файл в папке и проверить действительно ли это файл с расширением .dmg (для Mac).

Если название файла содержится в ссылке для скачивания, то решение этой задачи будет довольно простым. Но в нашей ситуации ссылка одна, при клике на нее, автоматически определяется Mac или Windows. Соответсвующий файл (.dmg для Mac, .exe для Windows) начинает скачиваться.


Код в файле теста:

def test_correct_app_should_be_downloaded_on_mac(driver):
page.open(driver)
assert page.is_downloaded_app_correct(driver, TestData.app_for_mac_format), \
"Downloaded App has incorrect for Mac format"

Код в файле Data:

TestData.sa_app_for_mac_format = ".dmg"

Код в файле Page:

def is_downloaded_app_correct(driver, expected_format):
before = os.listdir('/Users/anna/Downloads')
download_button = Button(driver, download_button_locator)
download_button.click()
max_wait = 30
current_wait = 0
while current_wait < max_wait:
after = os.listdir('/Users/anna/Downloads')
change = set(after) - set(before)
lenght = len(change)
if lenght == 1:
file_name = str(change.copy())
print(file_name)
if file_name.index(expected_format):
return True
else:
current_wait += 1
time.sleep(1)
print("The download has not started within " + str(max_wait) + "seconds.")
return False

Такой вариант подоедет для локальной проверки на компьютере или если вы можете точно определить путь, где сохраняется скачиваемый 
файл. Если же для прогонки автотестов используется BrowserStack - то с опрелением папки возникнут проблемы (BrowserStack 
не даст вам такой информации).
В таком случае код надо будет написать по-другому. Об этом моя следующая статья.
Как получить имя скачиваемого файла при использовании BrowserStack - СТАТЬЯ.


Как найти путь, куда сохраняется файл на Mac, читайте ТУТ.


Как посмотреть путь к файлу на Mac.

 Чтобы посмотреть какой именно путь имеет файл на Маке (какие именно папки):


1. Открываем Finder на компе.

2. Выбираем интересующий нас файл.

3. Option + Command + R (нажимаем эти клавиши одновременно на клавиатуре).

4. Теперь внизу окна можем посмотреть путь к файлу (смотрите на фото).




суббота, 24 октября 2020 г.

Использование переменной в локаторе (XPATH).

Нужно проверить правильная ли цена отображается на сайте.

Переменная var будет разной в зависимости от продукта (или региона, например). 

Мы можем использовать данную функцию для поиска и проверки всех цен, меняется только  expected_price и var.


@allure.step("Check that price is correct")
def is_price_correct(driver, expected_price, var):
price_locator = (
By.XPATH,
'//div[@id="buySASub1"]//span[contains(@data-type, "upgrade")
         and contains(@data-tier, "'+var+'")]'
)
return is_element_price_correct(driver, expected_price, price_locator)

пятница, 23 октября 2020 г.

Как правильно переносить текст при использовании CSS-селекторов (CSS-Selector)

  def click_buy_button(driver):

    a_button_locator = (

        By.XPATH, 

        "//a[contains(@class, 'product-purchase') "

        "and contains(@href, '" + Config.ps_base_url + "')]"

    )

    a_button = Button(driver, a_button_locator)

    a_button.click()

Описание XPath с помощью Contains

 Contains примеры:


1) Класс

//a[contains(@class, 'product-formatted-price')



2) Текст


a[contains(text(),"Get")]



3) Ссылку


//a[contains(@class, 'product-purchase') and contains(@href, '" + Config.ps_base_url + "')]



4) ID


//div[contains(@id,"content")]



5) Другие (data-type...)


//span[contains(@data-type, 'no')]



6) Содержит сразу 2 условия


//span[contains(@data-type, 'no') and contains(@data-time, '0')]



7) Описать элемент, который находится внутри секции buySub1


//div[@id="buySub1"]//span[contains(@data-type, 'no') and contains(@data-tier, '0')]

четверг, 22 октября 2020 г.

Как обновить Allure, Pytest, Selenium и др. в PyCharm. Как использовать Pytest в PyCharm

Чтобы использовать Pytest для тестирования в PyCharm:

1. PyCharm - Preferences


2. Tools - Python Integrated Tools

3. В Default test runner выбираем Pytest



4. Apply - Сохраняем изменения


 Чтобы ОБНОВИТЬ пакеты программ для Python в PyCharm (Allure, Pytest, Selenium, BrowserStack Local, Pip, Cryptography, myOpenSSL, Webdriver Manager и другие):

1. PyCharm - Preferences

2. Project (там должен быть указан ваш проект) - Python Interpreter


3. В первой колонке видим все уже установленные пакеты, во второй - текущая версия пакета, в трeтьей - доступная последняя версия.
Если текущая и последняя версия не совпадают, то мы видим треугольник возле Latest Version, это означает, что мы можем ее обновить.



4. Для того, чтобы обновить пакет ставим курсор на нужную строку (в примере выше это attrs), кликаем на треугольничек внизу (выделила его на рисунке). Пакет обновится.



Установить ALLURE для Mac (Мак)

 Чтобы установить Allure (Алюр) на ваш компьютер в Терминале введите следуюший текст:




- для Mac

brew install allure

вторник, 20 октября 2020 г.

Switch to iFrame - Если нужно переключиться на frame и обратно

Например, существует иконка Помощника (Help), которая должна отображаться на всех страницах вебсайта. Пользователь может кликнуть на нее и пообщаться с Службой поддержки.

Сейчас существует много сервисов, которые позволяют использовать их инструмент для такого окна - Intercom, Helpscout, Zendesk....


АВТОТЕСТ:

- Проверить, что иконка помощника отображается на странице. 

Открываем trial_download_signup_page старницу.

Переключаемся на Frame, где эта иконка находится. Потом ищем иконку, проверяем ее видимость на странице и переключаемся обратно на исходную страницу.

Дальше нам надо еще ввести и-мейл, согласиться с условиями и кликнуть кнопку Download.

На открывшейся старницы мы тоже проверяем наличие Help иконки.


Для переключения на рамку будем использовать функцию - switch_to_frame 

Для возвращения на исходную страницу - switch_to_default_content


def test_user_should_see_help_icon_on_trial_download_signup_page(driver):
trial_download_signup_page.open(driver)
assert trial_download_signup_page.help.is_icon_displayed(driver), \
"Help icon is not displayed on Trial Download Signup page"
driver.switch_to_default_content()
trial_download_signup_page.set_email(driver, TestData.get_random_email())
trial_download_signup_page.agree_to_terms_and_policy(driver)
trial_download_signup_page.click_download_button(driver)
assert trial_download_signup_page.help.is_icon_displayed(driver), \
"Help icon is not displayed on SA Signup Follow page"

in Help file:

@allure.step("Check if Help icon is displayed on the page")
def is_icon_displayed(driver):
iframe = HtmlElement(driver, (By.CSS_SELECTOR, "selector"
]'))
iframe.
switch_to_frame()
help_icon = HtmlElement(driver, (By.CSS_SELECTOR, "selector"
]'))
return helpscout_icon.is_element_visible()

Как проверить что элемент содержит определенный класс (пример - Error class)?

 

Как проверить что элемент содержит определенный класс? Python-Selenium



Задача:

Существует форма, которую пользователь должен заполнить. В форме есть обязательные поля. Если пользователь их не заполнил, то поле подсвечивается красным цветом. За подсветку поля отвечает класс ERROR. Этот класс присваивается элементу, если поле не заполнено.

Нужно проверить содержит ли элемент этот класс. Задача усложняется тем,  что все элементы имеют не только этот один класс, а нужно проверить именно его наличие.


def test_user_should_see_warning_if_fields_are_not_filled(driver):
    support_page.open(driver)
    support_page.click_send_message_button(driver)
   assert support_page.is_name_field_has_error_class(driver), \
       "The Name field has no Error class"

@allure.step("Check that Name field has Error class when this field does not filled")
def is_name_field_has_error_class(driver):
    name_input_field = HtmlElement(driver, (By.CSS_SELECTOR, '[name="name"]'))
    return 'error' in name_input_field.get_attribute("class")

class HtmlElement:
    def __init__(self, driver, locator):
        self.driver = driver
        self.element_locator = locator

def get_attribute(self, attribute_name, timeout=30):
    wait = WebDriverWait(self.driver, timeout)
    try:
        element = wait.until(expected_conditions.presence_of_element_located(self.element_locator))
        return element.get_attribute(attribute_name)
    except TimeoutException:
        raise NoSuchElementException("Can't find element with locator " + str(self.element_locator) +
                                     " after " + str(timeout) + " seconds.")

понедельник, 19 октября 2020 г.

Как проверить, чтобы статистика передается в Facebook и Google Analytics.

 Наш сайт использует GTM (Google Tag Manager) для сбора статистики для Гугл Аналитикс (Google Analytics) и Фейсбук (Facebook). 

Чтобы проверить что сайт отправляет запрос на GA и Facebook нужно сделать следующие шаги:

1. Заходим в DevTools - Inspect

2. Выбираем Network

3. Ставим галочку Preserve Log


4. В окошко Filter вводим facebook (для Facebook проверки) или collect (для Google Analytics) после выполнения действия, которое должно быть записано в аналитику.

5. Выбираем закладку Headers

6. Ищем там Query String Parameters


7. Для Facebook ищем - ev - Pageview  or Lead or Complete Registration (это зависит от того, как ваши события названы в FB)
Для GA - t - Pageview or Event.


 Вывод - событие Event (в данном примере) передается в Гугл Аналитику.




суббота, 23 мая 2020 г.

Тип данных - Словарь (Dictionary)

Иногда обычного списка недостаточно.
Например мы имеем список с оценками студентов за экзамен

student_grades = [12, 5, 6, 10, 11, 10, 9, 8, 7]

Но имея этот список мы не знаем какой студент получил какую оценку. Чтобы привязать имя студента к оценке, мы используем Dictionary (Словарь):

student_grades = {"Marie": 12, "John": 5, "Max": 6, "Michael": 10, "Anna": 11}


Marie - это ключ (key)
12 - это значение (value)


МЕТОД 1 - VALUES()

Используется, чтобы получить значения (value) из словаря (dictionary).

student_grades.values()

Получаем список только из значений:
dict_values = ([12, 5, 6, 10, 11])

Если нам нужно посчитать СРЕДНЮЮ оценку

sum = sum(student_grades.values())

length = len(student_grades)

average = sum/length

print(average)


МЕТОД 2 - KEYS()


student_grades.keys()

dict_keys = (['Marie', 'John', 'Max', 'Michael', 'Anna'])



Все методы, которые мы можем использовать с переменной


['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']


class dict(object)
 |  dict() -> new empty dictionary
 |  dict(mapping) -> new dictionary initialized from a mapping object's
 |      (key, value) pairs
 |  dict(iterable) -> new dictionary initialized as if via:
 |      d = {}
 |      for k, v in iterable:
 |          d[k] = v
 |  dict(**kwargs) -> new dictionary initialized with the name=value pairs
 |      in the keyword argument list.  For example:  dict(one=1, two=2)
 |  
 |  Built-in subclasses:
 |      StgDict
 |  
 |  Methods defined here:
 |  
 |  __contains__(self, key, /)
 |      True if the dictionary has the specified key, else False.
 |  
 |  __delitem__(self, key, /)
 |      Delete self[key].
 |  
 |  __eq__(self, value, /)
 |      Return self==value.
 |  
 |  __ge__(self, value, /)
 |      Return self>=value.
 |  
 |  __getattribute__(self, name, /)
 |      Return getattr(self, name).
 |  
 |  __getitem__(...)
 |      x.__getitem__(y) <==> x[y]
 |  
 |  __gt__(self, value, /)
 |      Return self>value.
 |  
 |  __init__(self, /, *args, **kwargs)
 |      Initialize self.  See help(type(self)) for accurate signature.
 |  
 |  __ior__(self, value, /)
 |      Return self|=value.
 |  
 |  __iter__(self, /)
 |      Implement iter(self).
 |  
 |  __le__(self, value, /)
 |      Return self<=value.
 |  
 |  __len__(self, /)
 |      Return len(self).
 |  
 |  __lt__(self, value, /)
 |      Return self<value.
 |  
 |  __ne__(self, value, /)
 |      Return self!=value.
 |  
 |  __or__(self, value, /)
 |      Return self|value.
 |  
 |  __repr__(self, /)
 |      Return repr(self).
 |  
 |  __reversed__(self, /)
 |      Return a reverse iterator over the dict keys.
 |  
 |  __ror__(self, value, /)
 |      Return value|self.
 |  
 |  __setitem__(self, key, value, /)
 |      Set self[key] to value.
 |  
 |  __sizeof__(...)
 |      D.__sizeof__() -> size of D in memory, in bytes
 |  
 |  clear(...)
 |      D.clear() -> None.  Remove all items from D.
 |  
 |  copy(...)
 |      D.copy() -> a shallow copy of D
 |  
 |  get(self, key, default=None, /)
 |      Return the value for key if key is in the dictionary, else default.

Пример

Вывести оценку определенного студента


student_grades = {"Marie": 12, "John": 5, "Max": 6, "Michael": 10, "Anna": 11}

marie_grade = student_grades.get("Marie")

print(marie_grade)



 |  
 |  items(...)
 |      D.items() -> a set-like object providing a view on D's items
 |  
 |  keys(...)
 |      D.keys() -> a set-like object providing a view on D's keys
 |  
 |  pop(...)
 |      D.pop(k[,d]) -> v, remove specified key and return the corresponding value.
 |      
 |      If key is not found, default is returned if given, otherwise KeyError is raised
 |  
 |  popitem(self, /)
 |      Remove and return a (key, value) pair as a 2-tuple.
 |      
 |      Pairs are returned in LIFO (last-in, first-out) order.
 |      Raises KeyError if the dict is empty.
 |  
 |  setdefault(self, key, default=None, /)
 |      Insert key with a value of default if key is not in the dictionary.
 |      
 |      Return the value for key if key is in the dictionary, else default.
 |  
 |  update(...)
 |      D.update([E, ]**F) -> None.  Update D from dict/iterable E and F.
 |      If E is present and has a .keys() method, then does:  for k in E: D[k] = E[k]
 |      If E is present and lacks a .keys() method, then does:  for k, v in E: D[k] = v
 |      In either case, this is followed by: for k in F:  D[k] = F[k]
 |  
 |  values(...)
 |      D.values() -> an object providing a view on D's values
 |  
 |  ----------------------------------------------------------------------
 |  Class methods defined here:
 |  
 |  __class_getitem__(...) from builtins.type
 |      See PEP 585
 |  
 |  fromkeys(iterable, value=None, /) from builtins.type
 |      Create a new dictionary with keys from iterable and values set to value.
 |  
 |  ----------------------------------------------------------------------
 |  Static methods defined here:
 |  
 |  __new__(*args, **kwargs) from builtins.type
 |      Create and return a new object.  See help(type) for accurate signature.
 |  
 |  ----------------------------------------------------------------------
 |  Data and other attributes defined here:
 |  
 |  __hash__ = None



Посчитать сколько раз элемент встречается в списке

Например, нам надо посчитать сколько студентов с балом 10 в списке.

student_grades list содержит оценки студентов за экзамер.

Функция COUNT() считает сколько раз определенный элемент попадается в списке.




student_grades = [9.1, 8.8, 10.0, 7.7, 6.8, 8.0, 10.0, 8.1, 10.0, 9.9]
n = student_grades.count(10.0)
print(n)

Результат:
3

четверг, 21 мая 2020 г.

Как проверить что определенные страницы сайта не видны поисковикам

Запрет для поисковых систем

Эта проверка нужна тогда, когда появляются, например, временные страницы на сайте или страницы, которые не должны быть видны поисковым системам.

открываем файл
robots.txt

Для этого в строке браузера пишем

my_website.com/robots.txt


Allow - это ссылки на страницы, которые разрешено отслеживать поисковым системам.
Disallow - запрещенные для поиска в поисковых системах старнички сайта.

среда, 20 мая 2020 г.

Как создавать маркеры и использовать их чтобы запускать только определенные тесты



В  Pytest есть возможность ставить маркеры на отдельные тесты (они могут быть в одном файле или в разных). 

Это позволит:

  • запускать тесты только с определенным маркером.
  • пропускать тесты с определенным маркером.


ПРИМЕР 1


Нам надо создать список тестов, которые будут запускаться ежедневно - Smoke tests.
import pytest
@pytest.mark.smoke
def test_user_should_see_icon_on_homepages(driver):
    homepage.open(driver)
    assert homepage.is_icon_displayed(driver), "The icon is not displayed on Homepage"

Вначале мы импортируем pytest
import pytest
Добавляем маркер с именем smoke перед каждым тестом, который нужно запускать каждый день.
@pytest.mark.smoke
Чтобы запустить только тесты с маркером smoke, в Терминале вводим:
pytest -v -m smoke
Если нужно, чтобы запустились все тесты, кроме Smoke
pytest -v -m "not smoke"
Можно выбрать только тесты, которые в своем названии содержат определенное слово (например "color") - запустятся только эти тесты.
pytest -v -k color
Чтобы запусить все тесты, которые в названии не содержат ключевое слово "color", вводим такой текст:
pytest -k "not color" -v
Можно запустить тесты по двум ключевым словам. Например, запускаем тесты, названия которых содержат слова "color" и "hover" (запустятся все 
тесты, которые содержат хотя бы одно из ключевых слов).
pytest -k "color or hover" -v

ПРИМЕР 2

Нужно исключить прогонку тестов для Windows, то есть тех тестов, которые нужно проверять только на Винде.
@pytest.mark.skipif(pytest.mark._config.getoption('os') == 'mac', reason='This test is for Windows only')
Добавляя такую строку перед тестом, мы добавляем маркер skipif (пропускать если).
Тест будет пропускаться, если выбранная для тестирования операционная система Mac
(('os') == 'mac')
Также можно установить маркер для сразу для нескольких функций, присвоих их определенному классу. В этом случае маркер ставится на класс.
import pytest


@pytest.mark.webtest
class TestClass:
    def test_startup(self):
        pass

    def test_startup_and_more(self):
        pass

ПРИМЕР 3



Если нужно полностью пропустить данный тест (заскипать)
@pytest.mark.skip(reason='Temporary skipped because of ticket FF-382')

вторник, 19 мая 2020 г.

Как увеличить окно при прогонке теста (Maximize Window), Python

Иногда для теста обязательным является то, чтобы окно открывалось на весь экран (так как по умолчанию оно может быть меньше необходимого).
Я столкнулась с тем,  что по умолчанию при прогонкке теста через BrowserStack размер открываемого окна 1024x768. Это размер экрана планшета. Для моего теста это не подходило, так как верхнее меню для десктопа и для планшета отображалось по-разному.

Десктоп (Desktop):

Для таблетки отображалось гамбургер-меню и при попытке найти главное меню на странице, тест падал.

Планшет (Tablet):


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


driver.maximize_window()

Через какое-то время у меня возникла проблема, что при запуске через BrowserStack, окно не всегда становится максимальным, и разные тесты падали время от времени (каждый раз разные).

Поэтому я прибегла к другой функции, которая задает фиксированный размер экрана для теста - set_window_size.

driver.set_window_size(1920, 1080)

суббота, 16 мая 2020 г.

Как посчитать среднее значение в списке List



Предположим, мы имеем список с баллами студентов от 1 до 12 в списке list.

student_grades = [12, 10, 11, 12, 10, 8, 11, 12, 7, 11]

Нужно посчитать среднее значение оценок студентов.

Для этого сначала считаем сумму всех оценок студентов:
sum = sum(student_grades)

Считаем количство элементов (студентов) в списке:
quantity = len(student_grades)


Чтобы найти среднее значение sum делим на quantity.

____________________

student_grades = [12, 10, 11, 12, 10, 8, 11, 12, 7, 11]

sum = sum(student_grades)
quantity = len(student_grades)

average = sum/quantity

print(average)
_________



Запускаем файл через Терминал
python3.7 my_folder/my_file.py

Результат:
10.4





Функции в Python. Как просмотреть весь список доступных функций и переменных.

Чтобы вывести на экран список всех доступных функций и переменных, в Терминале набираем:

>>> dir(__builtins__)

Результат:

['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EnvironmentError', 'Exception', 'False', 'FileExistsError', 'FileNotFoundError', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'InterruptedError', 'IsADirectoryError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'ModuleNotFoundError', 'NameError', 'None', 'NotADirectoryError', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError', 'RecursionError', 'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopAsyncIteration', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'ZeroDivisionError', '_', '__build_class__', '__debug__', '__doc__', '__import__', '__loader__', '__name__', '__package__', '__spec__', 'abs', 'all', 'any', 'ascii', 'bin', 'bool', 'breakpoint', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'exec', 'exit', 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit', 'range', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'zip']

Мы видим тут кроме функций и все типы переменных -  О типах переменных читайте ТУТ

четверг, 14 мая 2020 г.

Методы для всех типов данных. Как посмотреть весь набор методов. Примеры использования

Итак, есть 6 основных типов дынных:
- string,
- integer,
- float,
- boolean,
- list,
- dictionary,
- tuple.

Чтобы посмотреть все методы, которые мы можем применить к определенному типу данных, в командной строке набираем:


dir (str)


Результат:
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']


  • capitalize - делает первую букву заглавной


>>> str.capitalize("hello")
или
>>> "hello".capitalize()

Результат:   'Hello'


  • title - делает первую букву заглавной (по сути тоже самое, что и capitalize)


>>> str.title('hello')
Результат:   'Hello'



  • upper - пишет все слово заглавными буквами


>>> str.upper('hello')
>>> 'hello'.upper()

Результат:   'HELLO'

  • lower - пишет все слово маленькими буквами
username = "Python3"
lower = username.lower()
print(lower)


Пример с count - тут



dir(int)


['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']


dir(float)


['__abs__', '__add__', '__bool__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getformat__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__int__', '__le__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__pos__', '__pow__', '__radd__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rmod__', '__rmul__', '__round__', '__rpow__', '__rsub__', '__rtruediv__', '__set_format__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', 'as_integer_ratio', 'conjugate', 'fromhex', 'hex', 'imag', 'is_integer', 'real']


dir(list)


['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

append - Добавить элемент в список

Пример с count - тут


dir (dict)  - Dictionary


['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']



dir(tuple


Help on class tuple in module builtins:

class tuple(object)
 |  tuple(iterable=(), /) 
 |  
 |  Built-in immutable sequence.  - Не может быть изменен
 |  
 |  If no argument is given, the constructor returns an empty tuple.
 |  If iterable is specified the tuple is initialized from iterable's items.
 |  
 |  If the argument is a tuple, the return value is the same object.
 |  
 |  Methods defined here:
 |  
 |  __add__(self, value, /)
 |      Return self+value.
 |  
 |  __contains__(self, key, /)
 |      Return key in self.
 |  
 |  __eq__(self, value, /)
 |      Return self==value.
 |  
 |  __ge__(self, value, /)
 |      Return self>=value.
 |  
 |  __getattribute__(self, name, /)
 |      Return getattr(self, name).
 |  
 |  __getitem__(self, key, /)
 |      Return self[key].
 |  
 |  __getnewargs__(self, /)
 |  
 |  __gt__(self, value, /)
 |      Return self>value.
 |  
 |  __hash__(self, /)
 |      Return hash(self).
 |  
 |  __iter__(self, /)
 |      Implement iter(self).
 |  
 |  __le__(self, value, /)
 |      Return self<=value.
 |  
 |  __len__(self, /)
 |      Return len(self).
 |  
 |  __lt__(self, value, /)
 |      Return self<value.
 |  
 |  __mul__(self, value, /)
 |      Return self*value.
 |  
 |  __ne__(self, value, /)
 |      Return self!=value.
 |  
 |  __repr__(self, /)
 |      Return repr(self).
 |  
 |  __rmul__(self, value, /)
 |      Return value*self.
 |  
 |  count(self, value, /)
 |      Return number of occurrences of value.
 |  
 |  index(self, value, start=0, stop=9223372036854775807, /)
 |      Return first index of value.
 |      
 |      Raises ValueError if the value is not present.
 |  
 |  ----------------------------------------------------------------------
 |  Static methods defined here:
 |  
 |  __new__(*args, **kwargs) from builtins.type
 |      Create and return a new object.  See help(type) for accurate signature.




понедельник, 11 мая 2020 г.

Типы переменных в Python - String, Integer, Float, Boolean, List, Dictionary, Tuple.

Существуют несколько типов переменных в Пайтон:

1.

STRING (str)

- Это строка. Чтобы задать этот тип, нужно данные взять в ковычки (не важно одинарные или двойные)
a = "text"

dir(str) - Чтобы вывести весь список доступных для данного типа данных функций.

['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']



2.

INTEGER (int)

- Целое число. Задается без ковычек.
b = 10

dir(int)

['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']



3.

FLOAT

- Это дробное число. Задается без ковычек с точкой.
c = 10.2

dir(float)

['__abs__', '__add__', '__bool__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getformat__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__int__', '__le__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__pos__', '__pow__', '__radd__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rmod__', '__rmul__', '__round__', '__rpow__', '__rsub__', '__rtruediv__', '__set_format__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', 'as_integer_ratio', 'conjugate', 'fromhex', 'hex', 'imag', 'is_integer', 'real']


4.

BOOLEAN (bool) 

- Значение этой переменной может быть только TRUE или FALSE.
d = True

dir(bool)

['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']


5.

LIST [Список] 

mutable (может быть изменен) в отличии от Tuple.

- это список переменных. Он может содержать любое количество переменных разного типа (в примере 4 переменные разного типа).
list = [10, 10.4, "text", "24759"]

List также может содержать другой list
list = [0, 10.4, "text", [8, 'efhe']]

['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']


RANGE 

- эта функция позволяет создать список с указанным диапазомом.
list(range(1, 6))
Это то же самое, что:
[1, 2, 3, 4, 5]
Обратите внимание, что 6 не попадает в список!

Можно указать еще ШАГ в качестве третьего аргумента
list(range(1, 6, 2))
[1, 3, 5]
то есть это все числа в переделах диапазона с 1 до 5 с шагом 2


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

a = input("Введите число A")
b = input("Введите число B")

Предположим пользователь указал a = 5, b = 3.
Пользователь вводит числa. Но если мы сложим их сейчас, то получим:
c = a + b = 53

Потому что 5 и 3 - это текст.

Чтобы в программе переделать текст на числа, добавляем нужный нам формат - float или integer.

a = float (input ("Введите число A:   "))
b = float (input ("Введите число B:   "))
c = a + b
print ("Результат = " + str(c))

Результат нам надо было переделать обратно в строку для печати. Поэтому в функции print - указываем - str(c)


APPEND - Добавляет 1 элемент в список

list = [10, 10.4, "text", "24759"]
list.append(1)
print(list)
Результат
[10, 10.4, 'text', '24759', 1]

MAX - Найти максимальное значение в списке

student_grades = [9.1, 8.8, 7.5]

max_value = max(student_grades) print(max_value)

Результат:
9.1



6.

DICTIONARY (dict) {Словарь}


student_grades = {"Marie": 12, "John": 5, "Max": 6, "Michael": 10, "Anna": 11}

Про словари можете почитать в СТАТЬЕ.

Словарь может содержать внутри себя любые элементы. 
Пример - Словарь содержит 3 переменные с кортежем данных для каждого времени суток).

day_temperatures = {'morning':(1.3, 2.1, 3.0), 'noon':(19.6, 34.4, 1.2), 'evening':(2.3, 4.4, 4.7)}

dir(dict)

['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']



7.

TUPLE (Кортеж) 

- immutable в отличии от List.
Это значит, что кортеж не может быть изменен (не может мутировать)

temperature = (10, 24, 5, 19, 2)

Кортеж может содержать внутри себя любые другие переменные.
color_codes = (("green", "red", "white"), (1,2), (3974, "uougo"))  
-  Кортеж содержит внутри себя 3 других кортежа

dir(tuple)
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index']


HELP


Можно почитать документацию по командам или переменным в Python, используя HELP

help(str) 

help(str.replace) 

replace(self, old, new, count=-1, /)
    Return a copy with all occurrences of substring old replaced by new.
    
      count
        Maximum number of occurrences to replace.
        -1 (the default value) means replace all occurrences.

help(dict.values)

values(...)
    D.values() -> an object providing a view on D's values



Самые полезные ФУНКЦИИ Пайтона

 1)  PRINT - выводит на печать переменную, указанную в скобках print (average)   2)  LEN - посчитать количество элементов в списке student...