2
   X
  XXX
 XXXXX
XXXXXXX

这是我的计算机科学课程中介绍性作业的一部分。老师教我们关于 i 和 j 的范围。我完全不知道如何实现金字塔,而且我已经尝试了几个小时不同的事情。除了我上过的两节 50 分钟的课程外,我从未接触过任何形式的编程。我将不胜感激一些帮助/建议。

这段代码是我们当前指令和假设知识的范围:

for i in range(10):

    line = ""
    for j in range(10):
        if j%2 == 0:
            c = ' '
        else:
            c = '*'
        line += c
    print line
4

11 回答 11

3

您可以使用字符串格式:

根据底座尺寸:

def create_pyramid(base):
    for i in xrange(1, base+1, 2):
        print '{:^{}}'.format('X'*i, base)
...         
>>> create_pyramid(7)
   X   
  XXX  
 XXXXX 
XXXXXXX

根据级别数:

def create_pyramid(level):
    for i in xrange(1, 2*level, 2):
        print '{:^{}}'.format('X'*i, (2*level)-1)
...         
>>> create_pyramid(5)
    X    
   XXX   
  XXXXX  
 XXXXXXX 
XXXXXXXXX
于 2013-08-30T03:05:15.667 回答
2

这是另一个解决方案:

def create_pyramid(base):

    star = 1 # first row has 1 star
    for i in range((base - 1) / 2, -1, -1): # (base - 1) / 2 will determine the first space given the base
        print i * " ", star * "X" # spaces
        # the , star * "X" on the above line means printing on the same line with no space
        star += 2 # incrementing by 2 each time
...
>>>create_pyramid(7)
   X   
  XXX  
 XXXXX 
XXXXXXX
于 2013-08-30T03:30:53.590 回答
2

只是想抛出另一个想法。

如果您考虑以函数方式对问题进行建模,您可以轻松地得到这个递归解决方案:

def pyramid(N, i = 0): 
    if N > 0: 
        print (N - 1) * ' ' + '*' * (i * 2 + 1) 
        pyramid(N - 1, i + 1)

>>>pyramid(5)

    *
   ***
  *****
 *******
*********
于 2013-08-30T04:20:36.393 回答
2

由于您的老师需要iand j,我猜他想要一些类似老式 C 的代码,试试这个:

N,line,c,p = 10,'','',1
spaces = ' '*N

for i in range(N):
  spaces = spaces[0:N-i]
  c = ''
  for j in range(p):
    c += "X"
  line += spaces+c+'\n'
  p += 2

print line
于 2013-08-30T03:06:20.670 回答
1

您可以创建一个 Pyramid 对象:

class Pyramid(object):
    def __init__(self, size):
        self.size=2*size
    def __repr__(self):
        return '\n'.join('{:^{}}'.format('*'*i, (self.size)-1) for i in range(1,self.size,2))

然后打印它的一个实例:

>>> print Pyramid(7)  
      *      
     ***     
    *****    
   *******   
  *********  
 *********** 
*************
于 2013-08-30T03:59:04.010 回答
1

用两个变量而不是一个变量来考虑这个问题。变量num_bricks是金字塔当前级别中的“砖块”数量,变量是当前级别中num_spaces的空间数。

金字塔一侧的空间应该与另一侧的空间一样多。因此,对于金字塔的每一行,您需要做的就是打印一半的空格,打印所有的 X,然后打印另一半的空格(确保使用print 'X',而不是print 'X'- 最后的逗号表示“不要't start a new line'.print本身对开始新行有好处)

对于每一行:

for i in range(num_spaces / 2):
    print ' ',
for i in range(num_bricks):
    print 'X',
for i in range(num_spaces / 2):
    print ' ',

print
#a blank print statement will start a new line without printing anything on it

所以剩下要做的就是找到一个规则来管理如何num_spaces以及num_bricks应该如何从一个级别增加到/减少一个级别。

于 2013-08-30T03:17:47.577 回答
1

尝试这个

 for i in range(1,10):
   print (" "*(10-i)+"X"*i+"X"*(i-1))
于 2015-05-13T04:43:40.973 回答
0

这是最简单的方法之一。

a = 10
for x in xrange(0,a):
    print (a-x)*" "+x*"x"

它计数到 10,对于每一行,它X's从 10 中减去该行中的数字,并在 前面打印那么多空格X's,这使它看起来像金字塔。

于 2013-08-30T04:24:23.567 回答
0

有趣的问题。作为n金字塔的高度:

print('\n'.join(' ' * (n - x - 1) + 'x' * (2 * x + 1) for x in range(n)))
于 2013-08-30T05:35:24.470 回答
0

尝试以下操作:

num = int(input("Enter a range here:  "))
for i in range(num):
    if i<= num
       print(" "*(num-1-i)+"X "*(i+1))
于 2019-02-23T08:28:51.933 回答
0
def pyramid():
n=int(raw_input("enter a num:"))
for i in range(n):
    print " "*(n-i-1)+"*"*(2*i+1)
pyramid()

这是我能找到的最简单的代码;)

于 2017-02-13T15:04:47.430 回答