簡體   English   中英

如何打印帶有數字的矩形?

[英]how do i print a rectangle with numbers?

我需要幫助制作一個數字矩形。 寬度和長度是用戶輸入的任何內容,但是idk如何生成輸出。 它需要看起來像這樣:width = 6,length = 4

654321
654321
654321
654321

這就是我所擁有的:

def drawnumberrectangle():
    height = getinteger("Enter a height: ")
    width = getinteger("Enter a width: ")
    i = 0
    j = 0
    while i < height:
        while j < width:
            print()
            j = j + 1
        print("")
        j = 0
        i = i + 1

我在打印功能中需要一些東西

請注意,對於每一行,數字從width到1。

''.join([str(x) for x in range(width, 0, -1)])

說明

  • range(width, 0, -1)生成一個從width到1的數字迭代。

  • [str(x) for x in range(width, 0, -1)]將前一個范圍轉換為字符串列表。

  • ''.join([str(x) for x in range(width, 0, -1)])該字符串以單個字符串連接。

另請注意,此行重復length時間。

for i in range(length):
    print(''.join([str(i) for i in range(width, 0, -1)]))

這是您的代碼。

嘗試使用您的櫃台

def drawnumberrectangle():
    height = getinteger("Enter a height: ")
    width = getinteger("Enter a width: ")
    i = 0
    j = 0
    while i < height:
        while j < width:
            print(width-j)
            j = j + 1
        print("")
        j = 0
        i = i + 1
height = input("Enter a height: ")
width = input("Enter a width: ")
i = int(height)
while i > 0:
    j=int(width)
    while j > 0:
        print(j, end="")
        j = j - 1
    print("")
    i = i - 1

print(width - j, end="")應該做到這一點。 這樣做是在每次迭代中打印出width - j ,因此它將從寬度開始(因為j = 0在開始處),然后下降到一個(因為在最后一次迭代中它將為width-1)。

end=""告訴print(...)在末尾添加一個空字符串,而不是一個新行字符,以便它在同一行中打印下一個字符。 打印完數字后,您的print("")會向下打印新行。

def drawnumberrectangle():
    height = getinteger("Enter a height: ")
    width = getinteger("Enter a width: ")
    i = 0
    j = 0
    while i < height:
        while j < width:
            print(width - j, end="")
            j = j + 1
        print("")
        j = 0
        i = i + 1

如果您單獨打印每個數字,則每個數字后都會有一個換行符。 相反,您可以構造一個行字符串,然后打印該字符串:

def drawnumberrectangle():
    height = getinteger("Enter a height: ")
    width = getinteger("Enter a width: ")
    for i in range(height):
        line = ''
        for j in range(width):
            line += '{}'.format(width - j)
        print(line)

我也將其更改為for in循環和range ,這更像Pythonic。

歡迎使用python。 在這里,我們有一些時髦的結構可以節省很多輸入。 如您所見,與某些其他語言相比,這可以用更少的行來完成。

然后range()函數將為您提供整數列表。 在設置高度的行中,我傳遞了我們需要多少行。 在width中,可以看到我指定了range(1, width +1) 這是因為range()默認從0開始,但是我們實際上需要打印"1"

下一個技巧是列表理解[str(w) for w in range(1, width+1)] 這將創建一個字符列表。 但是由於我們要打印它們,所以我將它們轉換為字符串。 這是因為''.join()會將它們全部分組為一個漂亮的字符串。

最后一個竅門是您看到[::-1]那一部分,它占據了列表的一部分。 有三個參數,開始,停止和步驟,以冒號分隔。 空白表示從頭開始,在結尾處結束。 -1步表示將所有操作都向后進行。

def rectangle(width, height):

    for h in range(height):
        print(''.join([str(w) for w in range(1, width+1)][::-1]))

rectangle(6, 4)
# 654321
# 654321
# 654321
# 654321

這看起來像是一個作業問題,所以我不會付出太多。 我建議您從計數循環(for循環)開始,因為這將簡化您的代碼,並使用join()方法

height = getinteger("Enter a height: ")
width = getinteger("Enter a width: ")

for i in range(height):
    print(''.join([str(j) for j in range(width,1,-1)]))

為了解釋這些構造,join()方法將使用字符串調用的參數作為分隔符進行連接,例如,如果我們想用逗號分隔數字,則可以使用','.join(numberList) 如果列表理解,您將看到的第二件事-這將給定條件創建一個列表。 在這種情況下,我們想要一個從a到b的所有數字的列表,步長為-1(向下計數),因此我們使用range(6,1,-1)並將這些數字作為字符串,所以我們使用str(j)進行類型轉換

暫無
暫無

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

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