コード例 #1
0
def sum_symbols():
    summa = 0
    while True:
        words = input_value('Input numbers or ! to exit: ', '^.+$', str)
        current_number = ''
        for symbol in words:
            if ord(symbol) >= 48 and ord(symbol) <= 57:
                current_number = current_number + symbol
            if ord(symbol) == 32 or ord(symbol) == 33:
                summa = summa + int(current_number)
                print('Sub sum = ', summa)
                current_number = ''
                if ord(symbol) == 33:
                    return summa
コード例 #2
0
ファイル: 06.py プロジェクト: alexartwww/geekbrains-python
        "eд": "шт."
    }), (2, {
        "название": "принтер",
        "цена": 6000,
        "количество": 2,
        "eд": "шт."
    }), (3, {
        "название": "сканер",
        "цена": 2000,
        "количество": 7,
        "eд": "шт."
    })]

    articul = 999
    while True:
        articul = input_value('Input articul or 0 to stop: ', '^[0-9]+$', int)
        if articul == 0:
            break

        name = input_value('Input name: ', '^.+$', str)
        price = input_value('Input price: ', '^[0-9]+$', int)
        num = input_value('Input num: ', '^[0-9]+$', int)
        unit = input_value('Input unit: ', '^.+$', str)

        item = (articul, {
            "название": name,
            "цена": price,
            "количество": num,
            "eд": unit
        })
        db.append(item)
コード例 #3
0
task = '''
Реализовать функцию int_func(), принимающую слово из маленьких латинских букв
и возвращающую его же, но с прописной первой буквой.

Например, print(int_func(‘text’)) -> Text.

Продолжить работу над заданием. В программу должна попадать строка из слов,
разделенных пробелом. Каждое слово состоит из латинских букв в нижнем регистре.
Сделать вывод исходной строки, но каждое слово должно начинаться с заглавной буквы.
Необходимо использовать написанную ранее функцию int_func().
'''


def int_func(word):
    return (chr(ord(word[0:1]) - 32) if ord(word[0:1]) >= 97
            and ord(word[0:1]) <= 122 else word[0:1]) + word[1:]


if __name__ == '__main__':
    print(task)

    print('abc', '=>', int_func('abc'))
    print('Abc', '=>', int_func('Abc'))
    print('klm', '=>', int_func('klm'))
    print('Klm', '=>', int_func('Klm'))
    print('zyx', '=>', int_func('zyx'))
    print('Zyx', '=>', int_func('Zyx'))

    words = input_value('Input [a-z ]+: ', '^[a-z ]+$', str)
    print(' '.join([int_func(word) for word in words.split()]))
コード例 #4
0
ファイル: 01.py プロジェクト: alexartwww/geekbrains-python
from common import input_value, readfile

task = '''
Создать программно файл в текстовом формате, записать в него построчно данные,
вводимые пользователем. Об окончании ввода данных свидетельствует пустая строка.
'''

if __name__ == '__main__':
    print(task)

    with open('01.file.txt', 'w') as file:
        while True:
            string = input_value('Type a string: ', '^.*$', str)
            if string == '':
                break
            file.write(string + '\n')

    print('================')
    print(readfile('01.file.txt'))
コード例 #5
0
ファイル: 03.py プロジェクト: alexartwww/geekbrains-python
пользователю ввести текст (не число) и отобразить соответствующее
сообщение. При этом работа скрипта не должна завершаться.
'''


class NonIntListError(Exception):
    def __str__(self):
        return 'NonIntListError: please add only numbers value!'


class ExtraList(list):
    def append(self, value):
        if not re.search('^[0-9]+$', value):
            raise NonIntListError
        super().append(value)


if __name__ == '__main__':
    print(task)

    values = ExtraList()
    while True:
        try:
            value = input_value('Input value: ', '^.*$', str)
            if value == 'stop':
                print(values)
                break
            values.append(value)
        except NonIntListError as e:
            print(e)
コード例 #6
0
ファイル: 05.py プロジェクト: alexartwww/geekbrains-python
from common import input_value

task = '''
Реализовать структуру «Рейтинг», представляющую собой не возрастающий набор натуральных чисел.
У пользователя необходимо запрашивать новый элемент рейтинга. Если в рейтинге существуют
элементы с одинаковыми значениями, то новый элемент с тем же значением должен разместиться
после них.

Подсказка. Например, набор натуральных чисел: 7, 5, 3, 3, 2.
Пользователь ввел число 3. Результат: 7, 5, 3, 3, 3, 2.
Пользователь ввел число 8. Результат: 8, 7, 5, 3, 3, 2.
Пользователь ввел число 1. Результат: 7, 5, 3, 3, 2, 1.
Набор натуральных чисел можно задать непосредственно в коде, например, my_list = [7, 5, 3, 3, 2].
'''

if __name__ == '__main__':
    print(task)

    raiting = [7, 5, 3, 3, 2]

    while True:
        raiting.sort(reverse = True)
        print('Raiting = ', raiting)
        num = input_value('Input number or 0 - to exit: ', '^[0-9]+$', int)
        if num == 0:
            break
        raiting.append(num)
コード例 #7
0
ファイル: 03.py プロジェクト: alexartwww/geekbrains-python
Пользователь вводит месяц в виде целого числа от 1 до 12. Сообщить к какому времени года
относится месяц (зима, весна, лето, осень). Напишите решения через list и через dict.
'''

if __name__ == '__main__':
    print(task)

    season_list = [
        'Winter', 'Winter', 'Spring', 'Spring', 'Spring', 'Summer', 'Summer',
        'Summer', 'Autumn', 'Autumn', 'Autumn', 'Winter'
    ]
    season_dict = {
        0: 'Winter',
        1: 'Winter',
        2: 'Spring',
        3: 'Spring',
        4: 'Spring',
        5: 'Summer',
        6: 'Summer',
        7: 'Summer',
        8: 'Autumn',
        9: 'Autumn',
        10: 'Autumn',
        11: 'Winter',
    }

    month = input_value('Input month: ', '^(1|2|3|4|5|6|7|8|9|10|11|12)$', int)

    print('Season by list: ', season_list[month - 1])
    print('Season by dict: ', season_dict[month - 1])
コード例 #8
0
from common import input_value

task = '''
Запросите у пользователя значения выручки и издержек фирмы. Определите, с каким финансовым результатом работает фирма
(прибыль — выручка больше издержек, или убыток — издержки больше выручки). Выведите соответствующее сообщение.
Если фирма отработала с прибылью, вычислите рентабельность выручки (соотношение прибыли к выручке).
Далее запросите численность сотрудников фирмы и определите прибыль фирмы в расчете на одного сотрудника.
'''

if __name__ == '__main__':
    print(task)
    earnings = input_value('Input earnings: ', '^[0-9]+(\.[0-9]+)?$', float)
    costs = input_value('Input costs: ', '^[0-9]+(\.[0-9]+)?$', float)
    profit = earnings - costs
    print('У вас ', 'прибыль' if earnings >= costs else 'убыток', ' = ', profit)
    if profit >= 0:
        print('Рентабельность = ', profit / earnings)
        employees = input_value('Input employees: ', '^[0-9]+$', int)
        print('Прибыль фирмы в расчете на одного сотрудника = ', profit / employees)
コード例 #9
0
ファイル: 02.py プロジェクト: alexartwww/geekbrains-python
from common import input_value

task = '''
Для списка реализовать обмен значений соседних элементов, т.е. Значениями обмениваются элементы
с индексами 0 и 1, 2 и 3 и т.д. При нечетном количестве элементов последний сохранить на своем
месте. Для заполнения списка элементов необходимо использовать функцию input().
'''

if __name__ == '__main__':
    print(task)

    num = input_value('Input number of values: ', '^[0-9]+$', int)

    values = []
    while len(values) < num:
        value = input_value('Input value: ', '^.+$', str)
        values.append(value)

    print(values)

    for i in range(len(values) // 2):
        values[i * 2], values[i * 2 + 1] = values[i * 2 + 1], values[i * 2]

    print(values)
コード例 #10
0
без встроенной функции возведения числа в степень.

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


def my_func(x, y):
    ''' second variant '''

    def prod(vars):
        ''' there is not build-in function like sum :('''
        result = 1
        for var in vars:
            result = result * var
        return result

    if y == 0:
        return 1

    return prod([x if y > 0 else 1 / x for _ in range(abs(y))])


if __name__ == '__main__':
    print(task)

    x = input_value('Input x: ', '^\-?[0-9]+(\.[0-9]+)?$', float)
    y = input_value('Input y: ', '^\-?[0-9]+$', int)
    print(my_func(x, y))
コード例 #11
0
ファイル: 01.py プロジェクト: alexartwww/geekbrains-python
from common import input_value

task = '''
Реализовать функцию, принимающую два числа (позиционные аргументы) и выполняющую их
деление. Числа запрашивать у пользователя, предусмотреть обработку ситуации деления
на ноль.
'''


def divide(a, b):
    try:
        return a / b
    except ZeroDivisionError:
        return None


if __name__ == '__main__':
    print(task)

    a = input_value('Input a: ', '^[0-9]+(\.[0-9]+)?$', float)
    b = input_value('Input b: ', '^[0-9]+(\.[0-9]+)?$', float)

    print(divide(a, b))
コード例 #12
0
from common import input_value

task = '''
Поработайте с переменными, создайте несколько, выведите на экран, запросите у пользователя несколько чисел и строк
и сохраните в переменные, выведите на экран.
'''

if __name__ == '__main__':
    print(task)
    a = 1
    b = 2.3445
    c = 'hello'
    d = True

    a = input_value('Input int: ', '^[0-9]+$', int)
    print(a)

    b = input_value('Input float: ', '^[0-9]+(\.[0-9]+)?$', float)
    print(b)

    c = input_value('Input str: ', '^.+$', str)
    print(c)

    d = input_value('Input bool: ', '^.*$', bool)
    print(d)
コード例 #13
0
ファイル: 04.py プロジェクト: alexartwww/geekbrains-python
from common import input_value

task = '''
Пользователь вводит целое положительное число. Найдите самую большую цифру в числе.
Для решения используйте цикл while и арифметические операции.
'''

if __name__ == '__main__':
    print(task)
    number = input_value('Input number: ', '^[0-9]+$', int)

    max = 0
    current = 10
    while number > 0:
        if number % 10 > max:
            max = number % 10
        number = number // 10

    print(max)
コード例 #14
0
Проверьте его работу на данных, вводимых пользователем. При вводе пользователем нуля
в качестве делителя программа должна корректно обработать эту ситуацию
и не завершиться с ошибкой.
'''


class MyZeroDivisionError(ZeroDivisionError):
    def __str__(self):
        return 'MyZeroDivisionError'


class NewInt(int):
    def __truediv__(self, value):
        if value == NewInt(0):
            raise MyZeroDivisionError
        return NewInt(int.__truediv__(self, value))


if __name__ == '__main__':
    print(task)

    while True:
        try:
            a = input_value('Input int A: ', '^[0-9]+$', NewInt)
            b = input_value('Input int B: ', '^[0-9]+$', NewInt)

            print(a / b)
            break
        except MyZeroDivisionError as e:
            print(e)
コード例 #15
0
ファイル: 04.py プロジェクト: alexartwww/geekbrains-python
from common import input_value

task = '''
Пользователь вводит строку из нескольких слов, разделённых пробелами. Вывести каждое слово
с новой строки. Строки необходимо пронумеровать. Если в слово длинное, выводить только
первые 10 букв в слове.
'''

if __name__ == '__main__':
    print(task)

    string = input_value('Input str: ', '^.+$', str)

    print('\n'.join(
        map(lambda x: x if len(x) <= 10 else x[0:10], string.split())))
コード例 #16
0
ファイル: 03.py プロジェクト: alexartwww/geekbrains-python
from common import input_value

task = '''
Узнайте у пользователя число n. Найдите сумму чисел n + nn + nnn. Например, пользователь ввёл число 3.
Считаем 3 + 33 + 333 = 369.
'''

if __name__ == '__main__':
    print(task)

    n = input_value('Input n: ', '^[0-9]{1}$', str)

    print(int(n * 1) + int(n * 2) + int(n * 3))
コード例 #17
0
from common import input_value

task = '''
Пользователь вводит время в секундах. Переведите время в часы, минуты и секунды и выведите в формате чч:мм:сс.
Используйте форматирование строк.
'''

if __name__ == '__main__':
    print(task)
    seconds = input_value('Input seconds: ', '^[0-9]+$', int)
    time = ':'.join(
        map(lambda x: str(x) if x >= 10 else '0' + str(x),
            (seconds // 3600, seconds % 3600 // 60, seconds % 3600 % 60)))
    print(time)