簡體   English   中英

創建一個由符號組成的 ascii 三角形

[英]Creating an ascii triangle composed of signs

這個想法是創建一個三角形,用 * 包圍,而三角形的 $ 符號、空格和高度都是用戶輸入的。 例如,高度 = 9、$=5 和空格 = 2,這應該產生以下 output:

         *
        *$*
       *$$$*
      *$ $$*
     *$$$ $$*
    *$$$ $$$$*
   *$ $$$$$ $*
  *$$$$ $$$$$ *
*****************

我嘗試了幾種不同的方法,例如將 $ 和空格串在一起並按索引打印,或者計算每個打印的次數而不重疊。

但是,我找不到任何有用的東西:(

感謝任何幫助:) 只是 CS 的第一學期

我的代碼:

    height = int(input('Enter height: '))
    numSigns = int(input('Enter number of $: '))
    numSpaces = int(input('Enter number of spaces: '))
    signCounter = 0
    spaceCounter = 0
    sign = '$'
    row = (sign*numSigns + ' '* numSpaces)*height
    count1 = 0
    count2 = 0
    x =1
    for i in range(height):
    
        for j in range(height - i - 1):
    
            print(" ", end = '')
    
        print('*',end = '')
        if i == 0:
            print()
    
        p = x
        x = x + i - 1
        for a in range(p,x):
            print(row[a], end = '')

        if i != 0:
            print('*')

實際 output:

    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

首先是每顆星左邊有多少個空格等於TOTAL_HEIGHT_OF_PATTERN - CURRENT_HEIGHT_STATUS 對於給定的示例,讓我們以2nd-line例:

        *
       *$*
      *$$$*
     *  $$$*
    *$$$$$  *
   *$$$$$  $$*
  *$$$$$  $  $*
 *$$$    $$$$$$*

第二。

如何在兩者之間創建 `$` 和 `space` 模式:
 * *$* *$$$* * $$$* *$$$$$ * *$$$$$ $$* *$$$$$ $ $* *$$$ $$$$$$*

在給定高度有多少空間,對於上述系統,它被發現。
空格:0 表示高度 @ 1、2、3
空格:1 表示高度 @ 4、5、6
空格:2 表示高度 @ 7、8
我們可以看到一個模式,使得在每個高度(CURRENT_HEIGHT_STATUS-1)//3都找不到空間。
對於NO_OF_DOLLORS我們可以看到它等於2*(CURRENT_HEIGHT_STATUS-NO_OF_SPACES)-3最后通過使用shuffling operation我們可以洗牌dollor and spaces

看看這段代碼:

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

OUTPUT:

 Height: 9 Dollor: 2 Spaces: 5 * *$* *$$$* *$$ $* *$$ $$$* *$$$$$$ $* * $$$$$$$* *$$ $$$$$$$ * *****************

讓我們將它們划分為過程代碼,而不是完全使用循環。 邏輯類似於我之前的解決方案 為了制作特定enclose-string ,我們可以使用make_str function其邏輯圍繞$的剩余數量

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
        *
       *$*
      *$$$*
     *   $$*
    *$$$   $*
   *$$$$   $$*
  *$$$   $$$$$*
 *   $$$$$   $$*
*****************

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM