Úvod do programování 4
DESCRIPTION
Práce s textem; Základní koncepty programování a Ruby; Jednoduchá kvantitativní analýza textuTRANSCRIPT
Úvod do programování aneb Do nitra stroje
Karel Mina!íkP!EDNÁ"KA 4
Úvod do programování
Opakování1
Úvod do programování P!edná"ka 4
VYBAVENÍ
1. Konzole pro p#ímé zadání kódu
2. Editor
3. Dokumentace (!)
Úvod do programování P!edná"ka 4
ZÁKLADNÍ TYPY A OPERACE
1. $ísla
2. Texty (!et#zce)
3. Pole
4. Aritmetické operace
5. Komentá#e
6. Prom%nné
7. Podmínky
8. Smy&ky
Úvod do programování P!edná"ka 4
puts 1 + 1
! 2
puts "1" + "1"
! "11"
&íslovka " písmeno
puts (1 + 1).class
puts ("1" + "1").class
Datové typy
Úvod do programování P!edná"ka 4
Po&íta& ned%lá to, co chceme, aby d%lal.
Po&íta& d%lá p#esn% to, co mu !ekneme, aby d%lal.
Úvod do programování P!edná"ka 4
puts 1 + 1
puts "1" + "1"
puts 2 + 2 * 5
puts (2 + 2) * 5
puts "Ahoj" + "Sáro"
puts "Ahoj" + " " + "Sáro"
puts "Ahoj" + 2 (!íslo není "et#zec)
# puts "Ahoj" + 2 (Tento p"íkaz Ruby p"esko!í a nebude je provád#t)
puts "Nebudu ve $kole zlobit\n" * 10
Aritmetické operace
Úvod do programování
Operace s textem2
Úvod do programování P!edná"ka 4
Kdy! se "eho# Samsa jednou ráno probudil z nepokojn$ch sn%, shledal, !e se v posteli prom&nil v jak$si nestv%rn$ hmyz. Le!el na h#bet& tvrdém jak pancí#, a kdy! trochu nadzvedl hlavu, uvid&l své vyklenuté, hn&dé b#icho rozd&lené obloukovit$mi v$ztuhami, na jeho! vrcholu se sotva je't& dr!ela p#ikr$vka a tak tak !e úpln& nesklouzla dol%. Jeho (etné, vzhledem k ostatnímu objemu !alostn& tenké nohy se mu bezmocn& komíhaly p#ed o(ima.
Co se to se mnou stalo? pomyslel si. Nebyl to sen. Jeho pokoj, správn$, jen trochu p#íli' mal$ lidsk$ pokoj, spo(íval klidn& mezi (ty#mi dob#e znám$mi st&nami, Nad stolem, na n&m! byla rozlo!ena vybalená kolekce vzork% soukenného zbo!í - Samsa byl obchodní cestující -, visel obrázek, kter$ si nedávno vyst#ihl z jednoho ilustrovaného (asopisu a zasadil do p&kného pozlaceného rámu. P#edstavoval dámu, opat#enou ko!e'inovou (apkou a ko!e'inov$m boa, jak vzp#ímen& sedí a nastavuje divákovi t&!k$ ko!e'inov$ rukávník, v)n&m! se jí ztrácí celé p#edloktí.
Úvod do programování P!edná"ka 4
Kdy" se #eho! Samsa jednou ráno probudil z nepokojn$ch sn%, shledal, "e se v posteli prom&nil v jak$si nestv%rn$ hmyz.
text = File.read 'kafka_promena.txt'
puts text # Vypise text
puts text.upcase # Vypise text kapitalkami
puts text.reverse # Vypise text pozpatku
puts text.include? "otec" # Obsahuje text urcity vyraz?
puts text.include? "fenomenologie"
Práce s textem
Úvod do programování P!edná"ka 4
Kdy" se #eho! Samsa jednou ráno probudil z nepokojn$ch sn%, shledal, "e se v posteli prom&nil v jak$si nestv%rn$ hmyz.
text = File.read 'kafka_promena.txt'
puts text.length # Pocet vsech znaku v textu
puts text.delete(' ').length # Pocet znaku bez mezer
puts text.split("\n").length # Pocet radek
puts text.split(". ").length # Pocet vet
puts text.split(/\. |\? |! /).length # Presnejsi pocet vet Regularni vyrazy berou v uvahu vety koncici otaznikem, vykricnikem
puts text.split(' ').length # Pocet slov
puts text.split(' ').uniq.length # Pocet jedinecnych slov
puts text.split(' ').uniq.sort # Seznam jedinecnych slov usporadany
podle abecedy
Úvod do programování P!edná"ka 4
Kdy" se #eho! Samsa jednou ráno probudil z nepokojn$ch sn%, shledal, "e se v posteli prom&nil v jak$si nestv%rn$ hmyz.
text = File.read 'kafka_promena.txt'
puts text.gsub('%eho"', 'Franz') # Zamen v textu 'Rehor' za 'Franz'puts text.gsub('e', 'a') # Nahradi 'e' za 'a'
puts text.gsub('e', 'a').gsub('í','á'0.gsub('ou', 'ó').gsub('&', 'é').gsub('#', ''a').gsub('u', 'o')
Úvod do programování P!edná"ka 4
# Integer
1+1
2*2
9/3
5.times
5.upto 10
# String
"pokoj".upcase
"pokoj".include?
"pokoj".length
"pokoj".delete
"pokoj".split
# Array
[1, 2, 3].length
[1, 2, 3].last
[1, 2, 3].first
[1, 2, 3].sort
[1, 2, 3].uniq
[1, 2, 3].each
www.ruby-doc.org/docs/ProgrammingRuby
Úvod do programování P!edná"ka 4
DOMÁCÍ ÚKOL
text = File.read 'kafka_promena.txt'
Prostudujte si dokumentaci
Spo&ítejte, kolik normostran má Kafkova Prom#na
Úvod do programování
Základní koncepty3
Úvod do programování P!edná"ka 4
puts "Ahoj" + 2.to_s
puts "2 (áby".to_i + 2
P!etypování
Úvod do programování P!edná"ka 4
puts "Nebudu ve $kole zlobit\n" * 10
puts "Ahoj" + " " + "Sáro"
Polymorfie (na p!íklad# operátor$)
Úvod do programování P!edná"ka 4
a = 1
b = 2
c = a + b
puts c
name = "Duchcov"
puts "Vítá vás m#sto #{name}"
Prom#nnépromenne.rb
Úvod do programování P!edná"ka 4
jedna = 1 # Lokalni promenna$JEDNA = 1 # Globalni promenna
def dve jedna = 2 # Lokalni promenna uvnitr funkce $JEDNA = 2end
puts jedna# => 1puts $JEDNA# => 1
dve
puts jedna# => 1puts $JEDNA# => 2
Prom#nné a rozsah platnosti (scope)Prom%nné lokální, globální, t#íd, instancípromenne.rb
Úvod do programování P!edná"ka 4
a = Array.new
a = Array[ 1, 2, 3]
a = [ 1, 2, 3 ]
a = [ 'jedna', 'dve', 'tri' ]
a = %w{jedna dve tri}
a[0]
#=> 'jedna'
Slo%ené datové typy
Úvod do programování P!edná"ka 4
Slo%ené datové typy
0°C
4°C
8°C
11°C
15°C
8:00 9:00 10:00 11:00 12:00 13:00 14:00 15:00 16:00 17:00 18:00 19:00 20:00 21:00 22:00 23:00 24:00 1:00 2:00 3:00 4:00 5:00 6:00 7:00
Úvod do programování P!edná"ka 4
book = Hash.new( :jmeno => "Franz", :prijmeni => "Kafka", :nazev => 'Prom#na' )
book1 = { :jmeno => "Franz", :prijmeni => "Kafka", :nazev => 'Prom#na' }
book2 = { :jmeno => "Fernando", :prijmeni => "Pessoa", :nazev => 'Kniha neklidu' }
books = [book1, book2]
require 'pp'
pp books[0]
puts books[0][:nazev]
Slo%ené datové typy
Úvod do programování P!edná"ka 4
Slo%ené datové typy
Úvod do programování P!edná"ka 4
Slo%ené datové typy
police[3][10][:nazev]
Úvod do programování P!edná"ka 4
puts [1, 2, 3] + [4, 5]
puts [1, 2, 3].to_s
puts [1, 2, 3].to_s * 2
puts [1, 2, 3].to_s.to_i * 2
Polymorfie a p!etypování II
Úvod do programování P!edná"ka 4
2.to_s
"2 (áby".to_i
1.+(2)
File.open
Time.now
def pozdrav
puts "Ahoj!"
endpozdrav
def pozdrav(jmeno) # Argument/parametr funkce
puts "Vítaj, #{jmeno}!"
end
pozdrav('Honza')
Metody a funkcemetody.rb
Úvod do programování P!edná"ka 4
temperature = 25# temperature = '20° C'
if temperature.to_i < 0 then
puts "Vezmi si bundu, $álu a !epici!"else
puts "Vezmi si bundu!"
end
Podmínkypodminky.rb
Úvod do programování P!edná"ka 4
temperature = 25# temperature = '20° C'
if temperature.to_i < 0
puts "Vezmi si bundu, $álu a !epici!"elsif temperature.to_i > 0 && temperature.to_i < 20
puts "Vezmi si bundu!"
else
puts "Vezmi si tri!ko!"end
Podmínkypodminky.rb
Úvod do programování P!edná"ka 4
temperature = 25# temperature = '20° C'
case temperature.to_i
when -999..0
puts "Vezmi si bundu, $álu a !epici!" when 0..20
puts "Vezmi si bundu!"
else
puts "Vezmi si tri!ko!"end
Podmínkypodminky.rb
Úvod do programování P!edná"ka 4
input = gets.chomp
case input
when "kafka"
puts File.open('kafka.txt')
when "exit", "quit"
exit
when /.*posr.*/
puts "Ale no tak..."
when Fixnum
puts "S !ísly tento program nepracuje!" else
puts "Nerozumím p"íkazu: #{input}"end
Podmínkypodminky.rb
Úvod do programování P!edná"ka 4
temperature = 25# temperature = '20° C'
puts "Vezmi si plavky!" if temperature.to_i > 30
puts "P"ístup zamítnut!" unless user.is_admin?
Podmínky jako modifikátorypodminky.rb
Úvod do programování P!edná"ka 4
Logické (booleovské) operátory
Úvod do programování P!edná"ka 4
1.upto 10 do |number|
print number.to_s + '...'
endputs "\n"
x = 1
until x > 100
print x
x += 1
endputs "\n"
["jedna", "dve", "tri"].each do |slovo| puts "* " + slovo
end
Smy&ky a iterátorysmycky.rb
Úvod do programování P!edná"ka 4
require 'net/http'
server = 'www.lidovky.cz' # vs. www.neexistuje.cz nebo vytazeny sitovy kabel...
begin
response, data = Net::HTTP.new(server).get('/')
rescue Exception
puts "Nemohu se p"ipojit na server #{server}" # ...na!teme data ulo(ená na disku... # data = ...
end
puts data.to_s.scan(
/<div class="art opener"><h3><a href=".+">(.*)<\/a><\/h3>/).to_s
) if data
O"et!ení v'jimek (exceptions)vyjimky.rb
Úvod do programování P!edná"ka 4
input = gets.chomp
puts "Prosím? Tady je $patn# sly$et, vy "íkáte '#{input}'?"
puts "Zadejte cenu bez DPH:"
input = gets
puts input.to_i + 0.19 * input.to_i
temperature = 20 " temperature = '20 ºC'
Vstupvstup.rb
Úvod do programování P!edná"ka 4
SQL Injection
name = 'bob'
query = "SELECT * FROM customers WHERE username = '#{name}'";
# SELECT * FROM customers WHERE username = 'bob'
name = "' OR 1'"
query = "SELECT * FROM customers WHERE username = '#{name}'";
# SELECT * FROM customers WHERE username = '' OR 1''
Vstup a jeho o"et!enívstup.rb
O"et!ování v"ech vstup$ „zven&í“(typick' p!ípad je práv# SQL Injection)
Úvod do programování P!edná"ka 4
Prost' text? puts text.split(' ').uniq.sort
XML? <words><word>a</word><word>aby</word>
…
PDF?
Obrázek —(graf?
V'stup a jeho formátování
Úvod do programování P!edná"ka 4
text = File.read 'kafka_promena.txt'
Úvod do programování P!edná"ka 4
Kdy" se #eho! Samsa jednou ráno probudil z nepokojn$ch sn%, shledal, "e se v posteli prom&nil v jak$si nestv%rn$ hmyz.
text = File.read 'kafka_promena.txt'
# ---> A ted neco trochu jineho... Najdeme nejpouzivanejsi slovo :)
words = text.tr('-,();\'"', '').split(' ')
current_word = words.sort.first
word_counts = {}word_counts[current_word] = {}
count = 0
words.sort.each do |word| if current_word == word count += 1 else count = 1 current_word = word end
word_counts[word] = {:word => word, :count => count}end
nejpouzivanejsi = word_counts.sort.first # "Nejvetsi = prvni"
puts "Za!ínáme s " + nejpouzivanejsi[1][:word].to_s + "."
word_counts.sort.each do |word|
nejpouzivanejsi = word if word[1][:count] > nejpouzivanejsi[1][:count] end
puts "Nejpou(ívan#j$í slovo je „" + nejpouzivanejsi[1][:word] + "“ s " + nejpouzivanejsi[1][:count].to_s + " v&skyty."
Úvod do programování P!edná"ka 4
Kdy" se #eho! Samsa jednou ráno probudil z nepokojn$ch sn%, shledal, "e se v posteli prom&nil v jak$si nestv%rn$ hmyz.
text = File.read 'kafka_promena.txt'
# --->)... a co seznam slov podle frekvence pouziti?
puts "Seznam nejpou(ívan#j$ích slov v Kafkov# ‚Prom#n#‘:"
most_frequent_words = word_counts.values.collect { |word| [word[:count], word
[:word]] }
most_frequent_words.sort.reverse.each_with_index do |word, i|
puts "#{i+1}. #{word[1]}\t\t\t(#{word[0]} v&skyt*)"end
D%kuji!!