Можем ли мы использовать для цикла и, если еще в одной функции лямбда сразу так что он может проверять значения при работе внутри цикла - PullRequest
0 голосов
/ 26 июня 2019

Имеют функцию LetterChanges(str). Возьмите передаваемый параметр str и измените его, используя следующий алгоритм. Замените каждую букву в строке буквой, следующей за ней в алфавите (т.е. c становится d, z становится a). Затем используйте каждый гласный в этой новой строке (a, e, i, o, u) и, наконец, верните эту измененную строку.

Я хочу решить эту проблему в 2 строки

a= lambda stri:([(chr(ord(i) + 1)) for i in stri]) #if i not in ("a","e","i","o","u") 

print(a("bcdefgh"))

Я знаю, что если какая-то часть неверна, чтобы понять, я включил ее в комментарий.

Ожидаемый вывод: "cdEfgI".

Ответы [ 2 ]

0 голосов
/ 26 июня 2019

Вот обычный код (который вы уже должны были сделать):

def change_letters(string):
    result = ''
    for letter in string:
        # This makes sure that 'z' goes to 'a'
        next_letter = chr((ord(letter) - 98)%26 + 97)
        if next_letter in 'aeiou':
            result += letter.upper()
        else:
            result += letter
    return string

Если мы выполним шаги в моем другом ответе здесь , мы получим следующее:

change_letters = lambda string: ''.join(chr((ord(letter) - 98)%26 + 97).upper() if chr((ord(letter) - 98)%26 + 97) in 'aeiou' else chr((ord(letter) - 98)%26 + 97) for letter in string)

Но обратите внимание, это УЖАСНО, особенно для вашего будущего я и для других, с которыми вы когда-нибудь будете работать.Я не хотел бы видеть это снова:)

0 голосов
/ 26 июня 2019

Ваш ожидаемый результат не совпадает с вашим вводом, вы пропускаете h перед окончательным I.

Предполагая, что это просто опечатка, ваша проблема может быть решена с помощью:

>>> a = lambda stri: ''.join('A' if i == 'z' else chr(ord(i) + (-31 if i in "dhnt" else 1)) for i in stri)
>>> print(a("bcdefgh"))
cdEfghI

Объяснение:

  • сначала проверьте, является ли i z, затем верните A
  • , в противном случае проверьте, является ли i любым символом, предшествующим aгласную в алфавите, затем вычтите из нее 31, чтобы получить заглавную гласную
  • , если это не так, увеличьте символ на один
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...