Python“调用函数”不会打印星形图案

问题描述 投票:0回答:1

我不知道从下面的程序中调用多个函数来打印星形图案中的完整单词的函数是什么。这是我从我的计划中练习的另一件事。

有效的原始代码是...

def pattern(name):
    list2 = []
    for i in range(len(name)):
        if name [i] =="B":
            print_B = [[" " for i in range (5)] for j in range (5)]
            for row in range(5):
                for col in range(5):
                    if (col==0) or (col==4 and (row!=0 and row!=2 and row!=4)) or ((row==0 or row==2 or row==4) and (col>0 and col<4)):
                        print_B[row] [col] = "*"
            list2.append(print_B)

        elif name [i] =="A":
            print_A = [[" " for i in range (5)] for j in range (5)]
            for row in range(5):
                for col in range(5):
                    if (row==0 and 1<col<3)or((row==1 and 0<col<2)or(row==1 and 2<col<4))or(row==2 and 0<=col)or((row==3 or row==4) and (0<=col<1 or 3<col>=4)):
                        print_A[row] [col] = "*"
            list2.append(print_A)

        elif name [i] =="L":
            print_L = [[" " for i in range (5)] for j in range (5)]
            for row in range(5):
                for col in range(5):
                    if ((col==0) and row<=4) or ((row==4) and (0<col<=4)):
                        print_L[row] [col] = "*"
            list2.append(print_L)
        else:
            print("INVALID")

    return list2


def information_gathering_phase():
    while True:  
        word = input("Enter a word from the letters 'B', 'A' and/or 'L' (or type 'stop' to stop the program): ") 
        if word == 'stop' or word == 'STOP': 
            return None 
        elif not all(letter in 'BAL' for letter in word): 
            print("Invalid word! Please try again...") 
        else:
            return word

def main():
    while True:
        word = information_gathering_phase()
        if word is None: 
            print("Thanks for trying my program...Bye for now!")
            break 
        else:
            list3 = pattern(word)
            
            for i in range (5):
                for j in range(len(list3)):
                    for k in range(5):
                        print(list3[j][i][k],end=" ")
                    print(end=" ")
                print ()
            
if __name__ == '__main__': 
    main()

我知道我的程序会将单词“ALL”打印为星形图案,即

但我想弄清楚如何调用函数,包括从上面的代码中选取多个字母并从一个调用函数打印整个工作。 下面...

if word == 'end' or word == 'END': 
            return None

我想添加以下内容...

elif word =="ALL":
    print("ALLLLL")

但这只会打印 ALLLLL。

如何使上面的 print() 语句调用字母“A”函数一次,调用字母“L”函数两次,然后使用调用函数命令打印“ALL”的星形图案?

我知道函数名称会在这里的某个地方...

def pattern(name):
    list2 = []
    for i in range(len(name)):
        elif name [i] =="A":
            print_A = [[" " for i in range (5)] for j in range (5)]
            for row in range(5):
                for col in range(5):
                    if (row==0 and 1<col<3)or((row==1 and 0<col<2)or(row==1 and 2<col<4))or(row==2 and 0<=col)or((row==3 or row==4) and (0<=col<1 or 3<col>=4)):
                        print_A[row] [col] = "*"
            list2.append(print_A)

...但是由于 'def' 读作 'def pattern(name):' 我不知道使用什么作为函数名称。


我最近尝试改变...

elif word =="ALL":
    print("ALLLLL")

elif word =="ALL":
    pattern("A"), pattern("L"), pattern("L")

按照建议,但不会打印任何内容,只是再次要求输入。

我也尝试过

elif word =="ALL":
    pattern("A" + "L" + "L")

再次它不会打印任何内容,只是再次要求输入。

我现在也根据建议尝试了这个......

elif word =="ALL":
    pattern("A")
    pattern("L")
    pattern("L")

它也不会打印任何内容,只是再次要求输入。

感谢所有不断努力的人... 最大

python function calling-convention
1个回答
0
投票

实际打印

main()

中的星形图案列表的代码
for i in range (5):
    for j in range(len(list3)):
        for k in range(5):
            print(list3[j][i][k],end=" ")
        print(end=" ")
    print ()

需要变成一个单独的函数(即

print_pattern()
),以便可以多次调用。

然后,在

information_gathering_phase()
之后

if word == 'stop' or word == 'STOP':
    return None

添加条件,生成模式,打印它,然后开始收集循环的下一次迭代:

elif word =="ALL":
    pat = pattern("ALLLLL")
    print_pattern(pat)
    continue

完整代码:

def pattern(name):
    list2 = []
    for i in range(len(name)):
        if name [i] =="B":
            print_B = [[" " for i in range (5)] for j in range (5)]
            for row in range(5):
                for col in range(5):
                    if (col==0) or (col==4 and (row!=0 and row!=2 and row!=4)) or ((row==0 or row==2 or row==4) and (col>0 and col<4)):
                        print_B[row] [col] = "*"
            list2.append(print_B)

        elif name [i] =="A":
            print_A = [[" " for i in range (5)] for j in range (5)]
            for row in range(5):
                for col in range(5):
                    if (row==0 and 1<col<3)or((row==1 and 0<col<2)or(row==1 and 2<col<4))or(row==2 and 0<=col)or((row==3 or row==4) and (0<=col<1 or 3<col>=4)):
                        print_A[row] [col] = "*"
            list2.append(print_A)

        elif name [i] =="L":
            print_L = [[" " for i in range (5)] for j in range (5)]
            for row in range(5):
                for col in range(5):
                    if ((col==0) and row<=4) or ((row==4) and (0<col<=4)):
                        print_L[row] [col] = "*"
            list2.append(print_L)
        else:
            print("INVALID")

    return list2

def print_pattern(pattern_list):
    for i in range (5):
        for j in range(len(pattern_list)):
            for k in range(5):
                print(pattern_list[j][i][k],end=" ")
            print(end=" ")
        print ()


def information_gathering_phase():
    while True:  
        word = input("Enter a word from the letters 'B', 'A' and/or 'L' (or type 'stop' to stop the program): ") 
        if word == 'stop' or word == 'STOP': 
            return None
        elif word =="ALL":
            pat = pattern("ALLLLL")
            print_pattern(pat)
            continue
        elif not all(letter in 'BAL' for letter in word): 
            print("Invalid word! Please try again...") 
        else:
            return word

def main():
    while True:
        word = information_gathering_phase()
        if word is None: 
            print("Thanks for trying my program...Bye for now!")
            break 
        else:
            list3 = pattern(word)
            print_pattern(list3)
            
if __name__ == '__main__': 
    main()
© www.soinside.com 2019 - 2024. All rights reserved.