我想知道是否有人可以帮助我解开这个谜团。当我运行我的程序时,它显示错误。
类型错误:“NoneType”对象不可迭代
我已经测试过我尝试迭代的变量是一个列表,但它仍然说它无效并显示相同的错误。
我的代码意味着打印一个对称的星号三角形:
def iterat(num):
for x in num:
yield x
number=int(input("Enter Positive Number: "))
stars = list(range(number))
print(type(stars))
spaces = stars.reverse()
yeildStar = iterat(stars)
yeildSpace = iterat(spaces)
for star,space in zip(yeildStar,yeildSpace):
print(" "*(space)+"*"*((star*2)-1))
Run Code Online (Sandbox Code Playgroud)
非常感谢。抱歉变量名不好
编辑; 感谢您的帮助。
spaces = reversed(stars)
Run Code Online (Sandbox Code Playgroud)
工作完美
Dan*_*man 10
问题就在这里:
spaces = stars.reverse()
Run Code Online (Sandbox Code Playgroud)
reverse,就像 一样append,就地运行并返回零。要返回新列表,您需要执行以下操作:
spaces = list(reversed(stars))
Run Code Online (Sandbox Code Playgroud)
但我必须说,我不明白你的iterat发电机的意义。如果你一开始就留下空格和星号作为生成器,那么你根本不需要它:
stars = range(number)
spaces = reversed(stars)
for star,space in zip(stars, spaces):
print(" "*(space-1)+"*"*((star*2)-1))
Run Code Online (Sandbox Code Playgroud)
你的问题就在一线
spaces = stars.reverse()
Run Code Online (Sandbox Code Playgroud)
list 函数的返回值reverse()不是反转后的列表,而是None,因为反转是就地完成的。
使用这一行代替:
spaces = stars[::-1]
Run Code Online (Sandbox Code Playgroud)
这将返回一个包含 的反转值的列表stars。