我的计算机课程有一个作业,其中一个问题要求我们编写一个代码,用来计算数字的平均值,直到找到一个字母(字母)。
这是描述:
此函数接收一个包含数字或字母的字符串作为输入。 该函数应返回一个浮点数,其中包含从字符串中第一个位置开始的字符串中的所有数字计算的平均值,并考虑所有数字,直到找到一个字母或直到到达字符串的结尾。如果没有数字,则函数应返回值
0.0
。
所以我想出了以下代码:
def avgUntilLetter (st):
digits1 = [int(x) for x in st if x.isdigit()]
total = sum(digits1)
if digits1:
avg = float(total) / len(digits1)
return avg
if st.isalpha():
return 0.0
对于答案,例如,如果CodeWrite放入2.0
,我应该将avgUntilLetter('123a456')
作为返回值。我得到了所有数字的平均值,我需要在代码中添加什么才能解决此问题?
答案 0 :(得分:1)
您正在使用所有数字,而不仅仅是开头的数字。当您遇到第一个非数字时,您需要停止计算。
如果您只是逐个遍历所有字符并且当您到达第一个非数字时突破,这是最简单的:
def avgUntilLetter(st):
total = count = 0
for x in st:
if not x.isdigit():
break
count += 1
total += int(x)
if not count:
return 0.0
return float(total) / count
此处count
跟踪我们在开始时找到的位数;如果仍然0
没有找到数字。
演示:
>>> def avgUntilLetter(st):
... total = count = 0
... for x in st:
... if not x.isdigit():
... break
... count += 1
... total += int(x)
... if not count:
... return 0.0
... return float(total) / count
...
>>> avgUntilLetter('123a456')
2.0