Как сделать цикл?

Как сделать цикл до определённого момента пока пользователь не нажмёт да или же Y в калькуляторе?
n = 'Y'
while n=='Y':
    num1 = int (input('Введите первое число: '))
    num2 = int (input('Введите второе число: '))
    v = int(input('Напиши, какую операцию ты хочешь сделать? \n 1.Сложение \n 2.Вычитание \n 3.Деление \n 4.Умножение \n 5.Возвести в степень \n 6.Деление с остатком \n'))
    if v == 1:
        a = num1 + num2
        f = 'сложение'
        if v == 2:
            a = num1 - num2
            f = 'вычитание'
            if v == 3:
                a = num1 // num2
                f = 'деление'
                if v == 4:
                    a = num1 * num2
                    f = 'умножение'
                    if v == 5:
                        a = num1 ** num2
                        f = 'число в степени'
                        if v == 6:
                            a = num1 % num2
                            f = 'деление с остатком'
                            print('Продолжим? Y/N')
                            if n == 'Y' or n == 'y':
                                print ('Результат', f, '=', a)
                            else:
                                break
  • Вопрос задан
  • 138 просмотров
Решения вопроса 1
@Wearant
while True:
    num1 = int (input(' Введите первое число:  '))
    num2 = int (input(' Введите второе число:  '))
    v = int(input(
        " Напиши, какую операцию ты хочешь сделать?\n"
        " 1.Сложение\n"
        " 2.Вычитание\n"
        " 3.Деление\n"
        " 4.Умножение\n"
        " 5.Возвести в степень\n"
        " 6.Деление с остатком\n "))
    if v == 1:
        a = str(num1 + num2)
        f = 'сложения'
    elif v == 2:
        a = str(num1 - num2)
        f = 'вычитания'
    elif v == 3:
        a = str(num1 // num2)
        f = 'деления'
    elif v == 4:
        a = str(num1 * num2)
        f = 'умножения'
    elif v == 5:
        a = str(num1 ** num2)
        f = 'числа в степени'
    elif v == 6:
        a = str(num1 % num2)
        f = 'деления с остатком'
    else:
        print(
            " Вы выбрали не верный вариант\n"
            " Начнем с начала"
            )
        continue
    
    print (" Результат " + f + " = " + a)
    again = input(" Продолжим? Y/N:  ").lower()
    if again == 'y':
        continue
    else:
        break
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@dmshar
Мне кажется, что если уж беремся отвечать на такие школьные вопросы, то надо делать это так, что-бы задающий вопрос хоть какую бы то пользу из этого извлек, а так-же, что бы другие, читая этот вопрос находили бы тут хоть что-то не элементарно-тривиальное.
В частности, в этом вопросе первое, что бы я заметил, что ТС пишет
3.Деление\n"

потом под этим номером выполняет операцию
str(num1 // num2)

хотя в Python эта операция называется четко и неоднозначно:
"Целочисленное деление" и никак иначе. А деление - это совсем другая операция.
Кроме того, ТС называет
a = str(num1 % num2)
операцией
f = 'деления с остатком'
хотя в Python эта операция называется
ОСТАТОК от деления
. Смысл, как видно совсем другой.

Во-вторых писать такие простыни кода и жестко "вшивать" данные в структуру операций if - это крайне неэффективная практика. А что будет если надо будет и другие операции реализовывать? Или даже просто поменять местами строчки в подсказке местами? Мало того, что придется менять данные, но еще и влазить в и изменять структуру "лесенки" условий и наверняка навносить туда ошибок.
При этом задача решается намного проще и код становиться намного яснее:
import operator
def do_something(n1,n2,func):
    return(func(n1,n2))
again='y'
while again=='y': 
    num1 = int (input(' Введите первое число:  '))
    num2 = int (input(' Введите второе число:  '))
    dct={1:("Сложение",operator.add),
         2:("Вычитание",operator.sub),
         3:("Целочисленное деление",operator.floordiv),
         4:("Умножение",operator.mul),
         5:("Возвести в степень",operator.pow),
         6:("Остаток от деления",operator.mod)
         }
    print(" Напиши, какую операцию ты хочешь сделать?\n")
    for dc in dct:
        print(str(dc)+'.',dct[dc][0])
    v = int(input())
    if v>len(dct):
        print(" Вы выбрали не верный вариант\n")
        print(" Начнем с начала?")
    else:
        print(dct[v][0],'  :',do_something(num1,num2,dct[v][1]))
    again=input(" Продолжим? Y/N:  ").lower()


Всего то! И никакой простыни на пол сотни строк!
Хотите добавить еще операции? Добавляете ОДНУ строчку - один элемент в словарь dct и все остается работать. Никакого изменения кода.

А вот протокол работы этого скрипта:
Введите первое число:  10
 Введите второе число:  4
 Напиши, какую операцию ты хочешь сделать?
1. Сложение
2. Вычитание
3. Целочисленное деление
4. Умножение
5. Возвести в степень
6. Остаток от деления
1
Сложение   : 14
 Продолжим? Y/N:  y
 Введите первое число:  10
 Введите второе число:  4
 Напиши, какую операцию ты хочешь сделать?
1. Сложение
2. Вычитание
3. Целочисленное деление
4. Умножение
5. Возвести в степень
6. Остаток от деления
2
Вычитание   : 6
 Продолжим? Y/N:  y
 Введите первое число:  10
 Введите второе число:  4
 Напиши, какую операцию ты хочешь сделать?
1. Сложение
2. Вычитание
3. Целочисленное деление
4. Умножение
5. Возвести в степень
6. Остаток от деления
3
Целочисленное деление   : 2
 Продолжим? Y/N:  Y
 Введите первое число:  10
 Введите второе число:  4
 Напиши, какую операцию ты хочешь сделать?
1. Сложение
2. Вычитание
3. Целочисленное деление
4. Умножение
5. Возвести в степень
6. Остаток от деления
4
Умножение   : 40
 Продолжим? Y/N:  y
 Введите первое число:  10
 Введите второе число:  4
 Напиши, какую операцию ты хочешь сделать?
1. Сложение
2. Вычитание
3. Целочисленное деление
4. Умножение
5. Возвести в степень
6. Остаток от деления
5
Возвести в степень   : 10000
 Продолжим? Y/N:  y
 Введите первое число:  10
 Введите второе число:  4
 Напиши, какую операцию ты хочешь сделать?
1. Сложение
2. Вычитание
3. Целочисленное деление
4. Умножение
5. Возвести в степень
6. Остаток от деления
6
Остаток от деления   : 2
 Продолжим? Y/N:  y
 Введите первое число:  10
 Введите второе число:  4
 Напиши, какую операцию ты хочешь сделать?
1. Сложение
2. Вычитание
3. Целочисленное деление
4. Умножение
5. Возвести в степень
6. Остаток от деления
7
 Вы выбрали не верный вариант
 Начнем с начала?
 Продолжим? Y/N:  n
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
22 нояб. 2024, в 00:55
500 руб./за проект
21 нояб. 2024, в 23:30
300000 руб./за проект
21 нояб. 2024, в 22:21
3000 руб./в час