蟒3.5 - 262个 236 220字节:
-16个字节,感谢@CatsAreFluffy!现在,我的整个功能终于可以放在一行中了!:)
from collections import*
def a(v):o=OrderedDict;j=[chr(i+97)for i in range(26)];d=o((j[i],(' '+'_'*(i+1)+'\n'+j[i]+'|'+'_'*(i+1)+'|'))for i in range(26));f=lambda w:'a'[w:]or f(w-1)+j[w]+f(w-1);[print(d[g])for g in f(v)]
它可能会有点长,并且可能会在建筑物之间打印出新的线条,但需要做什么。您可以自己进行测试以确认。
编辑:
我以前的打高尔夫球代码无法正确打印图案。但是,现在上面显示的一个可以了,在我看来它确实很好。您也可以自己运行它来确认。
注意:该程序在每个“建筑物”后面打印所有小写字母。我希望可以。
取消说明的非高尔夫版本:
from collections import*
def a(v):
o=OrderedDict # Assign the OrderedSict function to "o"
j=[chr(i+97)for i in range(26)] # Create a list with all 26 lowercase letters of the alphabet
d=o((j[i],(' '+'_'*(i+1)+'\n'+j[i]+'|'+'_'*(i+1)+'|'))for i in range(26)) # Create a dict assigning each letter it's corresponding building with its corresponding length
f=lambda w:'a'[w:]or f(w-1)+j[w]+f(w-1) # Return the ABACABA sequence based on the user input
[print(d[g])for g in f(v)] # Print out the building according to the sequence returned by the above lambda function (thanks to @CatsAreFluffy for this method to print it! :) )
基本上,我要做的是先导入collections模块的Ordered Dictionary函数,然后创建一个有序字典,将列表“ j”中的每个小写字母分配给其对应的建筑物,并在其下划线加相应的长度。然后,我根据用户的输入,使用f=lambda w:"a"[w:]or f(w-1)+j[w]+f(w-1)
函数来计算序列,然后根据返回的序列,打印出带有相应字母的建筑物。