Напишите программу на Python для печати следующей последовательности чисел (N, которые должен ввести пользователь): X X^3/3! X^5/5!… До N-Го срока

#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, но будьте осторожны, потому что завод будет изменен.