Skip to content

Latest commit

 

History

History
429 lines (344 loc) · 9.22 KB

python.md

File metadata and controls

429 lines (344 loc) · 9.22 KB

Комментарии

1C:

// это комментарий

python:

# это комментарий

Объявление переменной

1C:

Цена = 100;

python:

price = 100

Объявление процедуры

1C:

Процедура Тест()
    Цена = 100;
КонецПроцедуры

python:

def test():
    price = 100

Переменные уровня модуля

1C:

Перем Количество;
Перем Сумма;

Процедура Тест()
    Цена = 100;
    Сумма = Цена * Количество;
КонецПроцедуры

Количество = 5;
Сумма = 0;

python:

quantity = 5
amount = 0

def test():
    price = 100
    global amount # это указание что мы хотим изменить глобальную переменную
    amount = price * quantity

Объявление функции

1C:

Функция Сумма(Знач Цена, Знач Количество = 1)
    Возврат Цена * Количество;
КонецФункции

python:

def amount(price, quantity=1):
    return price * quantity

Вызов функции

1C:

Сумма = Сумма(10)

python:

x = amount(10) # если присвоим в amount, то затрем функцию

# альтернативный вариант
x = amount(price=10)

Создание массива

1C:

Имена = Новый Массив;
Имена.Добавить("Саша");
Имена.Добавить("Маша");

python:

names = []
names.append("Саша")
names.append("Маша")

# альтернативный вариант:
names = [
    "Саша",
    "Маша",
]

Цикл по массиву

1C:

Для Каждого Имя Из Имена Цикл
    Сообщить(Имя);
КонецЦикла;

python:

for name in names:
    print(name)

Проверка наличия значения в массиве

1C:

Если Имена.Найти("Катя") <> Неопределено Тогда
    Сообщить("Катя присутствует!");
КонецЕсли;

python:

if "Катя" in names:
    print("Катя присутствует!")

Поиск значения в массиве

1C:

Индекс = Имена.Найти("Катя");
Если Индекс <> Неопределено Тогда
    Сообщить(Индекс);
КонецЕсли;

python:

if "Катя" in names:
    index = names.index("Катя") # вызовет ошибку если значения нет в массиве
    print(index)

Создание соответствия

1C:

Возраст = Новый Соответствие;
Возраст["Саша"] = 18;
Возраст["Маша"] = 19;

python:

age = {}
age["Саша"] = 18
age["Маша"] = 19

# альтернативный вариант:
age = {
    "Саша": 18,
    "Маша": 19,
}

Цикл по соответствию

1C:

Для Каждого Элемент Из Возраст Цикл
    Сообщить(Элемент.Ключ + ": " + Строка(Элемент.Значение));
КонецЦикла;

python:

for key, value in age.items():
    print(key + ": " + str(value))

# альтернативный вариант:
for item in age.items():
    print(item[0] + ": " + str(item[1]))

# альтернативный вариант:
for key in age:
    print(key + ": " + str(age[key]))

Обращение к соответствию по ключу

1C:

ВозрастКати = Возвраст["Катя"];
Если ВозрастКати <> Неопределено Тогда
    Сообщить(ВозрастКати);
КонецЕсли;

python:

kate_age = age.get("Катя") # обращение через квадратные скобки выдаст ошибку если ключа нет
if kate_age is not None:
    print(kate_age)

Проверка наличия ключа в соответствии

1C:

Если Возраст["Катя"] <> Неопределено Тогда
    Сообщить(Возраст["Катя"]);
КонецЕсли;

python:

if "Катя" in age:
    print(age["Катя"])

Цикл по диапазону чисел

1C:

Для Индекс = 1 По 10 Цикл
    Сообщить(Индекс);
КонецЦикла;

python:

for i in range(1, 11):
    print(i)

Цикл с условием

1C:

Индекс = 0;
Пока Индекс < 10 Цикл
    Сообщить(Индекс);
    Индекс = Индекс + 1;
КонецЦикла;

python:

i = 0
while i < 10:
    print(i)
    i += 1

Создание структуры

1C:

Сотрудник = Новый Структура("Имя, Возраст", "Катя", 19);
Сообщить(Сотрудник.Имя);

python:

class Employee:
    def __init__(self, name, age):
        self.name = name
        self.age = age

employee = Employee("Катя", 19)
print(employee.name)

# альтернативный вариант:
from dataclasses import dataclass

@dataclass
class Employee:
    name: str
    age: int

employee = Employee("Катя", 19)
print(employee.name)

Добавление поля в структуру

1C:

Сотрудник.Вставить("Пол", "Мужской");
Сообщить(Сотрудник.Пол);

python:

employee.gender = "male"
print(employee.gender)

Форматирование строк (шаблоны, интерполяция)

1C:

Имя = "Катя";
Возраст = 19;
Сообщить(СтрШаблон("%1: %2", Имя, Возраст));

python:

name = "Kate"
age = 19
print(f"{name}: {age}")

Конкатенация массива строк

1C:

Сообщить(СтрСоединить(Имена, Символы.ПС));

python:

print("\n".join(names))

Тернарный оператор

1C:

Сумма = Цена * ?(Количество > 0, Количество, 1);

python:

amount = price * (quantity if quantity > 0 else 1)

# альтернативный вариант:
amount = price * (quantity > 0 and quantity or 1)

Условия

1C:

Если Икс = 0 Или Икс = Неопределено Тогда
    Сообщить("пусто")
ИначеЕсли 0 < Икс И Икс < 10 Тогда
    Сообщить("от 1 до 9")
Иначе
    Сообщить("меньше 0 или больше 9")
КонецЕсли;

python:

if x == 0 or x is None:
    print('пусто')
elif 0 < x and x < 10:
    print('от 1 до 9')
else:
    print('меньше 0 или больше 9')

# альтернативный вариант
if x == 0 or x == None: # сравнивать через `==` с None не рекомендуется
    print('пусто')
elif 0 < x < 10:        # да, так можно
    print('от 1 до 9')
else:
    print('меньше 0 или больше 9')

Чтение текстового файла в кодировке UTF-8

1C:

ЧтениеТекста = Новый ЧтениеТекста;
ЧтениеТекста.Открыть("log.txt", "UTF-8");
Сообщить(ЧтениеТекста.Прочитать());
ЧтениеТекста.Закрыть();

python:

with open('log.txt', 'r', encoding='utf-8') as file: # файл сам закроется после with
    print(file.read())

# альтернативный вариант
with open('log.txt', 'r', encoding='utf-8-sig') as file:
    print(file.read())

Методы работы со строками

1C python
Подстрока = Сред(Текст, 2, 2); substr = text[1:3]
Если СтрНачинаетсяС(Текст, "ВЫБРАТЬ") Тогда if text.startswith("ВЫБРАТЬ"):
Если СтрЗаканчиваетсяНа(Текст, "КОНЕЦ") Тогда if text.endswith("КОНЕЦ"):
Текст = СокрЛ(Текст); text = text.lstrip()
Текст = СокрП(Текст); text = text.rstrip()
Текст = СокрЛП(Текст); text = text.strip()
Текст = ВРег(Текст); text = text.upper()
Текст = НРег(Текст); text = text.lower()
Текст = ТРег(Текст); text = text.capitalize()
Текст = Лев(Текст, 2); text = text[:2]
Текст = Прав(Текст, 2); text = text[-2:]