Python 创建由符号组成的ascii三角形

Python 创建由符号组成的ascii三角形,python,Python,其想法是创建一个三角形,用*包围,而三角形的$符号、空间和高度都是用户输入。 例如,当高度=9,$=5,空格=2时,应产生以下输出: * *$* *$$$* *$ $$* *$$$ $$* *$$$ $$$$* *$ $$$$$ $* *$$$$ $$$$$ * ***************** 我尝试了两种不同的方法,比如将$和空格串在一起,然后按它们的索引打印,或者计算每个字符的打印次数而不重叠 然而

其想法是创建一个三角形,用*包围,而三角形的$符号、空间和高度都是用户输入。 例如,当高度=9,$=5,空格=2时,应产生以下输出:

         *
        *$*
       *$$$*
      *$ $$*
     *$$$ $$*
    *$$$ $$$$*
   *$ $$$$$ $*
  *$$$$ $$$$$ *
*****************
我尝试了两种不同的方法,比如将$和空格串在一起,然后按它们的索引打印,或者计算每个字符的打印次数而不重叠

然而,我无法找到任何有效的方法:(

感谢您的帮助:)只是CS的第一学期

我的代码:

height=int(输入('输入高度:'))
numSigns=int(输入('enternumber of$:'))
numSpaces=int(输入('输入空格数:'))
信号计数器=0
空间计数器=0
符号=“$”
行=(符号*numSigns+''*numSpaces)*高度
count1=0
count2=0
x=1
对于范围内的i(高度):
对于范围内的j(高度-i-1):
打印(“”,结束=“”)
打印('*',结束='')
如果i==0:
打印()
p=x
x=x+i-1
对于范围(p,x)内的a:
打印(第[a]行,结束=“”)
如果我0:
打印(“*”)
实际产量:

    Enter height: 9
    Enter number of $: 5
    Enter number of spaces: 2
            *
           **
          *$*
         *$$*
        *$$ *
       * $$$*
      *$$  $*
     *$$$$  *
    *$$$$$  *

让我们看看它的逻辑是什么。你最终会找到逻辑

第一。 如何创建左侧星形图案,如下所示:
    *
   *
  *
 *
第一件事是每颗星左边有多少个空格等于图案的总高度-当前高度状态。例如,让我们以第二行为例:

TOTAL_HEIGHT_OF_PATTERN = 4
CURRENT_HEIGHT_STATUS = 2
NUMBER_OF_SPACE_ON_LEFT = TOTAL_HEIGHT_OF_PATTERN - CURRENT_HEIGHT_STATUS = 2
第二。 如何在这两者之间创建`$`和`空格`模式:
        *
       *$*
      *$$$*
     *  $$$*
    *$$$$$  *
   *$$$$$  $$*
  *$$$$$  $  $*
 *$$$    $$$$$$*
对于上述系统,在给定高度处可找到多少空间。
空格:0表示高度@1、2、3
空间:4,5,6的高度为1
空间:7,8的高度为2 我们可以看到这样一种模式:在每个高度
(当前高度\u状态-1)//3
将找不到任何空间。
对于
NO\u OF doller
我们可以看到它等于
2*(当前高度状态-NO\u OF doller空格)-3
最后,通过使用
shuffling操作
我们可以对
doller和空格进行shuffle操作

查看此代码:

from random import shuffle
height = int(input('Height : '))
doller = int(input('Dollor : '))
spaces = int(input('Spaces : '))

for i in range(1,height+1):
    no_spaces = (i-1)//3
    str_ = ['$' for i in range(2*(i-no_spaces)-3)]+['  ']*no_spaces
    shuffle(str_)
    if i == 1:
        print(' '*(height-i) + '*')
    elif i != height and i !=  1:
        print(' '*(height-i) + '*' + ''.join(str_) + '*')
    else:
        print('*'*(2*height-1))
Height : 9
Dollor : 2
Spaces : 5
        *
       *$*
      *$$$*
     *$$  $*
    *$$  $$$*
   *$$$$$$  $*
  *    $$$$$$$*
 *$$  $$$$$$$  *
*****************
输出:

from random import shuffle
height = int(input('Height : '))
doller = int(input('Dollor : '))
spaces = int(input('Spaces : '))

for i in range(1,height+1):
    no_spaces = (i-1)//3
    str_ = ['$' for i in range(2*(i-no_spaces)-3)]+['  ']*no_spaces
    shuffle(str_)
    if i == 1:
        print(' '*(height-i) + '*')
    elif i != height and i !=  1:
        print(' '*(height-i) + '*' + ''.join(str_) + '*')
    else:
        print('*'*(2*height-1))
Height : 9
Dollor : 2
Spaces : 5
        *
       *$*
      *$$$*
     *$$  $*
    *$$  $$$*
   *$$$$$$  $*
  *    $$$$$$$*
 *$$  $$$$$$$  *
*****************

与其完全使用循环,不如将它们划分为过程代码。逻辑与我的相似。为了制作特定的
括起字符串
,我们可以使用
make_str函数
谁的逻辑围绕剩余的
$

height = int(input('Height : '))
doller = int(input('Dollor : '))
spaces = int(input('Spaces : '))

def make_str(rem, len_str):
    x = 0
    s = ''
    for _ in range(len_str):
        if rem >0:
            s += '$'
            rem -= 1
        else:
            s += ' '
            x += 1
            if x == spaces:
                x = 0
                rem = 5
    return (rem, s)

rem_dollor = doller

for i in range(1,height+1):
    num = 2*(i)-3
    rem_dollor, str_  =  make_str(rem_dollor, num)
    if i == 1:
        print(' '*(height-i) + '*')
    elif i != height and i !=  1:
        print(' '*(height-i) + '*' + str_ + '*')
    else:
        print('*'*(2*height-1))
**输出:**

Height : 9
Dollor : 4
Spaces : 3
        *
       *$*
      *$$$*
     *   $$*
    *$$$   $*
   *$$$$   $$*
  *$$$   $$$$$*
 *   $$$$$   $$*
*****************

欢迎来到堆栈溢出!请坐飞机。你的问题是什么?请澄清。如果你正在寻找家庭作业方面的帮助,请阅读并更全面地阅读。老实说,我希望有一个大致的想法,而不是一个完整的代码。下次我会尽我所能遵循指导原则:)非常感谢你的帮助,这实际上与我所拥有的非常接近,但下次我会将我的代码与之一起发布!编辑:这是我有史以来的第一篇帖子,顺便说一句,很抱歉被忽略了。在我仔细检查了你写的东西,并自己处理了几分钟后,它遇到了与我的代码相同的问题,而不是混乱字符串,我需要它们按连续顺序排列。例如:如果dollers=4,spaces=2,金字塔将始终有4后跟2个空格,即使它们被新行分隔,我将编辑帖子并共享我的代码:D@Flyleaf我明白了,等几分钟我会更新,因为我现在很忙,不管怎样谢谢你,慢慢来:)@Flyleaf checkout我刚刚在那里添加了新答案