1. Покупка в долларах (в коде есть строки из следующих тем: "while", "строки").

(открыть в новой вкладке)

Условие:

Пользователь хочет совершить покупку за 100 долларов. А у пользователя счёт в рублях, поэтому программа спрашивает, сколько у него рублей на счету.
Если денег хватает, то программа выводит на экран остаток на счету после покупки.
Если не хватает, то пишет, сколько рублей не хватает для покупки.

Код:

print("Стоимость Вашей покупки составляет 100 долларов США\n")


# ввод данных, которые являются константой
BUY_USD = 100


# ввод переменных, которые нуждаются в проверке и необходимой модификации
score_rub = input("Введите остаток денежных средств на Вашем счету, в руб. (формат xxx.xx): ")                           # просто заводим данные, создавая переменную, для запуска условий и циклов
score_rub_mod = score_rub                                                                                                # создадим новую переменную и проверять будем её
if "." and "," in score_rub_mod:                                                                                         # если в введённых данных и точка и запятая значит пользователь ошибся при вводе, оставим данные без обработки и передадим в цикл
    pass
if "." in score_rub_mod and "," not in score_rub_mod:                                                                    # если в введённых данных есть точка и нет запятой, то удалим точку (это необходимо сделать для того, чтобы воспользоваться функцией isdigit)
    score_rub_mod = score_rub_mod.replace(".", "")   
if "," in score_rub_mod and "." not in score_rub_mod:                                                                    # если в введённых данных есть запятая и нет точки, то удалим запятую (это необходимо сделать для того, чтобы воспользоваться функцией isdigit)
    score_rub_mod = score_rub_mod.replace(",", "")
while score_rub_mod.isdigit() == False:                                                                                  # запускаем цикл, пока модифицированная переменная не будет иметь возможность превращаться из строки в цифру
    score_rub = input("Вы ввели данные не в том формате. Сколько денежных средств на Вашем счету в руб. (формат xxx.xx): ")      # первоначальный ввод данных оказался неудачным и уже в цикле мы вводим данные заново
    score_rub_mod = score_rub
    if "." and "," in score_rub_mod:                                                                                    # если в введённых данных и точка и запятая значит пользователь ошибся при вводе, оставим данные без обработки и передадим в цикл
        pass
    if "." in score_rub_mod and "," not in score_rub_mod:                                                               # если в введённых данных есть точка и нет запятой, то удалим точку (это необходимо сделать для того, чтобы воспользоваться функцией isdigit)
        score_rub_mod = score_rub_mod.replace(".", "")   
    if "," in score_rub_mod and "." not in score_rub_mod:                                                               # если в введённых данных есть запятая и нет точки, то удалим запятую (это необходимо сделать для того, чтобы воспользоваться функцией isdigit)
        score_rub_mod = score_rub_mod.replace(",", "")                                                           
    if score_rub_mod.isdigit():                                                                                         # здесь условие окончания цикла
        pass

if "," in score_rub:                                                                                                    # после окончательной проверки, нужно наконец-то избавиться от запятой, если она была
    score_rub = score_rub.replace(",",".")                                                                  
score_rub = float(score_rub)                                                                                            # теперь окончательно приводим данные к нужному формату "float"


# ввод переменных, которые нуждаются в проверке и необходимой модификации #2
kurs_usd = input("Введите курс доллара (формат xxx.xx): ")                                                                # просто заводим данные, создавая переменную, для запуска условий и циклов
kurs_usd_mod = kurs_usd                                                                                                   # создадим новую переменную и проверять будем её
if "." and "," in kurs_usd_mod:                                                                                           # если в введённых данных и точка и запятая значит пользователь ошибся при вводе, оставим данные без обработки и передадим в цикл
    pass
if "." in kurs_usd_mod and "," not in kurs_usd_mod:                                                                       # если в введённых данных есть точка и нет запятой, то удалим точку (это необходимо сделать для того, чтобы воспользоваться функцией isdigit)
    kurs_usd_mod = kurs_usd_mod.replace(".", "")   
if "," in kurs_usd_mod and "." not in kurs_usd_mod:                                                                       # если в введённых данных есть запятая и нет точки, то удалим запятую (это необходимо сделать для того, чтобы воспользоваться функцией isdigit)
    kurs_usd_mod = kurs_usd_mod.replace(",", "")
while kurs_usd_mod.isdigit() == False:                                                                                    # запускаем цикл, пока модифицированная переменная не будет иметь возможность превращаться из строки в цифру
    kurs_usd = input("Вы ввели данные не в том формате. Введите курс доллара (формат xxx.xx): ")                          # первоначальный ввод данных оказался неудачным и уже в цикле мы вводим данные заново
    kurs_usd_mod = kurs_usd
    if "." and "," in kurs_usd_mod:                                                                                       # если в введённых данных и точка и запятая значит пользователь ошибся при вводе, оставим данные без обработки и передадим в цикл
        pass    
    if "." in kurs_usd_mod and "," not in kurs_usd_mod:                                                                   # если в введённых данных есть точка и нет запятой, то удалим точку (это необходимо сделать для того, чтобы воспользоваться функцией isdigit)
        kurs_usd_mod = kurs_usd_mod.replace(".", "")   
    if "," in kurs_usd_mod and "." not in kurs_usd_mod:                                                                   # если в введённых данных есть запятая и нет точки, то удалим запятую (это необходимо сделать для того, чтобы воспользоваться функцией isdigit)
        kurs_usd_mod = kurs_usd_mod.replace(",", "")                                                           
    if kurs_usd_mod.isdigit():                                                                                            # здесь условие окончания цикла
        pass

if "," in kurs_usd:                                                                                                       # после окончательной проверки, нужно наконец-то избавиться от запятой, если она была
    kurs_usd = kurs_usd.replace(",",".")                                                                  
kurs_usd = float(kurs_usd)                                                                                                # теперь окончательно приводим данные к нужному формату "float"


# переведём цену покупки в рубли
buy_rub = BUY_USD * kurs_usd


# Проверим, хватает ли денег на счёте? Если не хватает закончим программу сразу. Если хватает, то зададим вопрос о желании произвести покупку. Запустим в цикле вопрос о желании сделать покупку с автоматическим списанием денег со счёта.
if score_rub < buy_rub:
    print("На счёте недостаточно средств для покупки.")
    print("Не хватает", (buy_rub - score_rub), "руб.")
elif score_rub >= buy_rub:
    answer = str()
    while answer != "нет" and score_rub >= buy_rub:
        answer = input("Хотите ли Вы произвести покупку? (да/нет) ")
        if answer == "нет":
            print("До свидания.")    
        elif answer == "да":
            score_rub -= buy_rub
            print("Остаток денежных средств на счету равен", score_rub, "руб.")
    if answer == "да" and score_rub < buy_rub:
        print("Для следующей покупки не хватает", buy_rub - score_rub, "руб.")