Taking Input in Ruby
Now, you have the knowledge of printing something on the screen. But in the real world, you develop programs for users. So, there should be some way to take inputs from the user. In Ruby, it is done with gets. Let’s see an example first.
gets.chomp is used to take string input from users.
a = gets.chomp : gets.chomp takes input from the user through the keyboard and store it in the variable a.
So, if the user enters xyz, then you can think that now gets.chomp is «xyz».
So, a = gets.chomp will then be equivalent to a = «xyz».
Now, we know that gets.chomp takes an input from the user as string. So, even if we give 5 to gets.chomp, then also it will be «5» ( a string ) and not 5 ( a fixnum or integer ). Let’s try this.
As you have seen that in the previous example, a.class gave us String because gets.chomp takes string inputs.
How to take integer inputs?
In Ruby, one can use get.chmop.to_i to take integer inputs from user.
In this example, the class of a is Fixnum and this shows that a is an integer. So, get.chomp.to_i took integer input from the user.
a = gets.chmop.to_i : If the user enters 5, then a = gets.chomp.to_i will be equivaltent to a = 5 ( not a = «5», as in case of gets.chomp ). Let’s see one more example on this:
Let’s take float input
As gets.chomp.to_i is used for Fixnum, gets.chomp.to_f is used for Float. Let’s see an example:
We can see that the class of a is Float and we used gets.chomp.to_f to take the float value.
Type conversion in Ruby
Ruby provides the simplest way to convert from one data type to another. We use to_i to convert a float into Fixnum ( or integer ). Also, we can use to_f to do the conversion to Float.
See the following example to understand this.
As you have seen, a.to_i converted 2.34 to an integer 2, and c.to_f converted 34 to a float 34.0.
Let’s do some maths
Ruby provides a number of functions to do maths in its Math module. To use any method of any module, we use dot (.) after the module name followed by that method name ( Module_name.method_name ). This will be clear by the following example :
Here, we have used the Math module. sin, cos, log, sqrt, etc are methods inside this Math module. So, we have used dot (.) to use a specific method of Math module. E.g.- Math.sin, Math.cos, etc. There are many more methods in this Math module of Ruby. You can see them all in Ruby documentation.
Using programming, your maths is going to be fun!
With every chapter, you are studying lots of new concepts. It is very necessary to solve problems.
The best way to predict the future is to create it.
-Peter Druker
Источник
gets.chomp и кириллица
Возникла проблема с методом chomp при использовании кириллицы.
Написал простенький код:
Страница с кодом в utf-8, кодировку консоли изменил также на utf-8
При выполнении кода, в консоли выдает: undefined method ‘chomp’ for nil:NilClass (NoMethodError)
Единственное, что нормальное нашёл по своему вопросу это http://rubyclub.com.ua/message. те-новичку
пробовал менять кодировку консоли обратно на cp866 и повторить, как в материале по ссылке, но всё равно не помогает.
Подскажите, пожалуйста, как быть, а то продвижение обучения застопорилось)
Подсчитать количество вхождений буквы (кириллица) в строку (кириллица)
Суть такая: по требованию программы ввести строку символов (обыкновенный текст, кириллица(. )) и.
кириллица
Как настроить кириллицу в ТР7.1?:-[
Кириллица
Доброго времени суток! Заранее извиняюсь за весьма глупый вопрос, но все же string name;.
так-с, значит если Ruby меньше 2.0 версии 1-ой строкой просать
# encoding: UTF-8
если выше или равно, то не надо
Добавлено через 12 секунд
так-с, значит если Ruby меньше 2.0 версии 1-ой строкой просать
# encoding: UTF-8
если выше или равно, то не надо
да, прописывал кодировку, сразу # -*- encoding : utf-8 -*- было, пробовал и просто # encoding: UTF-8 на всякий случай, но никак((
а у тебя без проблем такой код работает? может просто проблема в том, что я как-то не совсем правильно установил ruby? чего-нибудь может недоустановилось?
Добавлено через 33 секунды
а руби у меня 1.9.3
Источник
Gets chomp ruby что значит
Ruby on Rails уроки программирования. Обучение и документация на русском языке.
среда, 10 октября 2012 г.
# Это одностройчный комментарий.
name = ‘Eric’ # Это тоже однострочный комментарий.
=begin
Это многострочный
комментарий. Он может
размещаться на нескольких строчках.
=end
Названия переменных должны начинаться со строчной буквы и всегда быть в нижнем регистре. Слова в переменной могут разделяться символом подчеркивания. Названия переменных могут начинаться с других символов, таких как $ или @, но такой подход к именованию переменных крайне нежелателен.
Ruby Типы переменных: Числа, Строки, Булевы значения.
my_number = 25 # Переменная содержит число.
my_string = ‘Ruby’ # Переменная содержит строку с текстом.
my_boolean = true # Переменная содержит булево значение true.
Ruby Математические операции.
Сложение (+)
Вычитание (-)
Умножение (*)
Деление (/)
Возведение в степень (**)
Деление по модулю с получением остатка (%)
addition = 1 + 2 # Результат: 3
subtraction = 5 — 3 # Результат: 2
multiplication = 2 * 10 # Результат: 20
division = 15 / 3 # Результат: 5
exponentiation = 2 ** 3 # Результат: 8
modulo = 25 % 7 # Результат: 4
Ruby Приведение занчение к строке. to_s (to_string).
Ruby Вывод результата на экран: Print и Puts.
print ‘Данный текст будет выведен на экран.’
puts ‘Данный текст тоже будет выведен на экран, но после него будет добавлена дополнительная пустая строка.’
Ruby Строки.
‘Строку можно писать в одинарных кавычках.’
«Также строку можно писать в двойных кавычках.»
Ruby Сложение (объединение) строк.
text = «Вас » + «зовут » + «Виктор.»
puts text # Результат: «Вас зовут Виктор.»
Ruby Методы работы со строками: Length, Reverse, Upcase, Downcase, Capitalize.
‘Сколько символов в данной строке, включая пробел?’.length
# Результат: 49
‘Изменить порядок следования символов в данной строке на обратный’.reverse
# Результат: ‘йынтарбо ан екортс йоннад в воловмис яинаводелс кодяроп ьтинемзИ’
‘сделать все буквы в данной строке заглавными’.upcase
# Результат: ‘СДЕЛАТЬ ВСЕ БУКВЫ В СТРОКЕ ЗАГЛАВНЫМИ’
‘СДЕЛАТЬ ВСЕ БУКВЫ В СТРОКЕ СТРОЧНЫМИ’.downcase
# Результат: ‘сделать все буквы в данной строке строчными’
‘виктор — только первая буква станет заглавной’.capitalize
# Результат: ‘Виктор — только первая буква станет заглавной’
Методы можно записывать в цепочку.
‘К данной строке будет применено 3 метода подряд, согласно порядку их следования’.upcase.downcase.length
# Результат: 79
# Строка приняла следующий вид: ‘к данной строке будет применено 3 метода подряд, согласно порядку их следования’
Обычно любой метод при работе со строками не изменяет исходную строку, а создает её копию, которую передаёт далее по коду.
puts name.capitalize
# Результат: ‘Виктор’
puts name
# Результат: ‘виктор’
Для того, чтобы метод изменил исходную строку, в конец метода добавляется восклицательный знак (!).
puts name.capitalize!
# Результат: ‘Виктор’
puts name
# Результат: ‘Виктор’
Ruby Методы работы со строками: Split.
split — берет строку, разделяет её на блоки при нахождении символа и помещает блоки в массив.
text = ‘Этот текст будет разделен на блоки: один, два, три.’
print blocks.length # Результат: 3 значения в массиве.
Ruby Ввод данных из консоли: gets.chomp
#Запрос на ввод данных в консоли и подстановка введенного значения в переменную name.
name = gets.chomp
gets — запрашивает в консоли ввод данных от пользователя. После ввода данных пользователем Ruby автоматически подставляет пустую строку.
chomp — убирает лишнюю пустую строку, подставленную Ruby.
Внимание! В строки, находящиеся в одинарных кавычках значения переменных не подставляются. Подставляйте значения переменных только в строки с двойными кавычками.
name = «Viktor»
puts «Вас зовут #
# Результат: «Вас зовут Виктор!»
Ruby Ввод данных в программу из консоли: gets.chomp и подстановка данных в строку: ‘#
print ‘Какое у вас имя?’ # Вывод текста на экран.
first_name = gets.chomp # Запрос на ввод данных в консоли и подстановка введенного значения в переменную name.
first_name.capitalize! # Сделать первую букву заглавной.
print ‘Какая у вас фамилия?’
last_name = gets.chomp
last_name.capitalize!
print ‘В каком городе вы живете?’
city = gets.chomp
city.capitalize!
print ‘Из какой вы страны?’
state = gets.chomp
state.upcase! # Сделать все буквы заглавными.
# Подстановка значений из переменных в строку и вывод итогового текста на экран.
puts «Вас зовут #
Ruby Условия: if, elsif, else, end и unless.
if 1 2
print ‘Этот текст не будет выведен на экран, так как 1 меньше, чем 2.’
else
print ‘Это значит, что на экран будет выведен этот текст!’
end
if x y
puts «x больше, чем y!»
else
puts «x равен y!»
end
print ‘Введите число: ‘
user_number = Integer(gets.chomp)
if user_number 0
puts ‘Вы ввели положительное число!’
else
puts ‘Вы ввели ноль!»‘
end
hungry = false # Это значит, что я не голоден.
unless hungry # Пока не голоден.
puts «Можно писать программы!»
else # В противном случае.
puts «Самое время поесть!»
end
Вы можете также использовать тернарный оператор в качестве замены для назначения:
if boolean?
do_one_thing
else
do_something_else
end
В этом случаем данное выражение будет выглядеть так:
boolean? ? do_one_thing : do_something_else
Ruby Сравнение значений: ==, !=, >, >=, )
Больше или равно (>=)
Меньше ( -9)
# Результат: boolean_or = false
boolean_not = !((700 / 10) == 70)
# Результат: boolean_not = false
Логические операторы можно комбинировать в одном выражении.
boolean_combination = (3 5
end
i = 20
loop do
i -= 1
next if i % 2 == 0 # Аналог continue в других языках программирования.
print «#»
break if i 10
puts counter
counter = counter + 1
end
Ruby Инкремент и Декремент: +=, -=, *=, /=.
Ruby не имеет операторов вида ++ и —, имеющихся в других языках программирования. Вместо них используются следующие операторы: +=, -=, *=, /=.
counter += 1 # Эквивалентно counter = counter + 1
counter -= 1 # Эквивалентно counter = counter — 1
counter *= 2 # Эквивалентно counter = counter * 2
counter /= 2 # Эквивалентно counter = counter / 2
Ruby Массивы: Array.
Массивы могут содержать абсолютно любые значения, включая объекты, функции, булевы значения, строки, числа и так далее, а так же другие массивы.
my_array = [1, 2, 3, 4, 5]
array_value = my_array[0] # Результат: array_value = 1
array_value = my_array[-1] # Результат: array_value = 5
multi_d_array_value = multi_d_array[0][1] # Результат: multi_d_array_value = 2
Ruby Добавление элемента в массив: Push и «Eric»,
«age» => 26,
«hungry?» => true
>
puts my_hash[«name»]
puts my_hash[«age»]
puts my_hash[«hungry?»]
Как и обычные массивы, Хэш-массивы могут быть вложенными и содержать все, что угодно.
params[:user] = <
:name => «Michael Hartl»,
:email => «mhartl@example.com»
>
params[:user][:email] # Результат: «mhartl@example.com»
Ruby Хэш-массивы: Hash.new.
Данная конструкция аналогична
Ruby Добавление значение в Хэш-массив.
pets = Hash.new
pets[‘Stevie’] = ‘cat’
Можно сделать так:
my_hash = Hash.new(‘Первый элемент массива.’)
puts my_hash[0] # Результат: ‘Первый элемент массива.’
Ruby Символы в Хэш-массивах.
Символы можно просто воспринимать, как обычные строки, но без возможности добавлять к ним методы, которые допустимы при работе со строками.
В Хэш-массивах символы можно использовать в качестве ключей.
user = <
:name => «Michael Hartl»,
:email => «michael@example.com»
>
user[:name] # Результат: «Michael Hartl»
Данный код аналогичен следующему коду:
user = <
«name» => «Michael Hartl»,
«email» => «michael@example.com»
>
user[«name»] # Результат: «Michael Hartl
Ruby Циклический перебор значений массивов.
friends = [«Milhouse», «Ralph», «Nelson», «Otto»]
family = <
«Homer» => «dad»,
«Marge» => «mom»,
«Lisa» => «sister»,
«Maggie» => «sister»,
«Abe» => «grandpa»,
«Santa’s Little Helper» => «dog»
>
Ruby Циклический перебор вложенных массивов.
s = [[«ham», «swiss»], [«turkey», «cheddar»], [«roast beef», «gruyere»]]
s.each do | x |
x.each do | y |
puts y
end
end
Ruby Циклический перебор Хэш-массивов.
secret_identities = <
«The Batman» => «Bruce Wayne»,
«Superman» => «Clark Kent»,
«Wonder Woman» => «Diana Prince»,
«Freakazoid» => «Dexter Douglas»
>
Ruby Сортировка массивов: Sort.
my_array = [3, 4, 8, 7, 1, 6, 5, 9, 2]
my_array.sort! # Результат: [1, 2, 3, 4, 5, 6, 7, 8, 9]
books = [
«Charlie and the Chocolate Factory»,
«War and Peace»,
«Utopia»,
«A Brief History of Time»,
«A Wrinkle in Time»
]
books.sort!
# Результат:
[
«A Brief History of Time»,
«A Wrinkle in Time»,
«Charlie and the Chocolate Factory»,
«Utopia»,
«War and Peace»
]
Ruby Сравнение массивов: .
— это оператор сравнения массивов. Он возвращает:
0 — если первый массив равен второму,
1 — если первый массив больше, чем второй,
-1 — если первый массив меньше, чем второй.
array_1 = [1,2,3,4,5]
array_2 = [1,2,3,4,5]
puts array_1 array_2
Ruby Функции и методы.
def welcome
puts «Welcome to Ruby!»
end
def enter_number (n)
puts «#
end
enter_number (10) # Результат: 10 — это число.
def cube(n)
return n ** 3
end
puts output # Результат: 27
В Ruby скобки у функций не являются обязательными.
Данные записи будут эквивалентны:
stylesheet_link_tag (‘blueprint/screen’, :media => ‘screen’)
stylesheet_link_tag ‘blueprint/screen’, :media => ‘screen’
И когда Хэш-массив является последним аргументом функции, то фигурные скобки для него не являются обязательными.
Данные записи будут эквивалентны:
stylesheet_link_tag ‘blueprint/screen’, <:media =>‘screen’>
stylesheet_link_tag ‘blueprint/screen’, :media => ‘screen’
Если метод возвращает значение true или false, то в конце его имени желательно ставить знак вопроса (?).
def validate? (a)
if a == 1
return true
else
return false
end
end
Ruby Анонимные функции или блоки кода: <>.
Анонимные функции или блоки кода могут быть определены внутри do — end или внутри фигурных скобок < >.
Анонимные функции вызываются сразу и срабатывают только один раз в контексте программы.
1.times do
puts «I’m a code block!»
end
Функции могут принимать блоки в качестве параметров. В этом смысле они похожи на объекты или массивы.
attr_accessor :fname, :lname
def initialize(fname, lname)
@fname = fname # Это внутренняя переменная экземпляра класса.
@lname = lname # Это внутренняя переменная экземпляра класса.
end
def to_s
@lname + «, » + @fname
end
Ключевое слово self будет являться ссылкой на сам объект (как слово this).
Self также может задавать и внутренний метод класса:
class CreateUsers »
end
end
attr_accessor :name, :email — создает атрибуты доступа соответствующие имени пользователя и адресу электронной почты. Он создает методы получатель (getter) и установщик (setter), которые позволяют нам получать (get) и назначать (set) переменные экземпляра класса @name и @email.
initialize — специальный метод в Ruby. Этот метод вызывается, когда мы выполняем User.new. Этот метод принимает один аргумент: attributes.
attributes — это переменная, которая имеет значение по умолчанию равное пустому хэшу, так что мы можем определить пользователя без имени или адреса электронной почты (напомним, что хэш-массивы возвращают nil на несуществующие ключи, поэтому attributes[:name] будет nil, если нет :name ключа, и так же для attributes[:email]).
Источник