Задать вопрос
@Govnokod12

Проблема с циклами на Python?

Никто на каком-нибудь 20-дцати строчном простеньком коде в уроках по Python не показывал примеры применения циклов, операторов. Тему я не очень понял. Так вот. Наглядно, покажите на каком-нибудь простеньком коде калькулятора применение циклов, операторов, чтоб, допустим после решения скриптом примера, пользователя кидало обратно в начало кода.
  • Вопрос задан
  • 175 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
shabelski89
@shabelski89
engineer
То что вы описываете должна делать функция.
Вы делаете например цикл while, из которого вызывается определенная функция, одна или каждая на свой вариант. Функция вернет значение и вы снова вернетесь в цикл.
Вот пример как это было на geekbrains. Тут кстати есть проверки на тип вводимых значений.
И да полистай учебник.
spoiler
# Задание:
# Эта программа являет собой упрощенный симулятор банкомата, пользователь вводит номер карты и пин код,
# в случае успеха программа предлагает меню для выбора действий, где он может проверить счет, или снять деньги.
#
# Эта задача не так похожа на другие, но она, как никогда прежде приближена к реалиям разработки общего проекта.
#
# Ваша задача исправить ошибки логики, и выполнить проверки данных, которые вводит пользователь.
# Обязательно убедитесь, что вы выполнили все проверки, попробуйте сами сломать свою программу вводя неверные данные!
import re

person1 = {'card': 4276123465440000, 'pin': 9090, 'money': 100.90}
person2 = {'card': 4276123465440001, 'pin': 9091, 'money': 200.90}
person3 = {'card': 4276123465440002, 'pin': 9092, 'money': 300.90}  # номер карты = 16, пин код = 4

bank = [person1, person2, person3]


def get_person_by_card(card_number):
    for person in bank:
        if person['card'] == card_number:
            return person


def is_pin_valid(person, pin_code):
    if person['pin'] == pin_code:
        return True
    return False


def check_account(person):
    return round(person['money'], 2)


def withdraw_money(person, money):
    if person['money'] - money >= 0:  # исправил условие возможности снятия денег
        person['money'] -= money
        return 'Вы сняли {} рублей.'.format(money)
    else:
        return 'На вашем счету недостаточно средств!'


def process_user_choice(choice, person):
    if choice == 1:
        print(check_account(person))
    elif choice == 2:
        count = input('Сумма к снятию: ')
        if check_input_money(count):
            count = float(count)
            if count > 0:   # можно снять только сумму > 0!
                print(withdraw_money(person, count))
            else:
                print('Вводите только допустимую сумму!')
                return False
    else:
        print('Вводите только допустимую сумму!')
        return False


def check_input_money(money):  # добавил функцию проверки снимаемых денег
    try:
        float(money)
        return True
    except ValueError:
        print('Вводите только допустимую сумму!')
        return False


def is_valid_choice(number):  # добавил функцию проверки на число выбора действия
    try:
        int(number)
        return True
    except ValueError:
        print('Вводите только числа!')
        return False


def check_card_pin(string):  # добавил функцию проверки регулярным выражением на правильность ввода
    if len(string) == 21:  # длина строки = номер карты 16 + пробел 1 + пин код 4
        pattern = '(\\d{16}\\s\\d{4})'
        result = re.search(pattern, string)
        if result:
            return True
    else:
        return False


def start():
    input_str = input('Введите номер карты и пин код через пробел: ')
    if check_card_pin(input_str):  # проверка на длину и число корректного ввода номера карты и пин кода
        card_number, pin_code = input_str.split()
        card_number = int(card_number)
        pin_code = int(pin_code)
        person = get_person_by_card(card_number)
        if person and is_pin_valid(person, pin_code):
            while True:
                choice = input('Выберите пункт:\n'
                                '1. Проверить баланс\n'
                                '2. Снять деньги\n'
                                '3. Выход\n'
                                '---------------------\n'
                                'Ваш выбор:')
                if is_valid_choice(choice):  # проверка на число
                    choice = int(choice)
                    if choice == 3:
                        break
                    elif choice == 1 or choice == 2:  # добавил блок вызова функции при выборе 1 или 2
                        process_user_choice(choice, person)
    else:
        print('Номер карты или пин код введены не верно!')


start()

Ответ написан
Пригласить эксперта
Ответы на вопрос 1
citizentwo
@citizentwo
#!/usr/bin/env python3
exit_no_yes = "n"
counter = 0

while exit_no_yes != "y":
    print(counter)
    exit_no_yes = input("Выйти из цикла?: ")
    if exit_no_yes == "y":
        break
    else:
        counter += 1
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы