`
haiyang
  • 浏览: 70602 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

通过15个小例子学习ruby

阅读更多
以下都是从国外网站翻译过来,自己学习的时候总结了一下,希望对大家学习ruby有所帮助。
1. Problem: “Display series of numbers (1,2,3,4, 5….etc) in an infinite loop. The program should quit if someone hits a specific key (Say ESCAPE key).” 
 解决方案
  1. i = 0   
  2. loop { print "#{i+=1}, " }   

     虽然是一个很简单的问题,但我想着想着却觉得这个问题很有意思,原文中也没有给出很完美的答案,不知道谁有好的解决方法。

2. Problem: “Fibonacci series, swapping two variables, finding maximum/minimum among a list of numbers.”

解决方案
  1. #Fibonacci series   
  2. Fib = Hash.new|h, n| n < 2 ? h[n] = n : h[n] = h[n - 1] + h[n - 2] }   
  3. puts Fib[50]   
  4.     
  5. #Swapping two variables   
  6. x,y = y,x   
  7.     
  8. #Finding maximum/minimum among a list of numbers   
  9. puts [1,2,3,4,5,6].max   
  10. puts [7,8,9,10,11].min   
 

语法知识:

1.Hash。Hash在实例话的时候可以在new里边接受一个参数值,或者一个模块,它实际上不是hash对象的一个值,仅当在hash操作的时候找不到这个值对应的项的时候返回。

2.交换两个变量。

3.查询数组里最大最小的值,有专门的API。

 3. Problem: “Accepting series of numbers, strings from keyboard and sorting them ascending, descending order.”

 解决方案

  1. a = []   
  2. loop { break if (c = gets.chomp) == ‘q’; a << c }   
  3. p a.sort   
  4. p a.sort { |a,b| b<=>a }   

 

 语法:

  1. loop循环,及break的应用
  2. 从键盘读入字符 gets.chomp
  3. 将一项插入到数组 a << c
  4. 对于数组的正序和倒序的排序。

 

4. Problem: “Reynolds number is calculated using formula (D*v*rho)/mu Where D = Diameter, V= velocity, rho = density mu = viscosity Write a program that will accept all values in appropriate units (Don’t worry about unit conversion) If number is < 2100, display Laminar flow, If it’s between 2100 and 4000 display 'Transient flow' and if more than '4000', display 'Turbulent Flow' (If, else, then...)"

ruby 代码
  1. vars = %w{D V Rho Mu}   
  2.     
  3. vars.each do |var|   
  4.   print "#{var} = "  
  5.   val = gets   
  6.   eval("#{var}=#{val.chomp}")   
  7. end  
  8.     
  9. reynolds = (D*V*Rho)/Mu.to_f   
  10.     
  11. if (reynolds < 2100)   
  12.   puts "Laminar Flow"  
  13. elsif (reynolds > 4000)   
  14.   puts "Turbulent Flow"  
  15. else  
  16.   puts "Transient Flow"  
  17. end  

语法:

没有搞清楚vars = %w{D V Rho Mu}  这一句是什么意思。

5. Problem: “Modify the above program such that it will ask for ‘Do you want to calculate again (y/n), if you say ‘y’, it’ll again ask the parameters. If ‘n’, it’ll exit. (Do while loop) While running the program give value mu = 0. See what happens. Does it give ‘DIVIDE BY ZERO’ error? Does it give ‘Segmentation fault..core dump?’. How to handle this situation. Is there something built in the language itself? (Exception Handling)”

ruby 代码
  1. vars = { "d" => nil"v" => nil"rho" => nil"mu" => nil }   
  2.     
  3. begin  
  4.   vars.keys.each do |var|   
  5.     print "#{var} = "  
  6.     val = gets   
  7.     vars[var] = val.chomp.to_i   
  8.   end  
  9.     
  10.   reynolds = (vars["d"]*vars["v"]*vars["rho"]) / vars["mu"].to_f   
  11.   puts reynolds   
  12.     
  13.   if (reynolds < 2100)   
  14.     puts "Laminar Flow"  
  15.   elsif (reynolds > 4000)   
  16.     puts "Turbulent Flow"  
  17.   else  
  18.     puts "Transient Flow"  
  19.   end  
  20.     
  21.   print "Do you want to calculate again (y/n)? "  
  22. end while gets.chomp != "n"    

 

6.一个计算器的问题,代码太多。

7. Problem: “Printing output in different formats (say rounding up to 5 decimal places, truncating after 4 decimal places, padding zeros to the right and left, right and left justification)(Input output operations)”

ruby 代码
  1. #rounding up to 5 decimal pleaces   
  2. puts sprintf("%.5f", 124.567896)   
  3.     
  4. #truncating after 4 decimal places   
  5. def truncate(number, places)   
  6.   (number * (10 ** places)).floor / (10 ** places).to_f   
  7. end  
  8.     
  9. puts truncate(124.56789, 4)   
  10.     
  11. #padding zeroes to the left   
  12. puts ‘hello’.rjust(10,’0‘)   
  13.     
  14. #padding zeroes to the right   
  15. puts ‘hello’.ljust(10,’0‘)   
  16.     
  17.    

语法:

 

 

  1. 格式化sprintf。
  2. 左填充和右填充

  8. Problem: “Open a text file and convert it into HTML file. (File operations/Strings)” 

这段代码比较长,其中有些东西还是不太理解,还要看看正则表达式,谁能告诉我下边的代码是怎么执行的吗:

  1. rules = {‘*something*’ => ‘something’,      
  2.          ’/something/’ => ‘something’}      
  3.        
  4. rules.each do |k,v|      
  5.   re = Regexp.escape(k).sub(/something/) {"(.+?)"}      
  6.   doc.gsub!(Regexp.new(re)) do     
  7.     content = $1     
  8.     v.sub(/something/) { content }      
  9.   end     
  10. end   

9. Problem: “Time and Date : Get system time and convert it in different formats ‘DD-MON-YYYY’, ‘mm-dd-yyyy’, ‘dd/mm/yy’ etc.”

ruby 代码
  1. time = Time.now   
  2. puts time.strftime("%d-%b-%Y")   
  3. puts time.strftime("%m-%d-%Y")   
  4. puts time.strftime("%d/%m/%Y")   

 10. Problem: “Create files with date and time stamp appended to the name”

ruby 代码
  1. #Create files with date and time stamp appended to the name   
  2. require 'date'   
  3.     
  4. def file_with_timestamp(name)   
  5.   t = Time.now   
  6.   open("#{name}-#{t.strftime('%m.%d')}-#{t.strftime('%H.%M')}", 'w')   
  7. end  
  8.     
  9. my_file = file_with_timestamp('pp.txt')   
  10. my_file.write('This is a test!')   
  11. my_file.close   

 

11. Problem: “Input is HTML table. Remove all tags and put data in a comma/tab separated file.”

 12. Problem: “Extract uppercase words from a file, extract unique words.”

  1. open('some_uppercase_words.txt').read.split().each { |word| puts word if word =~ /^[A-Z]+$/ }   
  2.     
  3. words = open(some_repeating_words.txt).read.split()   
  4. histogram = words.inject(Hash.new(0)) { |hash, x| hash[x] += 1; hash}   
  5. histogram.each { |k,v| puts k if v == 1 }  

语法:(对于第四行还是不太懂,谁能给我讲一下呢)

1.打开文件,读取文件,split(),正则表达式匹配。

 13. Problem: “Implement word wrapping feature (Observe how word wrap works in windows ‘notepad’).”

ruby 代码
  1. input = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."  
  2.   
  3.   
  4. def wrap(s, len)   
  5.   result = ''  
  6.   line_length = 0   
  7.   s.split.each do |word|   
  8.     if line_length + word.length + 1  < len   
  9.       line_length += word.length + 1   
  10.       result += (word + ' ')   
  11.     else  
  12.       result += "\n"  
  13.       line_length = 0   
  14.     end  
  15.   end  
  16.   result   
  17. end  
  18.     
  19. puts wrap(input, 30)   

 

14. Problem: “Adding/removing items in the beginning, middle and end of the array.”

ruby 代码
  1. x = [1,3]   
  2.     
  3. #adding to beginning   
  4. x.unshift(0)   
  5. print x   
  6. print "\n"  
  7.     
  8. #adding to the end   
  9. x << 4   
  10. print x   
  11. print "\n"  
  12. #adding to the middle   
  13. x.insert(2,2)   
  14. print x   
  15. print "\n"  
  16. #removing from the beginning   
  17. x.shift   
  18. print x   
  19. print "\n"  
  20. #removing from the end   
  21. x.pop   
  22. print x    
  23. print "\n"  
  24. #removing from the middle   
  25. x.delete(2)   
  26. print x   
  27. print "\n  

 

15. Problem: “Are these features supported by your language: Operator overloading, virtual functions, references, pointers etc.”

Solution: Well this is not a real problem (not in Ruby, at least). Ruby is a very high level language ant these things are a must :) .

分享到:
评论
4 楼 haiyang 2007-10-19  
ruby很好用,越用越觉得很人性化,可能上手容易,但是熟练比肩难
3 楼 sandybuster 2007-10-18  
不知道Ruby这种语法是好是坏,对初学者要求就是记住越多的语法越好吧
2 楼 winwnx 2007-10-17  
ruby真的很热门了.

这真是有些奇迹了.
1 楼 magicgod 2007-10-17  
%W 是字符串数组,主要目的是少打几个引号。那个例子是生成动态变量。

相关推荐

    Ruby-一个Ruby的例子

    Ruby是一种面向对象的、动态类型的编程语言,以其简洁、优雅的语法和强大的元编程能力而闻名。在这个"Ruby-一个Ruby的例子...通过深入学习和实践这个Ruby例子,你将更好地理解它的语法、面向对象特性和丰富的库支持。

    Ruby入门例子

    通过以上步骤,我们不仅成功地创建了一个简单的Rails应用程序,而且还学习了如何在项目中使用MySQL数据库。这个例子对于刚接触Ruby on Rails的新手来说是非常有帮助的,它可以帮助理解整个开发流程。

    ruby+selenium-webdriver测试--第一个例子源代码

    在这个“ruby+selenium-webdriver测试--第一个例子源代码”中,我们将探讨如何使用Ruby和Selenium-Webdriver实现自动化测试的初步步骤。 首先,我们需要安装必要的库。确保已经安装了Ruby,并通过RubyGems来安装...

    Ruby小例子(源代码)

    标题中的“Ruby小例子(源代码)”表明这是一个关于Ruby编程语言的学习资源,包含了多个示例源代码文件。Ruby是一种面向对象的、动态类型的编程语言,由Yukihiro Matsumoto(松本行弘)创建,它强调简洁性和可读性,...

    ruby 中文教程(带例子代码)

    这个"Ruby中文教程(带例子代码)"是一个非常适合初学者入门的学习资源,它以中文讲解,降低了学习门槛,同时提供了丰富的实例代码,使理论知识与实践操作相结合。 首先,我们来看“Ruby语言入门教程v1.0.pdf”。这...

    Ruby Ruby简单例子 包含说明和环境配置

    Ruby Ruby简单例子 包含说明和环境配置 【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM...

    Ruby on Rails入门例子

    在"Ruby on Rails入门例子"中,你可能会学习如何创建一个简单的Rails应用。首先,你需要安装Ruby和Rails环境,然后使用`rails new`命令生成一个新的项目。接下来,会介绍如何创建控制器、模型和视图。例如,创建一个...

    成功搭建Ruby运行环境为您展开Ruby体验大门

    只有当运行环境搭建完成后,才能找到符合以往开发习惯的 IDE 工具、看一看入门的例子、学习语言相关的知识。搭建 Ruby 运行环境是学习 Ruby 的第一步骤。 Ruby 运行环境的搭建 在 Linux 环境下,我们可以使用 apt-...

    Ruby工具 windows 环境

    在这个例子中,我们有“rubyinstaller-1.9.1-p430.exe”文件,这是一个针对Windows的Ruby安装程序。安装过程非常直观,只需双击该exe文件,按照向导指示进行即可。在安装过程中,记得勾选添加Ruby到系统路径的选项,...

    ruby元编程.pdf

    Ruby元编程是Ruby编程语言中的一个重要特色,它指的是Ruby语言允许程序员在运行时对类、方法和变量...通过阅读这本书,读者将能够找到一个有效学习Ruby元编程技术的方法,并将这些复杂的技术应用到实际的编程实践中去。

    Ruby-RubyGraphVizGraphViz绘图工具的Ruby接口

    以下是一个简单的例子: ```ruby require 'graphviz' g = GraphViz.new(:G, type: :digraph) # 添加节点 node1 = g.add_nodes("node1") node2 = g.add_nodes("node2") # 添加边 g.add_edges(node1, node2) # ...

    Ruby-RubyJMeter一个基于Ruby的DSL用于构建JMeter测试计划

    通过学习Ruby-JMeter,你不仅可以提高测试脚本的可读性和可维护性,还可以更高效地构建和维护复杂的性能测试场景。 在压缩包`ruby-jmeter-master`中,你可能会找到项目的源代码、文档、示例脚本等资源。通过查看和...

    Ruby on Rails入门经典-例子

    Ruby on Rails,简称RoR,是由David Heinemeier Hansson基于Ruby语言开发的一款开源Web应用程序框架,它遵循MVC(模型...学习过程中,你可以逐步理解Rails的优雅设计和强大功能,为成为一个熟练的Rails开发者奠定基础。

    Ruby_learning_教程-中文版

    对于Rails开发者来说,学习Ruby不仅能帮助他们理解应用程序代码(包括Rails框架自身的代码),而且还可以更深入地开发Rails应用,熟悉Rails源代码,参与相关讨论,甚至提交bug报告和代码补丁。Ruby也为进行应用程序...

    新手 学Ruby 开发 一些简单例子

    (Yukihiro "Matz" Matsumoto)在1995年创建,Ruby 语言的设计目标是让程序员的生活更愉快。...文本编辑器:选择一个文本编辑器来编写 Ruby 代码,例如 Visual Studio Code、Sublime Text 或 Atom。 Ruby 基础

    Ruby Data-Processing ruby数据处理

    文件1484234731.epub和1484234731.pdf可能包含了这本书的电子版,你可以通过它们来学习和参考。记住,实践是掌握这些概念的关键,尝试在自己的项目中应用Ruby的Map、Reduce和Select,你将更好地理解和掌握数据处理的...

    Ruby基础教程(第5版)1

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

Global site tag (gtag.js) - Google Analytics