переместить первые символы слова в конец и добавить другие символы до конца слова [дубликат]

Юникод является подходящим типом здесь. В документах JSONDecoder описывается таблица преобразования и указано, что строковые объекты json декодируются в объекты Unicode

https://docs.python.org/2/library/json.html#encoders-and- декодеры

JSON                    Python
==================================
object                  dict
array                   list
string                  unicode
number (int)            int, long
number (real)           float
true                    True
false                   False
null                    None

"определяет кодировку, используемую для интерпретации любых объектов str, декодированных этим экземпляром (по умолчанию UTF-8)."

2
задан Bonifacio2 3 February 2016 в 18:22
поделиться

3 ответа

Я бы подошел к нему так же, как вы предполагали, в результате получив код ниже.

Короче, проверьте первый символ строки. Если это не гласный (not in ['a','e','i','o','u']), переместите символ в конец строки. Продолжайте делать это до тех пор, пока вы не нажмете гласный (так что «строка» станет «trings», а затем «ringst», а затем «ingstr», прежде чем пробить цикл). Когда вы, наконец, нажмете гласную, вы оставите цикл и напечатаете измененную строку + 'ay'. Если первый символ является гласным, вы оставляете цикл и печатаете строку + 'ay'.

Нет необходимости устанавливать согласную проверку - вы всегда проверяете первый символ (0). И нет необходимости иметь две переменные - просто продолжайте изменять и заменять исходную строку.

word_string = input("Input a word: ")

while word_string[0] not in ['a','e','i','o','u']:
    word_string = word_string[1:] + word_string[0:1]

else:
    print(word_string + 'ay')
3
ответ дан Stidgeon 20 August 2018 в 18:25
поделиться

Это не прямой ответ на ваш вопрос, но мое решение проблемы свинья-латина. Изучая python, я обнаружил, что поиск завершенных примеров очень помог.

word = "snake"

import string

# Create a list of vowels an consonants
vowels   = ['a','e','i','o','u','y']
vowels  += [v.upper() for v in vowels]
consonants = [x for x in string.ascii_letters if x not in vowels]

if word[0] in consonants:
    # Find the first vowel
    idx = min([word.find(v) for v in vowels if word.find(v)>0])

    # Split the word at this point and add 'ay'
    word = word[idx:] + word[:idx] + 'ay'

print(word)
# Returns "akesnay"
2
ответ дан Hooked 20 August 2018 в 18:25
поделиться

Я думаю, что ваша логика в целом немного испорчена. Я предлагаю решить эту проблему следующим образом:

1.) Проверьте, чтобы первая буква была согласным, если нет, ничего не делайте, если это так, перейдите к шагу 2

2.) Найдите все согласные в слове и сохраните их в списке

3.) Если это так, удалите гласные из слова, а затем добавьте все согласные в конец, затем by 'ay'.

Есть бесконечные способы реально реализовать это, и я думаю, что было бы хорошим упражнением для вас, чтобы попытаться реализовать его самостоятельно, но дайте мне знать, если вам нужна дополнительная помощь.

0
ответ дан Jaron Thatcher 20 August 2018 в 18:25
поделиться
  • 1
    Получил это, я буду продолжать работать над этим. – Xinze Wang 3 February 2016 в 17:44
  • 2
    Спасибо, что предоставили логику. – Xinze Wang 3 February 2016 в 17:45
  • 3
    Я пытаюсь вставить часть проверки гласных в петлю. – Xinze Wang 3 February 2016 в 17:46
  • 4
    Но он продолжает говорить, что строковые индексы должны быть целыми числами, которые я не понимаю – Xinze Wang 3 February 2016 в 17:50
  • 5
    @ Stidgeon Я думаю, вы правы. Я читал, что он сказал, что его целью было не определение Pig Latin, которое я не слишком хорошо знаком с – Jaron Thatcher 3 February 2016 в 21:38
Другие вопросы по тегам:

Похожие вопросы: