Ruby学习笔记:语法编程练习

Ruby的一些理解

定义函数:使用 def 关键字即可随时定义,不需要在类里面
代码块:类似于 block,闭包
Mixin:混入,可以将属性、方法等封装为模块,在别的类里调用。可实现多继承。
开放类:可以拓展、重写已有类的方法,类似于继承
元编程:可以自己定义语言,编写能写程序的程序。

Ruby 编程练习

ruby最大的优势就是语法糖丰富、开发效率高,但与之相对应的,丰富的api就意味着需要更多地去记忆。

1、基本语法练习:猜数字游戏

puts "欢迎来玩最好玩的猜数字游戏!你叫什么?"
$name = STDIN.gets
puts "Hi "+$name+"Here we go!"
 
$range = 0
reset = true
$play = 1
 
puts "请输入猜测数字的范围:"
while $range.to_i == 0
    $range = STDIN.gets
    puts '数字不合法!' if $range.to_i == 0
end
 
while $play.to_i == 1
    if reset
        myNum = rand($range.to_i)
        reset = false
    end
 
    puts "请输入一个#{$range}以内的数字:"
    $userNum = STDIN.gets
 
    if $userNum.to_i > myNum
        puts '+++++ 猜大了'
    elsif $userNum.to_i == myNum
        puts '!!!!!猜对了~!!'
        reset = true
        puts '开始新的一局?' + '继续,则输入1,结束,则点击任意键'
        $play = STDIN.gets
    else
        puts '-----猜小了'
    end
end
 
puts '谢谢玩耍~'

2、数组操作练习:遍历数组

# 有一个数组,包含16个数字。仅用 each 方法打印数组中的内容,一次打印 4 个数字。然后,用可枚举模块的 each_slice 方法重做一遍。
 
# 仅用 each:
puts "方案一:"
a = (1..16).to_a
a.each do |i|
    index = a.index(i)
    if index % 4 == 0
        puts "#{a[index]}, #{a[index + 1]}, #{a[index + 2]}, #{a[index + 3]}"
    end
end
 
# 仅用 each:
puts "方案二:"
i = 0
(1..16).to_a.each do |n|
  i += 1
  print i % 4 == 0 ? "#{n}\n" : "#{n},"
end
 
# 可枚举模块each_slice:数组里已包含该模块
puts "方案三:"
(1..16).to_a.each_slice(4) {|i| p i} 

3、树、类定义、散列表练习:支持散列表构建的数

 # 构造一棵树,使其接收散列表和数组嵌套的结构,并能把节点打印出来
 
class Tree
    attr_accessor :children, :name
 
    def initialize(treeSet)
        @children = []
        @name = treeSet.keys
        treeSet.each_value do |childrenSet|
            unless childrenSet.empty?
                @children.push(Tree.new(childrenSet))
            end
        end
    end
 
    def visit_all(&block)
        visit &block
        children.each {|c| c.visit_all &block}
    end
 
    def visit(&block)
        block.call self
    end
end
 
set = {'grandpa' => { 'dad' => {'child 1' => {}, 'child 2' => {} }, 'uncle' => {'child 3' => {}, 'child 4' => {} } } }
 
family = Tree.new(set)
puts "visit a node"
family.visit {|person| puts person.name}
 
puts "visit entire tree"
family.visit_all {|person| puts person.name}

4、文件读取、文本关键字搜索:

# 读取文本文档,搜索出现了指定关键字的文本行,将行号及行内容打印出来
  
def my_grep
    puts "输入想搜索的关键字:"
    # gets方法,会取输入缓存区所有字符,包含换行符,需去除
    $keyword = STDIN.gets.strip 
    index = 0;
    File.foreach("data") do |line|
        index = index + 1
        if line.include? $keyword
            puts "#{index}: #{line}"
        end
    end
end
 
my_grep


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值