• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Konstrukcja warunkowa RUBY - Jak wygląda jej składnia?

Object Storage Arubacloud
0 głosów
490 wizyt
pytanie zadane 13 listopada 2017 w Ruby przez Q7V Gaduła (4,250 p.)

Cześć, chciałem stworzyć prostą konstrukcje warunkową, która sprawdza stosunek dwóch liczb, moje wypociny nie działają tak jak powinny. :P

a = 555
b = 555
if a > b
puts "#{a} jest większe od #{b}"
elseif b > a
puts "#{b} jest większe od #{a}"
elseif b == a
puts "Obie liczby sa takie same #{a} = #{b}"
end

Prostą konstrukcję potrafię zrobić, ale gdy zachodzą trzy warunki to już coś musi być inaczej i nie wiem co.

Działa tylko pierwszy warunek, gdy podmienię liczby to program nic nie wyświetla, nawet błędu, wpisuję w konsoli ruby 2.rb i nic...

Efekt pierwszego warunku, gdy a = 777, b  = 555

777 jest większe od 555
2.rb:5:in `<main>': undefined method `elseif' for main:Object (NoMethodError)

 

Jak mogę jeszcze dodać aby zmienne były wprowadzane przez użytkownika w konsoli? Tak dla edukacji, żebym mógł jakiś kalkulator lub coś stworzyć. :)

1 odpowiedź

+1 głos
odpowiedź 13 listopada 2017 przez kap Stary wyjadacz (11,620 p.)
 
Najlepsza
elsif nie elseif

 

Do pobierania inputu użytkownika służy gets.

 

Ogólnie to przerób jakiś podstawowy tutorial bo to nie jest wiedza tajemna, ja nawet w Ruby nie piszę a wiem.
komentarz 13 listopada 2017 przez Q7V Gaduła (4,250 p.)

Dziękuję za odpowiedź, przyznam szczerze że Ruby ma bardzo ciekawą składnię. laugh Sam bym do tego błędu nie doszedł. :P

komentarz 13 listopada 2017 przez Q7V Gaduła (4,250 p.)

Cześć, dałbyś rade objaśnić switcha?

puts "Podaj swój wzrost"
$w = gets

case $w
when 0 .. 140
puts "Jesteś bardzo niski"
when 141 .. 160
puts "Jesteś niski"
when 161 .. 180
puts "Jesteś średni"
when 181 .. 195
puts "Jesteś wysoki"
when 196 .. 205
puts "Jesteś bardzo wysoki"
when 205 .. 500
puts "Jesteś za wysoki"
end

Prosi o wpisanie zmiennej, ale nie zwraca odpowiedzi w postaci np. Jesteś średni, wysoki itp.

komentarz 13 listopada 2017 przez surfeliza Stary wyjadacz (11,260 p.)

To co wczytujesz w $w(czyli string) rzutuj na liczbę.

gets.to_i
komentarz 13 listopada 2017 przez Q7V Gaduła (4,250 p.)
Czyli domyślnie zmienna jest stringiem? Żeby porównywać ją względem liczb muszę ją zadeklarować jako liczbę?
komentarz 13 listopada 2017 przez Q7V Gaduła (4,250 p.)

Zrobiłem kolejny upgrade i teraz robię prosty kalkulator, póki co znowu ify wszystko psują. :P

puts "Podaj dwie liczby"
a = gets.to_i
b = gets.to_i
puts "Wybierz operację\n1 - Dodawanie\n2 - Odejmowanie\n3 - Mnożenie\n4 - Dzi$
c = gets.to_i
$d.to_i #zmienna pomocnicza
if ( a == nil || a < 1 || a > 5 ){
puts "Błąd"
}
elsif ( b == nil || b < 1 || b > 5 ){
puts "Błąd"
}
else
case c
when 1
d=a+b
puts "#{d}"
when 2
d=a-b
puts "#{d}"
when 3
d=a*b
puts "#{d}"
when 4
d=a/b
puts "#{d}"
when 5
d=a%b
puts "#{d}"
else
puts "Coś poszło nie tak"
end

 

Po krótce te ify miały zabezpieczać przed wprowadzeniem błednych wartości, bo tak to reszta działa.

komentarz 23 grudnia 2017 przez Aluzja Nowicjusz (200 p.)

Brakuje jednego "end". Zamknąłeś case ale nie zamknąłeś wcześniejszego if, w którym znajduje się case.

A z takich innych, nie ważnych z punktu widzenia działania programu to:

- w Ruby nie jest konieczny nawias dla warunku po if

- nie są także potrzebne nawiasy klamrowe {}

- dobrą praktyką jest też stawianie spacji pomiędzy operacjami matematycznymi.
Zapis a + b / c jest łatwiejszy do czytania niż a+b/c

- bardzo pomocne jest stosowanie odpowiednich wcięć, które informują jakie części kodu są zagnieżdżone; wtedy łatwiej pamiętać o zamykających end'ach

Twój kod zapisany bardziej Ruby-way wyglądałby mniej więcej tak:

puts "Podaj dwie liczby"
a = gets.to_i
b = gets.to_i
puts "Wybierz operację
puts "- Dodawanie"
puts "- Odejmowanie"
puts "- Mnożenie"
puts "- Dzielenie"
c = gets.to_i
if a == nil || a < 1 || a > 5
  puts "Błąd"
elsif b == nil || b < 1 || b > 5
  puts "Błąd"
else
  case c
  when 1
    puts a + b
  when 2
    puts a - b
  when 3
    puts a * b
  when 4
    puts a / b
  when 5
    puts a % b
  else
    puts "Coś poszło nie tak"
  end
end

I w instrukcji dla użytkownika nie ma opcji "reszta z dzielenia, którą realizuje twój kalkulator po kliknięciu 5.


 

Podobne pytania

+1 głos
2 odpowiedzi 922 wizyt
pytanie zadane 25 lutego 2018 w Ruby przez modular Użytkownik (520 p.)
0 głosów
1 odpowiedź 398 wizyt
pytanie zadane 8 lipca 2016 w Ruby przez Piotr Matusik Początkujący (420 p.)
0 głosów
1 odpowiedź 141 wizyt
pytanie zadane 9 lipca 2023 w Ruby przez whiteman808 Obywatel (1,820 p.)

92,572 zapytań

141,422 odpowiedzi

319,645 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...