Commit f804e60f by likorn

cought! the errors and fixed the thing with infinite and complex numbers. i hope XD

parent cf63888d
Showing with 21 additions and 19 deletions
......@@ -2,7 +2,7 @@ import math
def input_float(text):
# check if the input can be converted to float to prevent errors
# check if the input can be converted to a float to prevent errors
inp = input(text)
try:
float(inp)
......@@ -21,19 +21,14 @@ def input_with_conditions(text, operator):
# check if the input fits the conditions listed in the task, i.e.
# H > 0, C >=1
# since we'll need to divide by A I also added A != 0 to prevent the errors
error_msg = "The value doesn't fit the conditions, try again "
value = input_float(text)
if (operator == '>' and value <= 0) or (operator == '>=' and value < 1):
return input_with_conditions(error_msg, operator)
elif operator == '!=' and value <= 0:
error_msg = "Hey, sorry, we'll have to divide by A and get the square root of it, so all of the values less " \
"or equal to 0 are unacceptable "
return input_with_conditions(error_msg, operator)
return input_with_conditions("The value doesn't fit the conditions, try again ", operator)
return value
def calculate_x(until):
# calculate x in the necessary points
# calculate x in the necessary point
xx = a + h
for i in range(1, until + 1):
xx = xx + h * math.pow(c, i)
......@@ -41,9 +36,14 @@ def calculate_x(until):
def calculate_y(xx):
# calculate y according to the formula and return the (x, y) function in an array
yy = float(math.pow(xx, 2) + 20 * xx - 14) / math.sqrt(xx) - (1 + xx) / xx
return round(yy, 3)
# calculate y according to the formula
if xx < 0:
return 'complex number'
elif xx == 0:
return 'infinite'
else:
yy = float(math.pow(xx, 2) + 20 * xx - 14) / math.sqrt(xx) - (1 + xx) / xx
return round(yy, 3)
def print_table():
......@@ -58,26 +58,28 @@ def print_table():
# input all the values: A, H, C, YM
a = input_with_conditions("Enter a starting value A = ", '!=')
# a = input_with_conditions("Enter a starting value A = ", '!=')
a = input_float("Enter a starting value A = ")
h = input_with_conditions("Enter a step H = ", '>')
c = input_with_conditions("Enter the step's coefficient C = ", '>=')
ym = input_float("Enter function value upper limit YM = ")
x = []
y = []
if calculate_y(a) <= ym:
if calculate_y(a) == 'complex number' or calculate_y(a) == 'infinite' or calculate_y(a) <= ym:
x.append(round(a, 3))
y.append(calculate_y(a))
if calculate_y(a + h) <= ym:
if calculate_y(a + h) == 'complex number' or calculate_y(a + h) == 'infinite' or calculate_y(a + h) <= ym:
x.append(round(a + h, 3))
y.append(calculate_y(a + h))
counter = 1
while counter < 14:
x.append(calculate_x(counter))
y.append(calculate_y(calculate_x(counter)))
counter += 1
if not y[len(y) - 1] <= ym:
y.remove(y[len(y) - 1])
if calculate_y(calculate_x(counter)) <= ym \
or calculate_y(calculate_x(counter)) == 'complex number' or calculate_y(calculate_x(counter)) == 'infinite':
x.append(calculate_x(counter))
y.append(calculate_y(calculate_x(counter)))
counter += 1
else:
break
print_table()
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment