2015-12-31 6 views
-2

Я пытаюсь оценить степенные ряды, используя python. series => e^x = 1+ x + x^2/2! + x^3/3! ... x^n/n! Я получаю эту ошибку '' int 'объект не имеет атрибута' extend '.'int' объект не имеет атрибута 'extend' - Python

Мой код:

import math 
print('give x') 

x = float(input()) 

n =100 
k = 0 
list = (1) 

while 0<x<1: 
     list.extend([math.pow(x,K+1))]) 
     k = k+1 
     if x==n: 
      break 

print(sum(list)) 

Пожалуйста, помогите!

+6

1) Не теневые имена встроенных типов. 2) '(1)' не является списком, это целое число, которое не имеет метода 'extend'. 3) Литералы списка формируются с квадратными скобками '[1]'. – vaultah

+0

Списки используют квадратные скобки '[]'. Вероятно, вы ищете метод list.append: https://docs.python.org/3.5/tutorial/datastructures.html – tuned

ответ

0

A list литерал создается квадратными скобками, []. Вы можете использовать круглые скобки, (), для группировки или для создания tuple. В случае list = (1) они используются для группировки, поэтому это то же самое, что и list = 1. (A tuple с один элемент создается с mytuple = (1,) или просто mytuple = 1,.)

На данный момент, я упомяну, что назвать одну из ваших переменных list маскирует встроенную функцию list, поэтому после того, как вы делаете, что вы можете» t доступ к этой функции без каких-либо усилий. Лучше назвать свой объект чем-то другим, например lst.

Способ list «s extend() добавляет все элементы из переданного list на объект вы обращаетесь, так что если mylist был [1, 2, 3], mylist.extend([4, 5]) приведет к mylist становится [1, 2, 3, 4, 5]. Однако у вас есть только один объект для добавления, поэтому имеет смысл использовать append(), который добавляет переданный объект к заданному list.

x = float(input('Give x: ')) # the input function can be passed a prompt string 
n = 100 
k = 0 
lst = [1] # changed name, created a list 

while 0<x<1: 
     list.append(x**(k+1)) # you can just use the ** operator if you want 
          # also, k isn't K 
     k = k+1 
     if x==n: # x is never changed, so your loop either never runs 
       # or goes forever 
      break 

print(sum(lst)) 

Обратите внимание на while цикл, который будет либо никогда не вводить или не закончить. Вам придется еще раз взглянуть на логику вашей программы.

1

С кодом возникает множество проблем.

Во-первых, вы пытаетесь создать список с (1) - это просто создает целочисленный объект 1, круглые скобки здесь не действуют. Чтобы создать список, содержащий 1, вам нужно [1]. И вы не должны использовать имена встроенных модулей Python (например, list) в качестве имен переменных - это не только сбивает с толку других людей, которые могут читать ваш код, что делает встроенный недоступным, что может привести к таинственным ошибкам.

K не то же самое, что k.

Ваш while 0<x<1: тест не имеет большого смысла; FWIW, ряд Тейлора для e x сходится для всех значений x.
Ваш тест if x==n: должен быть if k==n:, хотя было бы лучше использовать петлю for с range (или, может быть, xrange в Python 2).

Вам не нужно сохранять термины в списке - просто добавьте их, когда идете.

Вам не нужно math.pow - x**k вычисляет то же самое, как math.pow(x, k), но даже то, что ненужно здесь: вы должны просто следить за предыдущий период и умножить его на x на каждом цикле.

Вы забыли /n!. Еще раз вам не нужно вычислять факториал (или вызывать функцию math.factorial), так как вы можете просто разделить предыдущий член на k.

Надеюсь, это дало вам достаточно ключей, чтобы исправить ваш код. На данном этапе я не буду предоставлять рабочий код, так как я подозреваю, что это проблема домашних заданий. Обратите внимание, что модуль math имеет функцию exp, которую вы можете использовать для проверки точности вычислений в серии.

Смежные вопросы