Program performs binomial expansion, with specific input it performs line 126 referring to another function. That function calculates the "final_statement" and when the exponent == 1 it returns (line 90) "final_statement". I have added a print function right above which prints out "final_statement" just fine, but for some reason the return function right below does not return "final_statement"
It seems that no matter what i do, the return function refuses to return the value even though it clearly is valid and the return function triggers
# https://www.codewars.com/kata/540d0fdd3b6532e5c3000b5b/train/python
def calculate(newest_equation, exponent, original_parantes, letter):
newing_equation = []
newer_equation = []
for i in newest_equation:
newer_equation.append(i)
for i in newer_equation:
if letter in i:
letter_index_1 = i.index(letter)
curr_int = int(i[:letter_index_1])
for z in original_parantes:
if letter in z:
letter_index = z.index(letter)
curr_2_int = int(z[:letter_index])
if i[-1] != letter and i[letter_index + 1] != "2":
new_add = letter + str(int(i[letter_index_1 + 1:]) + 1)
else:
new_add = letter + "2"
else:
curr_2_int = int(z)
new_add = i[letter_index_1:]
product = str(curr_int * curr_2_int)
product += new_add
newing_equation.append([product])
else:
curr_int = int(i)
for z in original_parantes:
if letter in z:
letter_index = z.index(letter)
curr_2_int = int(z[:letter_index])
new_add = z[letter_index:]
else:
curr_2_int = int(z)
new_add = ""
product = str(curr_int * curr_2_int)
product += new_add
newing_equation.append([product])
sending_values = []
for i in newing_equation:
for z in i:
if z != "":
sending_values.append(str(z))
exponent -= 1
final_statement = ""
if exponent == 1:
taken_exponents = []
go = True
for q in range(0, 5):
best_exponent = 0
curr_exponent = 0
curr_sum = 0
for i in sending_values:
if letter in i:
if i[-1] != letter:
if int(i[i.index(letter) + 1:]) not in taken_exponents:
curr_exponent = i[i.index(letter) + 1:]
if i[-1] == letter:
if 1 not in taken_exponents:
curr_exponent = 1
else:
if 0 in taken_exponents:
go = False
curr_exponent = 0
if int(curr_exponent) >= int(best_exponent):
best_exponent = curr_exponent
taken_exponents.append(int(best_exponent))
if go:
for i in sending_values:
if letter not in i:
if best_exponent == 0:
curr_sum += int(i)
if letter in i:
if i[-1] != letter:
if int(i[i.index(letter) + 1:]) == int(best_exponent):
curr_sum += int(i[:i.index(letter)])
elif i[-1] == letter:
if int(best_exponent) == 1:
curr_sum += int(i[:i.index(letter)])
if str(curr_sum) != "" and int(best_exponent) >= 1 and str(curr_sum)[0] == "-":
final_statement = final_statement[:-1]
if str(curr_sum) == "1" and int(best_exponent) >= 1:
curr_sum = ""
if int(best_exponent) > 1:
final_statement += str(curr_sum) + letter + "^" + str(best_exponent) + "+"
if int(best_exponent) == 1:
final_statement += str(curr_sum) + letter + "+"
if int(best_exponent) == 0:
final_statement += str(curr_sum)
print(final_statement)
return final_statement
if exponent > 1:
calculate(sending_values, exponent, original_parantes, letter)
def expand(expr):
exponent = int(expr[-1])
letters = "abcdefghijklmnopqrstuvwxyz"
numbers = "1234567890"
a = ""
x = ""
b = ""
a_find = True
count = 0
for i in expr[1:]:
if i == ")":
break
if i in letters:
a_find = False
x += i
if a == "":
if expr[count] == "-":
a += "-"
a += "1"
if i in numbers and a_find:
if expr[count] == "-":
a += "-"
a += i
if not a_find and i in numbers:
if expr[count] == "-":
b += "-"
b += i
count += 1
r_a_x = a + x
orig_parates = (r_a_x, b)
if exponent > 1:
final_statement_2 = calculate(orig_parates, exponent, orig_parates, x)
return final_statement_2
if exponent == 0:
return "1"
if exponent == 1:
if a == "1":
a = ""
if a == "-1":
a = "-"
returnation = str(a) + str(x) + str(b)
return returnation
print(expand("(5m+3)^4"))
print("should not return None, but instead 625m^4+1500m^3+1350m^2+540m+81")