上下循环打印" - "和" *"

时间:2014-09-04 04:38:29

标签: python

模式的第一行有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()

6 个答案:

答案 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)

答案 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