Найдите расположение символа в алфавите и зашифруйте его

Я хочу попросить пользователя ввести строку и связать каждую из ее букв с ее числовой позицией в алфавите, чтобы получить следующий результат:

EGG = 577

Вот мой код:

print "Quelle est votre nom?"
user_Name = gets.chomp
name = user_Name.split(%r{\s*})
alphabet = "abcdefghijklmnopqrstuvwxyz"
alphabet_Count = alphabet.split("")
name.each_char { |chr|  } do
  until { |chr| == alphabet_Count[i]}
      puts alphabet_Count[i]
  end
end

Я получаю сообщение об ошибке при запуске кода:

alphabet.rb:6: syntax error, unexpected keyword_do, expecting end-of-input
name.each_char { |chr|  } do
                          ^~

«1234» также может быть «LCD» (12, 3, 4) или «AWD» (1, 23, 4).

Stefan 13.09.2018 20:35
1
1
61
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Чтобы получить индекс символа в алфавите, вы можете использовать метод массива показатель, например:

alphabet_Count = ("a".."z").to_a
alphabet_Count.index(anychar.downcase)

Обратите внимание, что если вы используете метод index, буква 'a' будет проиндексирована как 0, поэтому вам придется добавить смещение значения 1. Кроме того, в вашем цикле действительно есть синтаксическая ошибка. Попробуй это:

name.each_char do |chr|
  puts alphabet_Count.index(chr.downcase)
end

или это:

name.split('').each do |chr|
    puts alphabet_Count.index(chr.downcase)
end

В рубине, если вы выполняете итерацию, используя что-то вроде:

list.each do
    any_code_block
end

Это означает, что any_code_block будет выполняться один раз для каждого элемента в name. Поскольку в вашем случае вам нужно будет использовать element на каждой итерации, вам необходимо указать имя переменной для получения значения element. Вы делаете это с помощью |variable_receiving_element_value|.

Спасибо, но я все равно получаю сообщение об ошибке при запуске кода alphabet.rb:7: syntax error, unexpected keyword_do_block name.each_char |chr| do ^~ alphabet.rb:9: syntax error, unexpected keyword_end, expecting end-of-input

AlexZi 13.09.2018 20:24

@AlexZi Мне жаль, что в то время меня не было с Руби на моей машине. Я обновил свой ответ и протестировал код на онлайн-интерпретаторе, теперь все в порядке

Lucas Wieloch 13.09.2018 20:35

Я гораздо лучше знаком с smt_iterable.each do |value| code_block end, чем с синтаксисом скобок. Я думаю, что использование each do |value| более значимо, его легче читать и понимать.

Lucas Wieloch 13.09.2018 20:39

Спасибо, попробовав оба метода, мне удалось запустить его при удалении (anychar.upcase), но я не уверен в результате, кажется, что это какие-то шестнадцатеричные значения, но не похоже, я буду работать над этим сам, я просто нужно было понять, как работать с рубином, и вы очень помогли в этом! 1000 спасибо :)

AlexZi 13.09.2018 20:56

@AlexZi да, я внес массу правок в код после тестирования онлайн-интерпретатора. Вместо этого было бы неплохо добавить в ваш код .downcase, чтобы в нем не учитывался регистр. Думаю, я действительно мог добавить несколько нежелательных тем к своему ответу, ха-ха. Я рад, что это помогло.

Lucas Wieloch 13.09.2018 21:02
alphabet_Count = ("a".."z").to_a
steenslag 13.09.2018 21:41

@steenslag спасибо за предложение, я отредактировал свой ответ, используя диапазон, а не весь алфавит.

Lucas Wieloch 13.09.2018 21:47

Написанный вами код неверен

Вы должны следовать либо do ... end, либо {}. Достаточно только одного

Вот код без синтаксической ошибки

print "Quelle est votre nom?"
user_Name = gets.chomp
name = user_Name.split(%r{\s*})
alphabet = "abcdefghijklmnopqrstuvwxyz"
alphabet_Count = alphabet.split("")
name.each_char do |chr|
  until (chr == alphabet_Count[i])
      puts alphabet_Count[i]
  end
end

Другие вопросы по теме