在python中打印为中间字符串的长度



我试过sorted(),但没有成功
我需要在不使用条件或循环的情况下解决这个问题。

当调用此函数时,它应该返回一个星号(*(字符串,该字符串的长度与具有中值长度的字符串参数的长度相同。

def mid_string_of_stars(text1, text2, text3):
maksimum=max(len(text1), len(text2), len(text3))
minimum = min (len(text1), len(text2), len(text3))
m=(maksimum+minimum)/2 
middle_string='*'*m
return middle_string

看起来您的代码片段提供了均值,而问题描述要求中值。你对sorted的想法是正确的。您可以将字符串输入传递给数组,然后使用sort((就地修改列表(请参阅https://wiki.python.org/moin/HowTo/Sorting)然后抓住中间元件的长度。我看到您已经知道如何使用len((并创建字符串'*',所以您应该可以开始了。

有几种方法可以解决这个问题。

使用sorted和索引似乎是最简单的(就你需要写的代码量而言(。只需对三个长度进行排序,然后索引得到中间的一个:

def mid_string_of_stars(text1, text2, text3):
order = sorted(map(len, (text1, text2, text3)))
return '*' * order[1]

另一种方法是只使用算术以及您当前计算的最小值和最大值:

def mid_string_of_stars(text1, text2, text3):
maximum = max(len(text1), len(text2), len(text3))
minimum = min(len(text1), len(text2), len(text3))
middle = len(text1) + len(text2) + len(text3) - minimum - maximum
return '*' * middle

编写最后一段代码的另一种方法是创建一个包含三个长度的元组的单个变量,然后在元组上使用summinmax来避免重复:

def mid_string_of_stars(text1, text2, text3):
lengths = (len(text1), len(text2), len(text3))
return '*' * (sum(lengths) - min(lengths) - max(lengths))

您的代码似乎正在查找最大和最小文本长度的平均值,这绝不能保证等于中间长度。

您可以尝试对文本的长度进行排序,然后选择中间值。对于偶数的字符串,你可以四舍五入这个数字,取中间两个数字中的任何一个,但这是你的决定。

这个代码对我有效:

text1 = 'hello'
text2 = 'my name'
text3 = 'is monty'
def mid_string_of_stars(text1, text2, text3):
lengths = sorted([len(text1),len(text2),len(text3)])
middle = round((len(lengths)-1)/2)
middle_length = lengths[middle]
middle_string = '*'*middle_length
return middle_string

希望这能有所帮助。

这个怎么样

def mid_string_of_stars(text1, text2, text3):
maksimum=max(len(text1), len(text2), len(text3))
minimum = min (len(text1), len(text2), len(text3))
m = len(text1) + len(text2) + len(text3) - maksimum - minimum 
# so that m is actually one of len(text1) or len(text2) or len(text3)
res = []
i = 0
while i<m:
res.append('*')
i = i + 1
return ''.join(res)

最新更新