Я хочу попросить пользователя ввести строку и связать каждую из ее букв с ее числовой позицией в алфавите, чтобы получить следующий результат:
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
^~
Чтобы получить индекс символа в алфавите, вы можете использовать метод массива показатель, например:
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 Мне жаль, что в то время меня не было с Руби на моей машине. Я обновил свой ответ и протестировал код на онлайн-интерпретаторе, теперь все в порядке
Я гораздо лучше знаком с smt_iterable.each do |value| code_block end
, чем с синтаксисом скобок. Я думаю, что использование each do |value|
более значимо, его легче читать и понимать.
Спасибо, попробовав оба метода, мне удалось запустить его при удалении (anychar.upcase)
, но я не уверен в результате, кажется, что это какие-то шестнадцатеричные значения, но не похоже, я буду работать над этим сам, я просто нужно было понять, как работать с рубином, и вы очень помогли в этом! 1000 спасибо :)
@AlexZi да, я внес массу правок в код после тестирования онлайн-интерпретатора. Вместо этого было бы неплохо добавить в ваш код .downcase
, чтобы в нем не учитывался регистр. Думаю, я действительно мог добавить несколько нежелательных тем к своему ответу, ха-ха. Я рад, что это помогло.
alphabet_Count = ("a".."z").to_a
@steenslag спасибо за предложение, я отредактировал свой ответ, используя диапазон, а не весь алфавит.
Написанный вами код неверен
Вы должны следовать либо 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
«1234» также может быть «LCD» (12, 3, 4) или «AWD» (1, 23, 4).