2015-11-16 4 views
3

Я новичок в Python. Вот простой код, который я написал для печати x^3return and yield TypeError: объект 'int' не итерируется

def f(n): 
    for x in range(n): 
     yield x**3 
for x in f(5): 
    print x 

Какой печати правильного ответа.

def f(n): 
    return [x**3 for x in range(n)] 
for x in f(5): 
    print x 

который также напечатать правильный ответ

def f(n): 
    for x in range(n): 
     return x**3 
for x in f(5): 
    print x 

, который я получил

TypeError: 'int' object is not iterable 

Так что же случилось с третьей части кода.

+1

'f (5)' возвращает целое число – wim

+1

для вашего третьего 'f' возвращает int ONCE (первая итерация) (напоминание о том, что вызов' return' будет немедленно выходить из метода) –

+0

ваши другие две функции возвращают i , итератора и ii. Список –

ответ

3
def f(n): 
    for x in range(n): 
     yield x**3 
for x in f(5): 
    print x 

Использование return x**3 возвращает INT, который не является итерацию и, следовательно, не может быть использована с for

1

3-код, который вы написали для функции f (п):

на самом деле возвращает целое число.

Который, как подсказка об ошибке, не является итерируемым.

Простой способ проверить это работает питон оболочка

и скопировать код

def f(n): 
    for x in range(n): 
     return x**3 

f(5) 

выход:

0 

и 0 не итерации. поэтому сообщение об ошибке.

Чтобы заставить его работать, просто измените метод, чтобы вернуть массив или любой итерируемый объект.

def f(n): 
    for x in range(n): 
     return [x**3] 

f(5) 

выход:

[0] 
+1

действительный пункт. позвольте мне обновить то же самое. Спасибо :) –

0

Я думаю, что у вас есть несколько проблем здесь, если я понимаю, что вы имеете в виду.

(1) Нет причин использовать цикл, когда вы кубируете что-то в том виде, в котором вы это делаете.

def cube(n): 
    return n**3 

(2) Чтобы распечатать выход, вам просто нужно его распечатать, вам не нужно зацикливаться.

print cube(5) 

(3) Если вы хотите распечатать список кубов.

for x in xrange(5): 
    print cube(x) 

(4) Вы, вероятно, не хотите использовать выход, как это returns a generator object, что это не похоже, что вы хотите здесь.

0
def f(n): 
    for x in range(n): 
     return x**3 

Эта функция возвращает целое число вместо списка

е (5) будет равен 0^3 (Loop выйдет в самой первой итерации), как вы можете видеть это целое число, , следовательно, нельзя повторять.

+0

Это неправильно. f (5) будет равно 0^3 и вернет 0. –

+0

yes Vikash, вы правы, это будет только 0^3, так как во время первого цикла итерации выйдет, как только он получит возврат, я меняю решение основываясь на ваших отзывах, спасибо за указание –

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