diff --git a/01-hello.rb b/01-hello.rb index e0e7bbf..36af2aa 100644 --- a/01-hello.rb +++ b/01-hello.rb @@ -1,8 +1,9 @@ # 题目: 输入名字,输出 "Hello, 名字" print "请输入你的名字,然后按 Enter: " + your_name = gets # ... -puts "(请替换成最后的答案)" \ No newline at end of file +puts "Hello, #{your_name}" diff --git a/02-variable.rb b/02-variable.rb index a5a4753..cb64515 100644 --- a/02-variable.rb +++ b/02-variable.rb @@ -2,6 +2,10 @@ a = 1 b = 2 +c = a +a = b +b = c + puts "a 是 #{a}" puts "b 是 #{b}" @@ -10,4 +14,3 @@ puts "a 应该是 2,现在是 #{a}" puts "b 应该是 1,现在是 #{b}" - diff --git a/03-triangle.rb b/03-triangle.rb index fafec03..b9139be 100644 --- a/03-triangle.rb +++ b/03-triangle.rb @@ -6,6 +6,7 @@ print "请输入直角三角形的底边,然后按 Enter: " b = gets +c = a.to_f * b.to_f / 2 # ..... -puts "直角三角形的面积是: _________" \ No newline at end of file +puts "直角三角形的面积是: #{c}" diff --git a/04-pizzas.rb b/04-pizzas.rb index 4c2521f..2425da0 100644 --- a/04-pizzas.rb +++ b/04-pizzas.rb @@ -6,7 +6,10 @@ print "请输入有多少人要吃,然后按 Enter: " people = gets +a = pizzas.to_f / people.to_i + +b = pizzas.to_f % people.to_i # ..... -puts "每人可分得几片: _________ 片" -puts "还剩下几片: _________ 片" \ No newline at end of file +puts "每人可分得几片: #{a.floor} 片" +puts "还剩下几片: #{b} 片" diff --git a/05-bmi.rb b/05-bmi.rb index 67efdff..7170dad 100644 --- a/05-bmi.rb +++ b/05-bmi.rb @@ -10,8 +10,18 @@ print "请输入您的身高(厘米),然后按 Enter: " height = gets +bmi = weight.to_f/(height.to_f * height.to_f)*10000 + +if bmi < 18.5 + result = "过轻" +elsif bmi >= 24 + result = "过重" +else + result = "正常" +end + # ..... -puts "您的 BMI 是: _________" +puts "您的 BMI 是: #{bmi}" -puts "您的 BMI 结果是: _________(过轻或正常或过重)" \ No newline at end of file +puts "您的 BMI 结果是: #{result}" diff --git a/06-interger-positive.rb b/06-interger-positive.rb index a240f5f..a6de34c 100644 --- a/06-interger-positive.rb +++ b/06-interger-positive.rb @@ -3,8 +3,28 @@ print "请输入一个整数,然后按 Enter: " x = gets +y = x.to_i + +if y > 0 + a = "正数" + if y%2 == 0 + b = "偶数" + else + b = "奇数" + end +elsif y == 0 + a = "零" + b = "偶数" +else + a = "负数" + if y%2 == 0 + b = "偶数" + else + b = "奇数" + end +end # .... -puts "这个数是_____ (正数或零或负数)" -puts "这个数是_____ (偶数或奇数)" \ No newline at end of file +puts "这个数是 #{a} " +puts "这个数是 #{b} " diff --git a/07-abcde.rb b/07-abcde.rb index 5d0c8c3..b94f6f8 100644 --- a/07-abcde.rb +++ b/07-abcde.rb @@ -10,13 +10,28 @@ print "请输入一个整数x,然后按 Enter: " x = gets +x = x.to_i print "请输入一个整数y,然后按 Enter: " y = gets +y = y.to_i print "请输入一个整数z,然后按 Enter: " z = gets +z = z.to_i + +if x < 0 + a = "A" +elsif ( y > 0 ) && ( z > 0 ) + a = "B" +elsif ( y > 0 ) && ( z < 0 ) + a = "C" +elsif ( y < 0 ) && ( z > 0 ) + a = "D" +elsif ( y < 0 ) && ( z < 0 ) + a = "E" +end # .... -puts "结果是________(A或B或C或D或E)" \ No newline at end of file +puts "结果是 #{a}" diff --git a/08-find-max.rb b/08-find-max.rb index 9e6e643..f523bea 100644 --- a/08-find-max.rb +++ b/08-find-max.rb @@ -2,13 +2,24 @@ print "请输入一个数字x,然后按 Enter: " x = gets +x = x.to_i print "请输入一个数字y,然后按 Enter: " y = gets +y = y.to_i print "请输入一个数字z,然后按 Enter: " z = gets +z = z.to_i + +if (x > y) && (x > z) + a = x +elsif (y > z) || (y == z) + a = y +else + a = z +end # .... -puts "最大的数是 ________(x或y或z)" \ No newline at end of file +puts "最大的数是 #{a}" diff --git a/09-function.rb b/09-function.rb index b1f922d..fffbed6 100644 --- a/09-function.rb +++ b/09-function.rb @@ -1,7 +1,9 @@ # 题目: 输入直角三角形的宽和高,输出三角形的面积 def calculate_area(a, b) - # .... + a = a.to_f + b = b.to_f + a * b / 2 end print "请输入直角三角形的高,然后按 Enter: " @@ -12,4 +14,4 @@ def calculate_area(a, b) answer = calculate_area(a,b) -puts "直角三角形的面积是: #{answer}" \ No newline at end of file +puts "直角三角形的面积是: #{answer}" diff --git a/10-function.rb b/10-function.rb index bb450fb..496f847 100644 --- a/10-function.rb +++ b/10-function.rb @@ -1,6 +1,18 @@ # 题目: 使用者输入 x,y,z,请输出三个数中最大的数 def find_max(x, y, z) + x = x.to_f + y = y.to_f + z = z.to_f + if (x > y) && (x > z) + a = x + elsif (y > z) || (y == z) + a = y + else + a = z + end + + return a end print "请输入一个数字x,然后按 Enter: " @@ -16,4 +28,4 @@ def find_max(x, y, z) answer = find_max(x,y,z) -puts "最大的数是 #{answer}" \ No newline at end of file +puts "最大的数是 #{answer}" diff --git a/11-seven.rb b/11-seven.rb index 26c221d..afc26f9 100644 --- a/11-seven.rb +++ b/11-seven.rb @@ -3,7 +3,9 @@ i = 1 while ( i <= 100 ) - # .... + if i % 7 == 0 + puts i + end i+=1 -end \ No newline at end of file +end diff --git a/12-sum-even.rb b/12-sum-even.rb index 73879bb..5a74ad9 100644 --- a/12-sum-even.rb +++ b/12-sum-even.rb @@ -5,9 +5,11 @@ while ( i <= 100 ) - # .... + if i % 2 == 0 + total += i + end i+=1 end -puts total \ No newline at end of file +puts total diff --git a/13-nn.rb b/13-nn.rb index ac0a43b..6534767 100644 --- a/13-nn.rb +++ b/13-nn.rb @@ -2,10 +2,22 @@ print "请输入数字 N,然后按 Enter: " n = gets +n = n.to_i +a = 0 +b = 0 + +while a <= n + while b <= n + total = a * b + puts "#{a} x #{b} = #{total}" + b += 1 + end + a += 1 + b = 0 +end # while ( ... ) # while ( ...) # # end # end - diff --git a/14-prime.rb b/14-prime.rb index 8cf1692..f94bbac 100644 --- a/14-prime.rb +++ b/14-prime.rb @@ -1,7 +1,9 @@ # 输入一个数字 N,请检查是不是质数 def is_prime(n) -# .... + if (n == 2) || ( (n > 2) && ( n % 2 != 0) ) + return true + end end print "请输入数字 N,然后按 Enter: " diff --git a/15-guess-number.rb b/15-guess-number.rb index 48f9dca..f9e5456 100644 --- a/15-guess-number.rb +++ b/15-guess-number.rb @@ -6,12 +6,17 @@ print "请猜一个 0~99 的数字 N,然后按 Enter: " n = gets - #puts "太低了,再猜一次" - #puts "太高了,再猜一次" + if n.to_i < target + puts "太低了,再猜一次" + end + + if n.to_i > target + puts "太高了,再猜一次" + end if n.to_i == target puts "恭喜猜中啦! " break end -end \ No newline at end of file +end diff --git a/16-array-sum.rb b/16-array-sum.rb index 9b4910b..de3e8cb 100644 --- a/16-array-sum.rb +++ b/16-array-sum.rb @@ -1,11 +1,10 @@ # 给定一阵列内含数字,输出最大值 def find_max(array) - #.... + array.max end arr = [8, 12, 36, 53, 9, 75, 3, 71, 59, 88] max = find_max(arr) puts "Max is #{max}" # 应该是 88 - diff --git a/17-array-stats.rb b/17-array-stats.rb index 0af81bb..91e4c91 100644 --- a/17-array-stats.rb +++ b/17-array-stats.rb @@ -12,9 +12,14 @@ end end +total = 0 +arr.each do |i| + total += i +end + puts arr.to_s -puts "总和是 _____" -puts "平均是 _____" -puts "最大值是 _____" -puts "最小值是 _____" \ No newline at end of file +puts "总和是 #{total}" +puts "平均是 #{total/arr.size}" +puts "最大值是 #{arr.max}" +puts "最小值是 #{arr.min}" diff --git a/18-square.rb b/18-square.rb index 226e1c1..d26ea81 100644 --- a/18-square.rb +++ b/18-square.rb @@ -4,7 +4,16 @@ print "请输入数字 N,然后按 Enter: " n = gets +n = n.to_i +while (true) + if n >=0 + arr << (n * n) + n -= 1 + else + break + end +end -# ... +arr = arr.reverse! -puts arr.to_s \ No newline at end of file +puts arr.to_s diff --git a/19-filter.rb b/19-filter.rb index ef7e515..111b69e 100644 --- a/19-filter.rb +++ b/19-filter.rb @@ -1,9 +1,17 @@ # 给定一阵列内含数字,输出另一个数组只包含偶数 def filter_even(arr) - #... + group = [] + + arr.each do |i| + if (i % 2 == 0 ) + group << i + end + end + + return group end arr = [7, 68, 42, 46, 9, 91, 77, 46, 86, 1] -puts filter_even(arr).to_s # 应该是 [68, 42, 46, 46, 86] \ No newline at end of file +puts filter_even(arr).to_s # 应该是 [68, 42, 46, 46, 86] diff --git a/20-sorting.rb b/20-sorting.rb index 5f82c08..3ec5659 100644 --- a/20-sorting.rb +++ b/20-sorting.rb @@ -2,10 +2,10 @@ # Hint: 可用 arr.sort 排序,和 arr.uniq 去除重复 def filter_even(arr) - #... + arr.uniq.sort end arr = [7, 68, 42, 46, 9, 91, 77, 46, 86, 1] -puts "________" # 应该是 [42, 46, 68, 86] \ No newline at end of file +puts filter_even(arr).to_s # 应该是 [42, 46, 68, 86] diff --git a/21-selection-sort.rb b/21-selection-sort.rb index e5e7eae..67da61a 100644 --- a/21-selection-sort.rb +++ b/21-selection-sort.rb @@ -2,11 +2,25 @@ # https://zh.wikipedia.org/wiki/选择排序 def selection_sort(arr) - #... + n = arr.length + loop do + swapped = false + + (n-1).times do |i| + if arr[i] > arr[i+1] + arr[i], arr[i+1] = arr[i+1], arr[i] + swapped = true + end + end + + break if not swapped + end + + arr end arr = [7, 68, 42, 46, 9, 91, 77, 46, 86, 1] answer = selection_sort(arr) -puts answer.to_s # 应该是 [1, 7, 9, 42, 46, 46, 68, 77, 86, 91] \ No newline at end of file +puts answer.to_s # 应该是 [1, 7, 9, 42, 46, 46, 68, 77, 86, 91] diff --git a/22-missing.rb b/22-missing.rb index 6898714..ce011b8 100644 --- a/22-missing.rb +++ b/22-missing.rb @@ -1,7 +1,14 @@ # 给定一阵列内含数字,请输出 0~9 中不见的数字 def find_missing(arr) - # ... + a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] + arr.uniq.each do |i| + if a.include?(i) + a.delete(i) + a + end + end + return a end answer = find_missing( [2,2,1,5,8,4] ) diff --git a/23-hash-max.rb b/23-hash-max.rb index 6fb227e..c2b4976 100644 --- a/23-hash-max.rb +++ b/23-hash-max.rb @@ -1,7 +1,8 @@ # 给定一 Hash,输出有最大 value 的 key def find_max(hash) - # ... + x = hash.values.max + hash.key(x) end h = { @@ -15,5 +16,3 @@ def find_max(hash) answer = find_max(h) puts "有最大 value 的是 #{answer}" # 应该是 d - - diff --git a/24-hash-even.rb b/24-hash-even.rb index 9da9605..5ac0807 100644 --- a/24-hash-even.rb +++ b/24-hash-even.rb @@ -1,7 +1,15 @@ # 给定一 Hash,输出 value 是偶数的 keys def find_even_keys(hash) + array = [] + hash.each do |key, value| + if value % 2 == 0 + array << key + end + end + + array # ... (请回传一个数组) end @@ -17,5 +25,3 @@ def find_even_keys(hash) answer = find_even_keys(h) puts "有偶数 value 的 keys 有 #{answer}" # 应该是数组 [b,d,e] - - diff --git a/25-hash-count.rb b/25-hash-count.rb index 2167335..fa251de 100644 --- a/25-hash-count.rb +++ b/25-hash-count.rb @@ -4,7 +4,11 @@ def count(arr) h = {} arr.each do |i| - # ... + key = i + value = arr.count(i) + if !h.keys.include? i + h[key] = value + end end return h # 回传一个 hash @@ -15,4 +19,3 @@ def count(arr) answer = count(arr) puts answer # 答案应该是 {"a"=>3, "d"=>6, "c"=>5, "b"=>1, "e"=>5} - diff --git a/26-hash-filter.rb b/26-hash-filter.rb index 51ade64..69308a0 100644 --- a/26-hash-filter.rb +++ b/26-hash-filter.rb @@ -8,9 +8,29 @@ { "name" => "Vincent", "age" => 6 }, ] -# .... +def filter(arr) + x = [] + arr.each do |i| + if i["age"] >= 18 + x << i + end + end -puts "所有成年人,并由小到大: _________" + n = x.length-1 + loop do + swapped = false + n.times do |s| + if (x[s]["age"]) > (x[s+1]["age"]) + x[s], x[s+1] = x[s+1], x[s] + swapped = true + end + end + break if not swapped + end + x +end + +puts "所有成年人,并由小到大: #{filter(arr).to_s} " # 答案应该是 #[ diff --git a/27-class.rb b/27-class.rb index 8cec2c9..bd125e0 100644 --- a/27-class.rb +++ b/27-class.rb @@ -1,5 +1,10 @@ class Person - # ... + attr_accessor :first_name + attr_accessor :last_name + + def greet + puts "Hello, #{@first_name} #{@last_name} " + end end p1 = Person.new @@ -11,6 +16,3 @@ class Person p2.first_name = "William" p2.last_name = "Zhang" p2.greet # 输出 "Hello, William Zhang" - - - diff --git a/28-word-count.rb b/28-word-count.rb index 2643123..8c50da4 100644 --- a/28-word-count.rb +++ b/28-word-count.rb @@ -2,4 +2,32 @@ doc = File.read("wordcount.txt") -# ... +arr = doc.downcase.gsub(/[,.]/, '').split(" ") + +def count(arr) + h = {} + + arr.each do |i| + key = i + value = arr.count(i) + if !h.keys.include? i + h[key] = value + end + end + + return h # 回传一个 hash +end + +answer = count(arr).sort + +answer.each do |k, v| + puts "#{k} #{v}" +end + +# word.each do |i| +# key = i +# value = word.count(i) +# if !h.keys.include? i +# h[key] = value +# end +# end diff --git a/29-todos.rb b/29-todos.rb index 0bddde2..b28dd7d 100644 --- a/29-todos.rb +++ b/29-todos.rb @@ -17,17 +17,21 @@ if command == "add" print "请输入代办事项: " - # ... + todos << gets.chomp elsif command == "remove" print "请输入要删除的编号: " - # ... + todos.delete_at(gets.chomp.to_i) elsif command == "save" puts "存盘离开" - # ... + File.open("todos.txt", "w+") do |f| + todos.each do |i| + f << i + f << "\n" + end + end break; else puts "看不懂,请再输入一次" end end - diff --git a/todos.txt b/todos.txt index 4757e85..595adbc 100644 --- a/todos.txt +++ b/todos.txt @@ -1,4 +1,3 @@ Buy book -Go Shopping -Walk -Gogo +Go shopping +Reading