我尝试过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
答案 0 :(得分:2)
有几种方法可以解决此问题。
使用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
另一种方式或编写最后的代码将创建一个包含三个长度的元组的单个变量,然后在元组上使用sum
,min
和max
以避免太多重复:
def mid_string_of_stars(text1, text2, text3):
lengths = (len(text1), len(text2), len(text3))
return '*' * (sum(lengths) - min(lengths) - max(lengths))
答案 1 :(得分:2)
看起来您的代码段提供了 平均值 ,而问题描述要求提供 中位数 。您有正确的想法与排序。您可以将字符串输入传递给数组,然后使用sort()就地修改列表(请参见https://wiki.python.org/moin/HowTo/Sorting),然后获取中间元素的长度。我看到您已经知道如何使用len()并创建'*'字符串,因此您应该很好。
答案 2 :(得分:1)
您的代码似乎正在查找最大和最小文本长度的均值,但这绝不能保证等于中间长度。
您可以尝试对文本的长度进行排序,然后选择中间值。对于偶数个字符串,您可以四舍五入并取两个中间的任意一个,但这就是您的要求。
此代码对我有用:
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
希望这会有所帮助。
答案 3 :(得分:0)
怎么样
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)