#python #python-3.x #for-loop #sequence #python-3.8
Вопрос:
Проблема, с которой я сталкиваюсь с этим вопросом, заключается в том, что написанный мной код показывает логическую ошибку. Вот код, который я написал:
x = int(input("Please enter the base number: "))
n = int(input("Please enter the number of terms: "))
s = 0
factorial = 1
for i in range(1,n 1,2):
factorial = factorial*i
s = (x**i) / factorial
#using f string to format the numbers to a fixed number of decimal places
print(f"{s:.6f}", end=' ')
Я использовал цикл for, чтобы показывать только нечетные значения индекса, потому что это требование в вопросе. Мои результаты будут следующими:
Please enter the base number: 2
Please enter the number of terms: 4
2.000000 2.666667
Нам не нужно на самом деле находить сумму, только отображать все отдельные добавления, разделенные знаком плюс. Какие изменения я должен внести в код, чтобы получить требуемые результаты?
Мой требуемый результат будет выглядеть примерно так:
Please enter the base number: 2
Please enter the number of terms: 4
2.000000 1.333333 0.266666 0.025396
Комментарии:
1. Каков ожидаемый результат для этого ввода?
2. Я предполагаю, что это так : количество требуемых терминов не печатается, но только половина из них
3. факториальный расчет также неверен, так как в вашем цикле пропущен термин
Ответ №1:
Просто измените на
for i in range(1,2*(n) 1,2):
От
for i in range(1,n 1,2):
Теперь результат таков:
Please enter the base number: 2
Please enter the number of terms: 4
2.000000 2.666667 2.133333 1.219048
Кроме того, метод расчета factorial
неверен, так как он пропускает половину терминов, когда вы переходите i
от 1 к 3 к 5, так что 2, 4, 6..
их пропускают.
Итак, вы можете сделать:
if i > 1:
factorial = factorial*i*(i-1)
elif i == 1:
factorial*i
Таким образом, окончательный код будет:
x = int(input("Please enter the base number: "))
n = int(input("Please enter the number of terms: "))
s = 0
factorial = 1
for i in range(1,2*n 1,2):
if i > 1:
factorial = factorial*i*(i-1)
elif i == 1:
factorial*i
s = (x**i) / factorial
#using f string to format the numbers to a fixed number of decimal places
print(f"{s:.6f}", end=' ')
Ответ №2:
Факториал находится в цикле, но цикл делает i=1,3,5, а не i=1,2,3,4,5, это может быть проблемой. Если «количество терминов» : «2.000000 2.666667» равно двум, поэтому в цикле ваш диапазон должен быть до n*2, а не n, но будьте осторожны, потому что завод будет изменен.