kennpi
@kennpi (ぴ けん)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Python

全角罫線文字 及び 全角空白で
┌─┬─┬─┬─┐

| | | | |

├─┼─┼─┼─┤

| | | | |

├─┼─┼─┼─┤

| | | | |

├─┼─┼─┼─┤

| | | | |

└─┴─┴─┴─┘

このように出力したいんですが教えてください

n = 5
lineue = "┌" + "─┬" *(n-1) + "─┐"
line1 = "| " *n + "|"
line2 = "├─" + "┼─" *(n-1) + "┤"
line3 = "└" + "─┴" *(n-1) + "─┘"

for r in range(0,n):

一応ここまでかけたんですが、わからないです、、、

0

4Answer

少し補足すると、 ["─┬"] * (n - 2) で回数分の要素が入った配列が作成されます。 例として ["─┬"] * 5 であれば ["─┬","─┬","─┬","─┬","─┬"]となります。そこから配列の要素同士を連結して文字列にするにはjoin関数を使います。"".join(_list)とすると連結されます。また、joinの前に何か文字を指定すると要素の間に文字が挿入されます。":".join(_list) とすると ─┬:─┬:─┬:─┬:─┬となります。

全体の構成としてですが、ヘッダーとフッター、中間の空白や仕切りの3~4の部品に分解してそれぞれでコード上で文字列処理をすればいいかを考えればできます。

1Like

Comments

  1. @kennpi

    Questioner

    ありがとうございます!!!!
    物凄く理解できたんですが、
    1 if i == 0:
    2 print(space)
    3 print(middle)
    4 print(space)

    この2行目の print(space)は一回だけ出力されてるんですか?
    この部分だけわからないです、、、、

このような形でイメージあっていますでしょうか?

n = 4
lineue = "" + "─┬" *(n-1) + "─┐"
line1 = "| " *n + ""
line2 = "├─" + "┼─" *(n-1) + ""
line3 = "" + "─┴" *(n-1) + "─┘"

print(lineue)
for r in range(3):
    print(line1)
    print(line2)
    
print(line1)    
print(line3)
0Like

空白は半角を使っていますが、下記のコードではいかがでしょうか。

def main():

    n = int(input())

    header = "" + "".join(["─┬"] * (n - 2)) + "─┐"
    footer = "" + "".join(["─┴"] * (n - 2)) + "─┘"

    space = " ".join(["|"]* n)
    middle = "" + "".join(["─┼"] * (n - 2)) + "─┤"

    print(header)
    for i in range(n - 2):
        if i == 0:
            print(space)
        print(middle)
        print(space)
    print(footer)

if __name__ == '__main__':
    main()

結果

10
┌─┬─┬─┬─┬─┬─┬─┬─┬─┐
| | | | | | | | | |
├─┼─┼─┼─┼─┼─┼─┼─┼─┤
| | | | | | | | | |
├─┼─┼─┼─┼─┼─┼─┼─┼─┤
| | | | | | | | | |
├─┼─┼─┼─┼─┼─┼─┼─┼─┤
| | | | | | | | | |
├─┼─┼─┼─┼─┼─┼─┼─┼─┤
| | | | | | | | | |
├─┼─┼─┼─┼─┼─┼─┼─┼─┤
| | | | | | | | | |
├─┼─┼─┼─┼─┼─┼─┼─┼─┤
| | | | | | | | | |
├─┼─┼─┼─┼─┼─┼─┼─┼─┤
| | | | | | | | | |
├─┼─┼─┼─┼─┼─┼─┼─┼─┤
| | | | | | | | | |
└─┴─┴─┴─┴─┴─┴─┴─┴─┘
0Like

@kennpi

もし、 if i == 0: print(space) がないと

┌─┬─┬─┬─┐
├─┼─┼─┼─┤
| | | | |
├─┼─┼─┼─┤
| | | | |
├─┼─┼─┼─┤
| | | | |
└─┴─┴─┴─┘

となって最初の行の空白がないまま出力されます。

考え方としては、
真ん中の空白と仕切りprint(middle) print(space)n-2分生成して、残り足りない print(space) を先頭で個別に作っているイメージです。

どでしょうか:expressionless:

0Like

Your answer might help someone💌