-1

首先,让我解释一下我正在尝试做的事情。

我想使用列表中的字符串打印四边形(正方形)。像这样:

John
o  h
h  o
nhoJ

我得到了我想要的打印结果,除了我的 for 循环打印的内容超出了需要。我只需要根据实际字符串的长度跳过一些循环迭代。

这是我需要帮助的地方,这是在“quad_text”函数中:

for i in norm_list[1:-1]:           
            for j in reve_list[1:-1]:
                print(f"{i}{spaces}{j}")

我现在输出的结果:

---
John
o  h
o  o
h  h
h  o
nhoJ
---
Joe
o o
eoJ
---
David
a   i
a   v
a   a
v   i
v   v
v   a
i   i
i   v
i   a
divaD

完整代码

#Global Variables"
normal_list = ["John", "Joe", "David"]
#normal_list = ["Hey there buddy!"]

def initialization():
    rev_list = string_reverser()
    combined_lists = zip(normal_list, rev_list)
    quad_text(list(combined_lists))

def string_reverser():
    reversed_list = []
    for i in normal_list:
        reversed_list.append(i[::-1])
    return(reversed_list)

def quad_text(combined_lists):
    for (norm_list, reve_list) in combined_lists:
        print("---")
        print(norm_list)
        text_len = len(norm_list)
        spaces = (text_len - 2) *(" ")
        for i in norm_list[1:-1]: 
            for j in reve_list[1:-1]: # <--- Problem Area
                print(f"{i}{spaces}{j}")
        print(reve_list)

initialization()
4

1 回答 1

1

不要使用嵌套循环,这会在正向和反向列表之间创建叉积。用于zip()将它们循环在一起。

for i, j in zip(norm_list[1:-1], reve_list[1:-1]):
    print(f"{i}{spaces}{j}")
于 2020-12-15T16:46:08.477 回答