`
mynaAo7I
  • 浏览: 12397 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

Ruby入门学习之三

    博客分类:
  • Ruby
阅读更多

  ~_~学习Ruby第三天。主要内容为 Exception、Numeric类、Array类、String类。

    1 Exception

puts("-----------------------begin rescue end--------------------")
#获取文件的行数、单词数、字节数
ltotal = 0				
wtotal = 0
ctotal = 0
ARGV.each{|file|
  begin 
    input = open(file)
    l = 0
    w = 0
    c = 0
    while line = input.gets
      l += 1
      c += line.size
      line.sub!(/^\s+/,"")
      ary = line.split(/\s+/).size
      w += ary.size
    end
    input.close
    printf("%8d %8d %8d %s\n",l,w,c,file)
    ltotal += l
    ctotal += c
    wtotal += w
  rescue => ex
    print ex.message,"\n"
  end
}
printf("%8d %8d %8d %s\n",ltotal,wtotal,ctotal,"total")
puts("-----------------------begin rescue ensure end--------------------")
#copy操作
def copy(from,to)
  src = open(from)
  begin 
    dst = open(to,"w")
    data = src.read
    dst.write(data)
    dst.close
  rescue 
  ensure
    src.close
  end
end
#read操作
def read(file)
  begin 
    input = open(file)
    while line = input.gets
      print line
    end
  rescue 

  ensure
    input.close
  end
end
copy("a.txt","b.txt")
read("b.txt")
puts "\n"
p n = Integer("abc") rescue 0
p n = Integer("1") rescue 0
puts("-----------------------catch throw--------------------")
def test_throw
  throw :test
end

catch(:test){
  puts "aaa"			#会输出
  test_throw
  puts "bbb"			#不会输出
}

catch(:exit){
  val = 10
  loop{
    puts "外层循环"
    loop{
      val -= 1
      if val == 0
        throw :exit
      end
      print "内层循环",val,"\n"
    }
  }
}

   Ruby的Exception处理的begin~rescue~ensure~end部分与java的try~catch~finally相似

   不同之处在于Ruby的throw、catch有点像goto语句

 

    2 Numeric

 

puts("-----------------------Integer--------------------")
p 2 ** 1000				#**表示幂乘
puts("-----------------------数值常数-------------------")
p 1_23_45
p 0x10				#十六进制
p 010				#八进制
p 0b10				#二进制
p 0d10				#十进制
p 10				#十进制
p 1_234.0e-4			#浮点数
p ?a				#a的ASCII码
p ?\t				#TAB键的ASCII码
p ?\C-a				#Ctrl+a的指令码
puts("-----------------------练习------------------------")
def cels2fahr(num)
  num * 9 / 5.0 + 32
end
p cels2fahr(23)			#=>73.4

def fahr2cels(num)
  (num - 32) * 5.0 / 9.0
end
p fahr2cels(73.4)		#=>23.0
for i in 1..100
  printf("%d %f\n",i,fahr2cels(i))
end

def dice(m)
  rand(m) + 1
end
p dice(6)

def prime?(num)
  if num == 2 || num ==3 || num == 5
    return true
  end
  j = Math.sqrt(num).to_i
 
  for i in 2..j
    if num % i ==0
      return false
    end
  end
  
  if i >= j
    return true
  end
end
p prime?(6)

    Numeric类的架构为 Numeric ->Integer + Float, Integer->Fixnum + Bignum

 

 

   3 Array

=begin 
2012-5-8 18:08
=end
puts("-----------------------建立数组--------------------")
a = Array.new
p a
a = Array.new(5)
p a
a = Array.new(5,"ruby")
p a 

lang = %w(abc def hi)
p lang
lang = %w<abc def hi>
p lang 
lang = %w|abc def hi|
p lang

color_table = {"white" => "#FFF","black" => "#000"}
p color_table.to_a

p "abc def ghi jkl mno pqr stu".split()
puts("----------------------索引的用法---------------------")
alpha = ["a","b","c","d","e"]
p alpha[2]				#检索一个元素
p alpha[2..4]				#检索多个连续元素
p alpha[2,3]				#检索多个连续元素

alpha[2] = "z"				#修改一个元素
p alpha
alpha[2..4] = ["x","y","z"]		#修改多个连续元素
p alpha
alpha[2,3] = ["X","Y","Z"]		#修改多个连续元素
p alpha

alpha[2,0] = ["A","B","C"]		#插入元素
p alpha

alpha = %W(a b c d e f)
p alpha.values_at(1,3,5)		#多个索引建立数组
puts("--------------------集合操作数组-----------------------")
set01 = [1,2,3,4,5]
set02 = [1,2,3]
p set01 & set02				#集合交集
p set01 | set02				#集合并集
p set01 - set02				#集合差
p set01 + set02				#集合连接
puts("-------------------list操作数组------------------------")
stack = [1,2,3,4,5]
p stack.push(6)
p stack.pop
p stack.last
p stack.unshift(0)
p stack.shift
p stack.first
puts("------------------数组主要方法-------------------------")
=begin 
数据加入数组
=end
a = [1,2,3,4,5]

a.unshift(0)				#前端加入元素
p a

a.push(6)				#后端加入元素
p a
a << 6
p a

a.concat([7,8])				#连接两个数组 破坏性方法
p a
p a + [7,8]				#连接两个数组 非破坏性方法

a[0..2] = 9
p a
a[0..2] = [1,2]
p a
=begin 
删除数组元素
=end
a = [1,nil,2,nil,3,4,5]
b = a
a.compact!				#破坏性方法
p a
p b

a = [1,nil,2,nil,3,4,5]			#非破坏性方法
b = a
p a.compact
p b

a = [1,2,3,3,4]
a.delete(3)
p a
a.delete_at(2)
p a
a.delete_if{|item|
  item >= 2
}
p a

a = [1,2,3,4]
a.slice!(0,2)
p a

a = [1,2,3,2,2]
a.uniq!
p a

a = [1,2,3,4]
a.shift
p a 
a.pop
p a
=begin 
替换数组元素 
=end
a = [1,2,3,4,5]
p a
a.collect!{|item|
  item * 2
}
p a
a.map!{|item|
  item / 2
}
p a

a.fill(9,1..3)
p a 
a.fill(8,1,3)
p a
a.fill(7,1)
p a
a.fill(0)
p a

a = [[1,2],[3,[4,5]],6]
a.flatten!
p a

a.reverse!
p a

a.sort!
p a

=begin 
小心初始化
=end
a = Array.new(3,[0,0,0])
a[0][1] = 1
p a					#=>[[0, 1, 0], [0, 1, 0], [0, 1, 0]]

a = Array.new(3){
  [0,0,0]
}
a[0][1] = 1
p a					#=>[[0, 1, 0], [0, 0, 0], [0, 0, 0]]
#并行处理多个数组 zip 方法
a1 = [1,2,3]
a2 = [11,22,33]
a3 = [111,222,333]
result = []
a1.zip(a2,a3){|a,b,c|
  result << a + b + c
}
p result
puts("--------------------练习-------------------------")
a = Array.new(100){|index|
  index + 1
}
p a
b = a.collect{|item|
  item * 100
}
p b

c = a.reject{|item|
  item % 3 != 0
}
p c
p a
a.reverse!
p a
a.sort!{|x,y|
  x <=> y
}
p a
a = a.sort_by{|i|
  -i
}
p a

a = [1,2,"a",3," "]
result = 0
a.each{|item|
  if Numeric === item
    result += item
  end
}
p result

a = Array.new(100){|i|
  rand(100) + 1
}
p a

ary = Array.new(100){|i|
  i + 1
}
result = Array.new
10.times{|i|
  result << ary[(i * 10)..(i * 10 + 9)]
}
p result
puts("-----------------------------")
def cal(num1,num2)
  result = []
  num1.size.times{|i|
    result << num1[i] + num2[i]
  }
  return result
end
def sum_array(num1,num2)
  if num1.size < num2.size
    cal(num1,num2)
  else
    cal(num2,num1)
  end
end
p sum_array([1,2],[3,4,5])
p sum_array([1,2,2,8],[3,4,5])
puts("-----------------------------")
def fun(ary)
  ary_size = ary.size
  if ary_size % 2 != 0
    return false
  end
  stack = []
  ary.each{|item|
    if item == "{" || item == "["
      stack.push(item)
      p stack
    else 
      s = stack.pop
      if item == "}" && s != "{" || item == "]" && s != "["
        return false
      end
      
    end
    
  }
  p stack.size 
  if stack.size == 0 
    return true
  else 
    return false
  end

end

p fun(["{","}"])
p fun(["{","]","[","}"])

  这部分需要注意的是 破坏性方法 与 非破坏性方法

  所谓 破坏性方法指的是该方法会改变原来的对象,指向该对象的所有引用调用该对象时已经不再为原来的对象。Ruby中一般方法后面加有!均为破坏性方法。

   还有需要注意的是 迭代器部分

Array的迭代器有collect,map(功能与collect一样),each,都是对数组中元素一一进行操作,非下标。

Array.new(100){|i|i + 1}中的i为下标。

 

4 String

 

=begin 
字符串操作
=end
#建立字符串方法
moji = "字符串"
str1 = "这也是#{moji}"	#=>"这也是字符串"
p str1
str2 = '这也是#{moji}'	#=>"这也是#{moji}"
p str2
desc = %Q{Ruby "dsds"}
p desc
str = %q{dds'ds'}
p str

10.times{|i|
  10.times{|j|
    print <<"EOB"
i: #{i}
j: #{j}
i * j = #{i * j}
EOB
  }
}
#使用 Here Document(嵌入文档)
print <<"EOB"
dsda
12
EOB

#获取字符串长度
p "abc".length		#返回字节数
p "abc".size		#返回字节数
p "中国".split(//e).size #返回文字数

#检查字符串长度是不是0
p "".empty?		#true
p "foo".empty?		#false

colum = "This,is,a,big,mistake".split(/,/)
p colum
p colum.to_s

str = "This is a big mistake".unpack("a10a2a*")
p str

a = "hello"
b = "world"
c = a
a = a + b		#建立了新对象
p a			#a指向了新的对象
p c			#c所指向的对象没有变

a = "hello"
b = "world"
c = a
a << b			#并没有建立新对象
p a			#a还是指向原有的对象
p c			#c也是

str = "abcd"
p str[0]
p str[0].chr
p str[0..2]
s = "甲乙丙丁"
p s.split(//e)[0]

str = "abcd"
p str.chop		#=>"abc" chop 不管如何都会删除最后一个字符
p str.chomp		#=>"abcd"chomp 只会删除行尾的换行字符
str = "abcd\n"
p str.chop		#=>"abcd"
p str.chomp		#=>"abcd"

begin 
  file = open(ARGV[0])
  while line = file.gets
    line.chomp!
    print line
  end
rescue 
  
ensure
  file.close
end

#字符串取代 sub只取代第一次遇到的,gsub全部
str = "aaaaaaaa"
p str.sub("aa","12")	#=>"12aaaaaa"
p str.gsub("aa","12")	#=>"12121212"

#查找字符串 index从左往右 rindex从右往左
#返回值为首次的下标
str = "ababababcdcd"
p str.index("abab")	#=>0
p str.rindex("abab")	#=>4
#String与Array共有的方法
str = "abc"
str[1..3] = "C"
p str

str = "Hello,Ruby."
p str.slice!(-1).chr
p str.slice!(5..5)
p str.slice!(0,5)
p str

a = "123"
p a + "456"
p a
p a.concat("78")
p a

p a.delete!("1289")	#delete方法如果参数中含有字符串中没有的字符不会报错
p a
p a.reverse

str = " aa bb cc "
p str.strip!		#=>"aa bb cc"

str = "Ruby Language"
p str.upcase		#=>"RUBY LANGUAGE"
p str.downcase		#=>"ruby language"
p str.swapcase		#=>"rUBY lANGUAGE"
p str.capitalize	#=>"Ruby language"
#tr方法可以一次性替换多个字符 
p "abcdefg".tr("b","B")
p "abcdefg".tr("be","BE")
p "abcdefg".tr("a-d","A-D")
puts("----------------------------练习--------------------")
str = "Ruby is an object oritented programming language"
p ary = str.split()
p ary.sort
p ary.sort_by{|i|
  i.upcase
}
def begin_upcase(str)
  ary = str.split()
  result = ""
#  str.slice!(0..str.size)
  ary.collect!{|item|
     result << item.capitalize << " "
  }
  return result.to_s.chop!
end

p begin_upcase(str)

def cal_aph(str)
cal = Array.new(55,0)
for i in 0..str.size - 1
 
  if " " == str[i].chr
    cal[0] += 1
  
  elsif ('A'..'Z') === str[i].chr
    cal[str[i] - 64] += 1
  elsif ('a'..'z') === str[i].chr
    cal[str[i] - 69] += 1
  end
end

for i in 0..54
  if cal[i] != 0
    if i == 0
      print "' ':"
    elsif i <= 27
      print ("'",(i + 64).chr,"':")
    else
      print ("'",(i + 69).chr,"':")
    end
    cal[i].times{
        print("*")
      }
    print("\n")
  end
end
end

cal_aph(str)
#不用Numeric提供的方法将"1234"转化为1234
def num2astrisk(str)
  n = str.size
  result = 0
  for i in 0..n-1
    temp = 1
    (n - i - 1).times{
      temp *= 10
    }
    result += (str[i].to_i - 48) * temp
  end
  result.times{
    print "*"
  }
  return result
end
p num2astrisk("123")

#注意点
=begin 
str[i]返回的是数值
因此字符转化为数值
可以使用 Integer("1"),也可以减去相应的ascii码值
=end
p Integer("2")		#=>2

  

String类和Array类 细节问题很多。两者有一些相似的方法,两者可以进行相互的转化。:)

1
2
分享到:
评论

相关推荐

    Ruby基础和特点,Ruby入门学习资料.pdf

    Ruby基础和特点,Ruby入门学习资料.pdf

    Ruby入门教程中文PDF 附实例

    总之,无论你是对编程感兴趣的新手,还是想扩展技能树的开发者,这份“Ruby入门教程中文PDF 附实例”都将是你宝贵的参考资料。通过学习,你不仅可以掌握Ruby的基础知识,还能体验到编程的乐趣和效率。

    Ruby入门学习案例.md

    Ruby入门学习案例(任务)

    ruby学习的源码

    通过深入学习这些内容,初学者不仅可以掌握Ruby的基础,还能熟悉Rails的开发流程,进一步提升Web开发能力。同时,不断实践和阅读优秀的源码是提升编程技能的关键,因此这份资料包对于Ruby学习者而言无疑是宝贵的财富...

    Ruby基础教程(第5版)1

    《Ruby基础教程(第5版)》是一本由日本...总的来说,《Ruby基础教程(第5版)》是一本全面、易懂且充满乐趣的Ruby学习资料,无论你是编程新手还是希望深入理解Ruby的开发者,都可以通过这本书开启或深化你的Ruby之旅。

    ruby基础学习资料

    这个“ruby基础学习资料”压缩包很显然是为那些想要入门或者深入理解Ruby的人准备的。让我们详细探讨一下Ruby的基础知识。 1. **变量与数据类型**: Ruby支持五种基本的数据类型:符号(Symbol)、字符串(String...

    ruby基础教程(中文第四版).epub

    排班精美,图文清晰。是市面上最适合初学者入门的 Ruby 教程,由 ruby 创始人亲自编写。...本书适合Ruby初学者学习参考, 有一定Ruby编程基础的读者若想再回顾一下Ruby的各知识点, 本书也能提供不少帮助。

    ruby入门到精通

    这本书“Ruby入门到精通”显然旨在引导初学者逐步掌握Ruby语言。以下是一些关键知识点,它们可能是书中涉及的内容: 1. **基础语法**:包括变量(本地、实例、类和全局变量)、常量、符号、字符串、数字、数组和...

    ruby中文教程,从基础到深入的让你学习ruby

    在学习Ruby的过程中,你还需要了解一些工具,如Ruby的解释器irb(交互式Ruby环境)和ri/rdoc(Ruby文档工具),它们有助于调试和理解代码。版本管理工具如RVM(Ruby Version Manager)和rbenv可以帮助你管理多个Ruby...

    Ruby相关入门教程网址

    总的来说,这份Ruby入门教程应该能帮助初学者建立起对Ruby语言的全面认识,从基础语法到高级特性,再到实际开发中的工具使用,为进入Ruby世界提供了一条清晰的学习路径。通过深入学习和实践,读者将能够运用Ruby进行...

    ruby入门书籍

    《Ruby入门书籍》可能是一本详细介绍Ruby编程语言的基础教程。根据提供的文件名,我们可以推测这本书籍可能包含了两个部分:中文文档和"The Ruby Way"的翻译或解读。 "ruby中文文档.chm"可能是对Ruby语言的中文详细...

    关于ruby学习的资料

    Ruby的学习资源丰富多样,包括书籍、在线教程、社区论坛等,帮助初学者和进阶者深入理解其语法特性、编程思想以及实践应用。 "trap.chm"文件可能是一个帮助文档,通常用于存储各种信息和指南。在Ruby学习中,这样的...

    Ruby语言入门教程v1.0

    《Ruby语言入门教程v1.0》是一份详尽的指南,旨在为初学者提供一个易于理解的Ruby语言学习路径。下面,我们将深入探讨该教程所涵盖的关键知识点,特别是其标题和描述中提及的核心概念。 ### 1. 编程语言的发展简史 ...

    Ruby 基础语法 视频教程1

    学习这些基础概念是理解Ruby编程的关键。通过`ruby-4-variables.mp4`和`ruby-5-variables-rules.mp4`,你可以深入理解变量的用法和规则,而`ruby-6-expression.mp4`将帮助你掌握如何在Ruby中构建和使用表达式。这些...

    Python & Ruby 学习

    标题中的“Python & Ruby 学习”表明了这个压缩包文件包含了与这两种编程语言学习相关的资源。Python 和 Ruby 都是流行的高级编程语言,广泛应用于Web开发、数据分析、自动化脚本等多个领域。以下是对这两个语言的...

    Ruby基础教程,RUBY入门必备啊~

    Ruby是一种面向对象的编程...这个入门教程对于初学者来说是非常宝贵的资源,它将帮助读者快速掌握Ruby的基础知识,并为深入学习和实践打下坚实的基础。通过打印文档,读者可以在离线环境下随时查阅,方便学习和参考。

    Ruby基础语法经典学习PPT教程

    Ruby基础语法经典学习PPT教程. 网上关于ruby的PPT教程不太多,这个个人觉得还可以。

Global site tag (gtag.js) - Google Analytics