What's new

Article Вычисляем периметр квадрата с помощью python + разбор

MRX 0

MRX

Advanced
May 23, 2020
50
137
Привет!
С помощью этого скрипта на python можно получить периметр квадрата, а ещё я постараюсь вам объяснить, что да как тут происходит!
Python:
import sys

if len(sys.argv) < 2:
    print("Передайте длину стороны квадрата!")
    exit()

square_side = sys.argv[1]
if not square_side.isnumeric():
    print("Введите число в качестве стороны квадрата!")
    exit()

perimeter = int(square_side) * 4

print(f"Периметр квадрата со стороной {square_side} равен {perimeter}")
Разбор:
import sys - Этот модуль обеспечивает доступ к некоторым переменным, используемым или поддерживаемым интерпретатором, а также к функциям, тесно взаимодействующим с интерпретатором.

sys.argv - что это?
разберём такой код:
Python:
import sys

print(sys.argv)
print(type(sys.argv))
теперь запускаем этот скрипт.

Code:
>>> python3.9 test-.py  10
['test-.py', '10']
<class 'list'>
вау, получаем ещё и массив!
type просто для теста вывел что бы вы знали)

Значение sys.argv – это список аргументов командной строки, которые причастны к скрипту Python.
0 элементом будет всегда название самого скрипта, потому что python3.9 это запуск программы.
test-.py - это 0 элемент.
Число 10 - это будет 1 элементом

я пропущу пока что все if'ы и поговорим как сразу написать рабочую программу
создаём переменную
Python:
square_side = sys.argv[1]
каким же способом мы посчитаем периметр квадрата? Элементарно!

Python:
perimeter = int(square_side) * 4
зачем здесь int ? Потому что если не будет int, будет умножаться строка и вместо того что бы получить 40 при умножении 10 * 4 получим 10101010.

Python:
print(f"Периметр квадрата со стороной {square_side} равен {perimeter}")
что такое f !!?? f-строки делают очень простую вещь — они берут значения переменных, которые есть в текущей области видимости, и подставляют их в строку.
Начиная с версии 3.6 в Python появился новый тип строк — f-строки, которые буквально означают «formatted string». Эти строки улучшают читаемость кода, а также работают быстрее чем другие способы форматирования. F-строки задаются с помощью литерала «f» перед кавычками.
Классно у нас рабочий код!
Python:
import sys

square_side = sys.argv[1]
perimeter = int(square_side) * 4

print(f"Периметр квадрата со стороной {square_side} равен {perimeter}")
Делаем программу понятной для тупеньких пользователей :)
Но что будет если мы ничего не введём? Будет ужасная Ошибка. Вот мы тупенький пользователь который не прочитал инструкцию и потом ходит топает ногами, и думает что программа не работает, так давайте дадим понять что пользователь сам тупенький :)
Вот ошибка
Code:
python3.9 test.py
Traceback (most recent call last):
  File "/mnt/e/test.py", line 3, in <module>
    square_side = sys.argv[1]
IndexError: list index out of range
IndexError: list index out of range, т.е в массиве sys.argv не находиться 1-ый элемент, ну очевидно мы его не передали.

Python:
if len(sys.argv) < 2:
    print("Передайте длину стороны квадрата!")
    exit()
Даже если знать не знать язык всё интуитивно понятно, если(if) длина аргумента ( len(sys.argv) ) , меньше 2-ух то выводим следующее, и выходим из программы
исход:
Python:
import sys

if len(sys.argv) < 2:
    print("Передайте длину стороны квадрата!")
    exit()

square_side = sys.argv[1]
perimeter = int(square_side) * 4

print(f"Периметр квадрата со стороной {square_side} равен {perimeter}")
Отлично теперь мы не получаем ошибку от пустоты, но что будет если мы введём не число.... А например буквы.
Хорошо, это мы тоже исправим
есть 2 варианта как это исправить
1. это обработка исключений
2. Это мы возьмём значение, а потом просто проверим его
Я выбрал 2-ой способ.
Python:
if not square_side.isnumeric():
    print("Введите число в качестве стороны квадрата!")
    exit()

Вот и получили рабочую программу
Всем спасибо, надеюсь кому то было полезно!
 
Top Bottom