Цикл в Python не учитывает последний элемент в цикле
Необходимо у пользователя запросить ввод Начального, Конечного значений и Шаг значений. Программа должна выполнить вычисления по каждому элементу из списка и вывести результат в виде таблицы в PrettyTable. Однако, при выводе таблицы не выводится последний элемент Значение Х. Например, если в качестве Начального значения ввести 1, конечного 20, а шаг значений 2, то диапазон значений Х отобразится от 1 до 19, а не от 1 до 20.
from numpy import arange
import math
from prettytable import PrettyTable
table = PrettyTable()
# Заданное значение переменной
num = 74
# Запрос данных у пользователя
start = input('Начальное значение ', )
start = float(start)
end = input('Конечное значение ', )
end = float(end)
if float(end) == float(start):
print('Введенные значения не должны быть равны')
exit()
if float(end) < float(start):
print('Конечное значение должно быть больше начального')
exit()
step = input('Шаг значений ', )
step = float(step)
while float(step) <= 0:
if float(step) <= 0:
print('Шаг значений должен быть положительным')
step = input('Шаг значений ', )
while float(step) > end:
if float(step) > end:
print('Шаг значений должен быть в рамках диапазона')
step = input('Шаг значений ', )
while float(step) == end:
if float(step) == end:
print('Некорректное значение')
step = input('Шаг значений ', )
# Определяем пул исходных значений
input_data = arange(float(start), float(end), float(step))
# Выводим номера строк
line_number_list = []
line_number = len(input_data)
for line in range(1, line_number + 1):
line_number_list.append(line)
# Выводим значения Х
X_list = []
for value in input_data:
value = round(value, 2)
X_list.append(value)
# Вычисляем искомые значения
maximum_list = []
first_number = 0
second_number = 0
for value in input_data:
first_number = (1 - num) / (math.sin(value + num))
if first_number < 0 or (math.sin(value + num)) == 0:
maximum_list.append('Ошибка! Логарифм отрицательного числа')
continue
else:
first_number = math.log10(first_number)
if math.sin(value) == 0:
maximum_list.append('Ошибка! Значение синуса равно 0')
continue
else:
second_number = (math.cos(value) / math.sin(value)) / num
second_number = math.fabs(second_number)
maximum = max(first_number, second_number)
maximum_list.append(maximum)
# Вывод таблицы
for colname, col in (('№', line_number_list),
('Значение X', X_list),
('Искомое значение', maximum_list)):
table.add_column(colname, col)
print(table.get_string())
Ответы (1 шт):
в чем смысл таких проверок?
while float(step) <= 0:
if float(step) <= 0:
print('Шаг значений должен быть положительным')
step = input('Шаг значений ', )
условия то одинаковые, а значит:
while float(step) <= 0:
print('Шаг значений должен быть положительным')
step = input('Шаг значений ', )
почему бы начальные, конечные данные и шаг не запрашивать за раз?
input_data = list(map(float, input().split()))
а потом уже проводить нужные проверки и код короче и визуальнее более понятный
а зачем расписывать циклы
line_number_list = [] line_number = len(input_data) for line in range(1, line_number + 1): line_number_list.append(line)
когда python для таких целей позволяет более компактные и понятные записи делать
line_number_list = [*range(1, len(input_data) + 1)]
или вместо
X_list = []
for value in input_data:
value = round(value, 2)
X_list.append(value)
сделать
X_list = [round(value, 2) for value in _input_data]