模式的第一行有5个破折号,后跟1个星,第二行有4个破折号,后跟3个星,第3行有3个破折号,后跟5个星等。模式的最后一行有0个破折号和11星 我正在尝试打印出以下结果。我不知道应该对我的代码进行任何更改吗?
-----*
----***
---*****
--*******
-*********
***********
def printing(dash, star):
for i in dash:
print("-")
for i in star:
print("*")
print(dash, star)
def main():
dash = 5
star = 1
while dash >=0:
printing(dash, star)
dash = dash-1
star = star+2
main()
答案 0 :(得分:5)
for i in dash:
将尝试迭代可迭代i
中的每个元素dash
。但你给它一个整数,这是不可迭代的。
为了让它按原样运作,你应该for i in range(dash)
。 range(n)
返回以0开头的n个整数的列表。这样,您可以迭代dash
次。
鉴于python允许你通过有效重复所述字符串的整数来乘以字符串,并通过简单地用+
添加它们来链接它们,你可以有一个更简单的方法:
def printing(dash, star):
print '-'*dash + '*'*star
答案 1 :(得分:2)
您可能对新算法感兴趣。试试这个。
s="-----*"
print(s)
while "-" in s:
s=s.replace("-*", "***")
print(s)
您会注意到"-" in s
行。那只是检查字符串中是否有连字符。你可以这样做,因为字符串就像迭代器一样。您可以根据需要添加任意数量的连字符。
答案 2 :(得分:0)
您似乎想要for i in xrange(dash)
。 https://docs.python.org/2.7/tutorial/controlflow.html#for-statements
答案 3 :(得分:0)
你无法迭代int,你需要使用range()
试试这个:
def printing(dash, star):
for i in range(dash):
print("-", end="")
for i in range(star):
print("*", end="")
print()
def main():
dash = 5
star = 1
while dash >=0:
printing(dash, star)
dash = dash-1
star = star+2
main()
输出:
-----*
----***
---*****
--*******
-*********
***********
答案 4 :(得分:0)
正如@wRAR所提到的,你应该使用for i in xrange(dash)
。另一件事是,您应该正确使用print来控制换行符\n
在Python 3.X中:
def printing(dash, star):
for i in dash:
print('-', end='')
for i in star:
print('*', end='')
print ('')
在Python 2.x中:
def printing(dash, star):
for i in dash:
print '-',
for i in star:
print '*',
print ''
答案 5 :(得分:0)
使用Python的字符串重复和连接运算符构建行可能更容易,而不是使用循环分别打印每个字符。如果将字符串乘以整数,则会重复该次数。添加两个字符串将它们连接起来。
这是一个产生所需输出的简单函数:
def main():
for dashes in range(5, -1, -1): # dashes counts down from 5 to zero
stars = 1 + 2*(5 - dashes) # the number of stars is derived from dashes
print("-"*dashes + "*"*stars) # just one call to print per line