Ruby生成加减乘法作业

最近,小朋友的学校要练习加减乘法,家长们需要自己出题。刚好看了点Ruby的语法,凑合着编写了个自动生成器: 前半部分加减法,后半部分加减乘。

 

 

file=File.new(File.join("D:","/projworkspace/ruby_cases/2.txt"),"w") 

SP = '      '

sum = ''

100.times do |x|
  #srand(1234)

  # pattern
  # 0: a + b + c =R  
  # 1: a + b - c =R
  # 2: a - b + c =R
  # 3: a - b - c =R
  op = rand(4)    

  a = rand(10...100)
  b = rand(10...100)
  #cc = [1,2,3,4,5,6,7,8,9,10,20,30,40,50,60,70,80,90]
  cc = [1,2,3,4,5,6,7,8,9,10,20,30,40,50,60,70,80,90]
  r = rand(0...cc.length())
  c = cc[r]

  exp = ""
  if op == 0  
    m = a + b
    while m + c > 100 || a%10 + b%10 < 10  #|| m%10 + c%10 < 10
      a = rand(10...100)
      b = rand(10...100)
      m = a + b

      r = rand(0...cc.length())
      c = cc[r]
    end


    exp = "#{a} + #{b} + #{c} = #{SP}"

  elsif op == 1
    m = a + b
    while m > 100 || m - c < 0 || a%10 + b%10 < 10  || m%10 > c%10 #|| m%10 + c%10 < 10
      a = rand(10...100)
      b = rand(10...100)
      m = a + b

      r = rand(0...cc.length())
      c = cc[r]
    end


    exp = "#{a} + #{b} - #{c} = #{SP}"    

  elsif op == 2
    m = a - b
    while m < 0 || m + c > 100 || a%10 - b%10 > 0 || m%10 + c%10 < 10   #|| m%10 + c%10 < 10
      a = rand(10...100)
      b = rand(10...100)
      m = a - b

      r = rand(0...cc.length())
      c = cc[r]
    end


    exp = "#{a} - #{b} + #{c} = #{SP}"    
  elsif op == 3
    m = a - b
    while m < 0 || m < c || a%10 - b%10 > 0 || m%10 > c%10   #|| m%10 + c%10 < 10
      a = rand(10...100)
      b = rand(10...100)
      m = a - b

      r = rand(0...cc.length())
      c = cc[r]
    end


    exp = "#{a} - #{b} - #{c} = #{SP}"   
  end
    



  sum += exp

  if (x+1)%3 == 0
    file.puts(sum)
    sum = ""
  end
end


sum = ""

50.times do |x|
  #srand(1234)

  # pattern
  # 0: a*b + c =R  
  # 1: c + a*b =R
  # 2: a*b - c =R
  # 3: c - a*b =R
  op = rand(3)    

  a = rand(1...7)
  b = rand(1...7)
  m = a*b

  cc = [1,2,3,4,5,6,7,8,9,10,20,30,40,50,60,70,80,90]
  r = rand(0...cc.length())
  c = cc[r]

  exp = ""
  if op == 0 || op == 1
    while m + c > 100 || m%10 + c%10 < 10
      a = rand(1...7)
      b = rand(1...7)
      m = a*b

      r = rand(0...cc.length())
      c = cc[r]
    end

    if op == 0 || op == 1
      exp = "#{a} x #{b} + #{c} = #{SP}"
    else
      exp = "#{c} + #{a} x #{b} = #{SP}"
    end

  elsif op == 2
    while m < c || m%10 >= c%10
      a = rand(1...7)
      b = rand(1...7)
      m = a*b

      r = rand(0...cc.length())
      c = cc[r]
    end

    exp = "#{a} x #{b} - #{c} = #{SP}"
  elsif op == 3
    while c < m || c%10 >= m%10
      a = rand(1...7)
      b = rand(1...7)
      m = a*b

      r = rand(0...cc.length())
      c = cc[r]
    end    
    exp = "#{c} - #{a} x #{b} = #{SP}"
  end
    



  sum += exp

  if (x+1)%3 == 0
    file.puts(sum)
    sum = ""
  end
end



 


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值