При передаче в "шаг" цикла результата функции, выдаёт ошибку 'NoneType'
Решил написать программу, которая сможет просуммировать несколько раз одно и то же число в заданном диапазоне. При этом, что бы шаг цикла составлял дробное число.
class calculator:
def __init__ (self):
self.y = 0
self.step_c = 1
def flt_to_int (self, step_x):
while step_x <= 1:
step_x *= 10
self.step_c *= 10
step_x = int (step_x)
def add (self, init_x, fin_x, step_x, const):
Fout = open ("Initial_File.txt","w")
for x in range (init_x, fin_x, step_x):
self.y += const
x /= self.step_c
if x == 0:
self.y = 0
Fout.write (f"{x} {self.y}\r\n")
Fout.close ()
start = int (input ())
finish = int (input ())
step = float (input ())
const = int (input ())
calculator().add (start, finish, calculator().flt_to_int(step), const)
Выдаёт ошибку:
TypeError: 'NoneType' object cannot be interpreted as an integer.
Почему возникает эта ошибка и как ее исправить?
Ответы (1 шт):
Не хватает return step_x в функции flt_to_int
По возможности, наглядное объяснение
calculator().add (start, finish, calculator().flt_to_int(step), const)
Что вы делаете в этой строчке?
calculator()создаете объект класса calculator.add(...)вызываете у объекта функцию с четырьмя аргументами
Какие это аргументы?
start- число, которое ввел пользователь, приведенное кintfinish- еще одно введеное числоcalculator().flt_to_int(step)- а это что такое? Мы к этому вернемсяconst- еще одно введенное число
calculator().flt_to_int(step)
Здесь вы:
- снова создаете объект класса calculator, никак не связанный с объектом, созданным ранее
- вызываете у объекта функцию
flt_to_intс аргументомstep
Что делает функция flt_to_int?
- принимает аргумент типа
float - всячески изменяет его в цикле, финально приводит к
int - завершает свою работу
- И все
Что-нибудь смущает?
В Python, если в функции нет явного return, то это значит return None. А в add в качестве третьего аргумента попадает возвращаемое значение flt_to_int, а это None. И доходя до range(init_x, fin_x, step_x) получается range(init_x, fin_x, None), а это ошибка.
Вывод: не хватает return step_x в функции flt_to_int.
PS
Пишите полностью все, что выдает интерпретатор, те самые много строк с именами файлов и номерами строк. Это очень важно.