Оптимизация логики построения скрипта

Написал код по заданию, но хотелось бы знать ваше мнение: насколько верно на данном этапе я понимаю логику построения скрипта, и есть ли какие-нибудь замечания и предложения?

Задачка:

  1. Напишите программу, которая будет принимать числа от пользователя и суммировать их, пока он не напишет слово «sum».
  2. Когда пользователь напишет слово «sum», должна быть выведена сумма всех чисел и начат процесс заново.
  3. Если пользователь напишет «exit» или «quit», программа должна быть завершена.

код:

ans = 0 #иниц. переменной - сумма чисел
while ans >= 0: #пока ans больше\равна 0
    ui = input("> ") #даем юзеру ввести данные
    if ui == "sum": #если sum == true
        print(ans) #вывод суммы
        ans=0 #сброс суммы
    elif ui == "quit" or ui == "exit": # +ещё если ввел quit или exit
        break #выйти из скрипта
    else: #ещё если все в теле if == false
        ans += int(ui) #посчитать сумму строки ui=input(">") и преобразовать её в int

Ответы (4 шт):

Автор решения: Zhihar
  1. пользователь может вводить отрицательные числа, поэтому условие

     while ans >= 0:
    

будет некорректно работать, лучше используйте бесконечный цикл while:

    while True:
  1. проверку на разные слова можно сделать покороче:

вместо

elif ui == "quit" or ui == "exit":

сделать

elif ui in ["quit", "exit"]:
  1. в условии не сказано, что числа целые, поэтому возможно лучше сделать так:

     ans += float(ui)
    
  2. кроме того пользователь может ввести какой-то треш и тогда программа упадет при попытке перевести треш в число, можно сделать защиту:

     else: #ещё если все в теле if == false
         try:
             ans += float(ui)
         except:
             print("неизвестная команда!")
    
  3. дельный совет от @CrazyElf - приведите для начала полученную строку к нижнему регистру, чтобы корректно обрабатывать Sum, sum, SUM и т.д.:

     ui = input("> ").lower() #даем юзеру ввести данные
    

ну или так:

    ui = ui.lower()
→ Ссылка
Автор решения: Эм Три

Спасибо всем за советы. Особая благодарность CrazyElf и Zhihar Так думаю будет красивее и практичнее.

ans = 0 #иниц. переменной - сумма чисел
while True: #пока ans больше\равна 0
    ui = input("> ").lower() #даем юзеру ввести данные, с разным регистром (lower)
    if ui == "sum": #если sum == true
        print(ans) #вывод сумм
        ans=0 #сброс суммы
    elif ui in ["quit", "exit"]: # +ещё если ввел quit или exit
        break #выйти из скрипта
    else: #ещё если всё в теле if == false
        try: #при корректном вводе
            ans += float(ui) #посчитать сумму строки ui=input(">") и преобразовать её в float
        except: #вывести при белеберде юзера
            print("Некорректный ввод!")
→ Ссылка
Автор решения: SimpleDev

Вот вам код

def start():
    nums = 0
    while True:
        text = input('> ')
        if text.isdigit():
            nums += int(text)
        if text == 'sum':
            print(nums)
            break
        elif text == 'exit':
             break
→ Ссылка
Автор решения: ПИТОНИСТ версия-3-8

Вот код:

ans=None #ans - None ("ничего" в логике)
s=0
while ans != 'quit' and ans != 'exit': 
    ans = input("Введите число или функцию --> ").lower() #преобразовываем ввод в маленькие буквы
    if ans == "sum": print(s); ans=0 
    elif ans.isdigit() or ans.replace('-', '', 1).isdigit(): s += int(ans) 
    elif ans!= 'quit' and ans != 'exit': print('Это не число и не функция!')

Его я немного сократил и заметно улучшил.

→ Ссылка