Python 文本框列表

Python 文本框列表,python,recursion,Python,Recursion,使用将提供一个包含多个项目的输入,其中每个项目由一个空格分隔。输入示例: star jupiter sun 然后输出将是 *********** * star * * jupiter * * sun * *********** *的长度取决于列表中最长的单词,其中最后一个字母后面应该有空格。我的代码的问题是我有一个固定长度*,它不依赖于最长单词的长度。较短单词右侧的*也与上述输出不一致。我有一个想法使用print((“”)随机最长单词的长度),但我不确定这是否可行。这是

使用将提供一个包含多个项目的输入,其中每个项目由一个空格分隔。输入示例:

   star jupiter sun
然后输出将是

***********
* star    * 
* jupiter *
* sun     *
***********
*
的长度取决于列表中最长的单词,其中最后一个字母后面应该有空格。我的代码的问题是我有一个固定长度
*
,它不依赖于最长单词的长度。较短单词右侧的
*
也与上述输出不一致。我有一个想法使用print((“”)随机最长单词的长度),但我不确定这是否可行。这是我的密码

s = str(input("Please enter a list of items seperated by a space:"))
print("*")

for word in s.split():
    print("* " + word + " *")

print("*")

你可以用这一行来计算星星的长度

star_length = max(map(len, s.split())) + 2
这将
star\u length
设置为最长单词的长度加上2。然后可以像这样输出它

print('*' * star_length)
for i in s.split():
    print('* ' + i + (' ' * (star_length - len(i))) + ' *')
print('*' * star_length)

你可以用这一行来计算星星的长度

star_length = max(map(len, s.split())) + 2
这将
star\u length
设置为最长单词的长度加上2。然后可以像这样输出它

print('*' * star_length)
for i in s.split():
    print('* ' + i + (' ' * (star_length - len(i))) + ' *')
print('*' * star_length)

要查找最长的单词,您需要使用

max(listOfWords,key=lambda arg:len(arg))

max
函数查找列表中最大的单词,并将使用
key=function
对其进行排序。在这里,函数返回其参数的长度,因此它将按长度对其排序
max
查找最大值

现在,您需要将其括在一个
len()
中,以找出长度
,并添加2,以查看应在顶部和底部放置多少颗星。例如,可以将字符串与数字相乘
“abc”*3
将给出
abcabc`

如果要将
*
字符相乘,则可能需要执行此操作

print(“*”*(len(max(listOfWords,key=lambda arg:len(arg)))+2))

记住乘法,即使是字符串,也比加法更紧密,所以我们必须使用括号

下一部分,我们需要使用类似的方法在线条的末端填充空格。我们想从最长单词的长度中减去单词的长度,得到我们需要填充的空间量

print(“*”+word+(len(word)-(len(max(listOfWords,key=lambda arg:len(arg)))+2))*”+“*”

最后一行与第一行相同。下面是完整的代码:

s = str(input("Please enter a list of items seperated by a space:"))

print("*" * (len(max(listOfWords, key=lambda arg: len(arg))) + 2))

for word in listOfWords:
    print("* " + word + (len(word) - (len(max(listOfWords, key=lambda arg: len(arg))) + 2)) * " " + " *")

print("*" * (len(max(listOfWords, key=lambda arg: len(arg))) + 2))

此代码非常混乱,因此我可能犯了一个错误。

要查找最长的单词,您需要使用

max(listOfWords,key=lambda arg:len(arg))

max
函数查找列表中最大的单词,并将使用
key=function
对其进行排序。在这里,函数返回其参数的长度,因此它将按长度对其排序
max
查找最大值

现在,您需要将其括在一个
len()
中,以找出长度
,并添加2,以查看应在顶部和底部放置多少颗星。例如,可以将字符串与数字相乘
“abc”*3
将给出
abcabc`

如果要将
*
字符相乘,则可能需要执行此操作

print(“*”*(len(max(listOfWords,key=lambda arg:len(arg)))+2))

记住乘法,即使是字符串,也比加法更紧密,所以我们必须使用括号

下一部分,我们需要使用类似的方法在线条的末端填充空格。我们想从最长单词的长度中减去单词的长度,得到我们需要填充的空间量

print(“*”+word+(len(word)-(len(max(listOfWords,key=lambda arg:len(arg)))+2))*”+“*”

最后一行与第一行相同。下面是完整的代码:

s = str(input("Please enter a list of items seperated by a space:"))

print("*" * (len(max(listOfWords, key=lambda arg: len(arg))) + 2))

for word in listOfWords:
    print("* " + word + (len(word) - (len(max(listOfWords, key=lambda arg: len(arg))) + 2)) * " " + " *")

print("*" * (len(max(listOfWords, key=lambda arg: len(arg))) + 2))

这段代码很混乱,所以我可能犯了一个错误。

print('*{}{}*'.format(I),*(star_length-len(I))
的可读性要高得多如果我的输入用coma而不是空格分隔,我有可能得到相同的输出吗?昏迷不应该在昏迷中output@user7043763差不多,但是你需要的不是
s.split()
,而是
s.split(',')
。map函数是什么?map(A,B)将返回B,但是B的每一项都应用于A。基本上,
map(q,[“A”,“B”,“c”])
返回
[q(“A”),q(“B”),q(“c”)
打印('*{}{}*'.format(i,,*(star_length-len(i)))
可读性更高如果我的输入用coma而不是空格分隔,我有可能得到相同的输出?coma不应该在output@user7043763差不多,但是您需要的不是
s.split()
,而是
s.split(',')
。map函数是什么?map(A,B)将返回B,但B的每一项都已应用于A。基本上,
map(q、[“A”、“B”、“c”)
返回
[q(“A”)、q(“B”)、q(“c”)]
。最好使用
max(map(len,listOfWord))
而不是使用带关键参数的
max
,因为在这种情况下单词本身并不重要,只是长度而已。@EliSadoff这是个好主意,但是我从来没有理解Python中的
map
函数-它不像我期望的那样返回列表在Python 2中它返回一个列表,而在Python 3中它返回一个mappa可映射对象。这是因为python 3具有延迟迭代,这意味着如果您想将函数应用于不需要完全映射的结果对象,它将不会完全映射。如果您想从python 3中的映射中获取列表,您可以使用
list(map(…)
@EliSadoff非常感谢!这有助于加载!不用担心,python是一种非常有趣的语言。我从其他用户那里学到了很多东西。如果你在这里保持活跃,你将真正了解该语言。你最好使用
max(map(len,listOfWord))
而不是将
max
与关键参数一起使用,因为在这种情况下,单词本身并不重要,只是长度而已。@EliSad