Оптимизация логики построения скрипта
Написал код по заданию, но хотелось бы знать ваше мнение: насколько верно на данном этапе я понимаю логику построения скрипта, и есть ли какие-нибудь замечания и предложения?
Задачка:
- Напишите программу, которая будет принимать числа от пользователя и суммировать их, пока он не напишет слово «sum».
- Когда пользователь напишет слово «sum», должна быть выведена сумма всех чисел и начат процесс заново.
- Если пользователь напишет «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 шт):
пользователь может вводить отрицательные числа, поэтому условие
while ans >= 0:
будет некорректно работать, лучше используйте бесконечный цикл while:
while True:
- проверку на разные слова можно сделать покороче:
вместо
elif ui == "quit" or ui == "exit":
сделать
elif ui in ["quit", "exit"]:
в условии не сказано, что числа целые, поэтому возможно лучше сделать так:
ans += float(ui)кроме того пользователь может ввести какой-то треш и тогда программа упадет при попытке перевести треш в число, можно сделать защиту:
else: #ещё если все в теле if == false try: ans += float(ui) except: print("неизвестная команда!")дельный совет от @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("Некорректный ввод!")
Вот вам код
def start():
nums = 0
while True:
text = input('> ')
if text.isdigit():
nums += int(text)
if text == 'sum':
print(nums)
break
elif text == 'exit':
break
Вот код:
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('Это не число и не функция!')
Его я немного сократил и заметно улучшил.