在python 3中反转while序列的输出?

时间:2015-11-23 06:59:17

标签: python

分配是编写一个程序,打印函数2 ^ n的图表,如下所示:

*
**
****
********
****************
********************************
****************
********
****
**
*

我能够编程后半部分(在示例中从2 ^ 6向下),但我不知道如何反转while函数来创建上半部分。到目前为止,这是我的代码:

import math
n=None
while n is None:
    try:
        n=input("Enter an integer for the power of two you wish to represent: ")
        n=int(n)
    except ValueError:
        print("That is not an integer. Please try again.")
    else:
        while n>=0:
            amt=(math.pow(2,n))
            print('*'*int(amt))
            n=int(n)-1

当我输入6时,输出

********************************
****************
********
****
**
*

那么我如何才能让它在上半场完成呢?

4 个答案:

答案 0 :(得分:1)

import math

def draw(n):
    i = 0;
    while i <= n:
        d = i
        if i > n /2:
            d = n - i;
        print("*" * int(math.pow(2,d)))
        i+=1
draw(12)

对于n = 12;

*
**
****
********
****************
********************************
****************************************************************
********************************
****************
********
****
**
*

答案 1 :(得分:0)

您可以计算结果值并将其存储在列表中,然后反转列表的两半以获得预期结果

import math
n=None
while n is None:
    try:
        n=input("Enter an integer for the power of two you wish to     represent: ")
        n=int(n)
    except ValueError:
        print("That is not an integer. Please try again.")
    else:
        lst = [math.pow(2,abs(r)) for r in range(0-n, n)]
        lst = lst[len(lst)/2:] + lst[:len(lst)/2+1]
        for item in lst:
           print('*'*int(item))

答案 2 :(得分:0)

我不会在使用功能时使用。从我的角度来看,for循环在这里更好。 所以你可以,例如在两个for循环中使用你的代码,一个是升序,第二个是降序。

for power in range(n):
    amt=(math.pow(2,power))
    print('*'*int(amt))
for power in range(n-1)[::-1]:
    amt=(math.pow(2,power))
    print('*'*int(amt))

答案 3 :(得分:0)

您可以通过以下方式在一个循环中解决此问题:

        i=n*-1
        while i<=n:
          x =n-abs(i)
          amt=(math.pow(2,x))
          print('*'*int(amt))
          i=i+1