Результат должен быть «четыре». Но ваша средняя формула неверна: вы должны суммировать делить не вычитать.
Итак, когда вы зацикливаетесь (что за странная идея?) В словаре, вы не находите значение, поэтому вы достигаете конца функции, и python возвращает None
в этом случае.
Так что исправьте формулу, а затем вместо пола, преобразуйте обратно в индекс, используя целочисленное деление , чтобы все оставалось в виде целых чисел, и используйте x
для преобразования в букву в виде строки:
def average_string(s):
s = s.split(' ')
dnumber = {k:i for i, k in enumerate(x)}
converter = [l for n, l in dnumber.items() for i in s if n == i]
floorN = sum(converter) // len(converter)
return x[floorN-1]
Кроме того, вы можете исключить из функции вычисление dnumber
, поскольку оно не зависит от переданных параметров (быстрее, если есть много вызовов), а также вы не используете словарь настолько эффективно так, как это должно быть. Ясно переписать будет:
x = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight','nine']
dnumber = {k:i for i, k in enumerate(x)}
def average_string(s):
converter = [dnumber[w] for w in s.split()]
floorN = int(sum(converter) / len(converter))
return x[floorN]
Теперь, когда я поместил zero
в словарь, я могу конвертировать из буквы в цифру и обратно, без каких-либо циклов, чтобы воспользоваться быстрым поиском в формате dict / list.