新手问题 今天练习小程序我实在忍不住要吐糟自己的代码太冗长,求支招!

hemengzhi88 · 2015年10月24日 · 最后由 msg7086 回复于 2015年10月30日 · 2982 次阅读

每次做完都发现别人的代码几乎只有【1 行】这也就算啦,可是这篇实在是不能忍受了!

string 可以是所有的合法字符,但是只需要转换所有字母,其他字符保持不变!

def encode(string)
  #your code here
  string = string.downcase
  string = string.gsub(/a/,'1')
  string = string.gsub(/b/,'2')
  string = string.gsub(/c/,'3')
  string = string.gsub(/d/,'4')
  string = string.gsub(/e/,'5')
  string = string.gsub(/f/,'6')
  string = string.gsub(/g/,'7')
  string = string.gsub(/h/,'8')
  string = string.gsub(/i/,'9')
  string = string.gsub(/j/,'10')
  string = string.gsub(/k/,'11')
  string = string.gsub(/l/,'12')
  string = string.gsub(/m/,'13')
  string = string.gsub(/n/,'14')
  string = string.gsub(/o/,'15')
  string = string.gsub(/p/,'16')
  string = string.gsub(/q/,'17')
  string = string.gsub(/r/,'18')
  string = string.gsub(/s/,'19')
  string = string.gsub(/t/,'20')
  string = string.gsub(/u/,'21')
  string = string.gsub(/v/,'22')
  string = string.gsub(/w/,'23')
  string = string.gsub(/x/,'24')
  string = string.gsub(/y/,'25')
  string = string.gsub(/z/,'26')
end
def encode(string)
  string.downcase.gsub(/./) { |s| s.getbyte(0) - 96 }
end

#1 楼 @aidewoode Hi,i`m from Chengdu too. 你这样我也会。 应该是我没有说清楚,string 可以是所有的合法字符串,但是只需要转换所有字母,其他字符保持不变!Thank you !

改一下正则就可以啦。

string.downcase.gsub(/[a-z]/) { |s| s.getbyte(0) - 96 }
4 楼 已删除

string.downcase.gsub(/[a-z]/) { |char| char.ord - 96 }也可以

#3 楼 @aidewoode 正则对我是硬伤。大部分都没问题了,可是为什么输入 string="#@"会多出一个‘\’呢?是我整错了吗?你试试#4 楼 @aspirewit (也是这样的)

#6 楼 @hemengzhi88 #7 楼 @hemengzhi88 我这也有这种问题,想不通为什么

#8 楼 @aspirewit #3 楼 @aidewoode 谢谢两位,我觉得应该是系统保留的什么之类的把(类似转义字符之类的)。

@hemengzhi88

是 downcase 的原因

#9 楼 @hemengzhi88 应该是,对操作和打印返回的字符串没有什么额外影响

#6 楼 @hemengzhi88 应该是 repl 里面对#进行了转义。其实把- 96换成'a'.ord + 1会不会更好?

#6 楼 @hemengzhi88 应该是 repl 里面对#进行了转义。其实把- 96换成'a'.ord + 1会不会更好?

14 楼 已删除

(('a'..'z').zip ('1'..'26')).each{|e| str = str.gsub(*e)}

#6 楼 @hemengzhi88 #8 楼 @aspirewit

双引号表达式里 # 被用来引导一个表达式,比如 "#{a}" 这里的 # 就是有特殊含义的。 你们写代码的时候用的是单引号,但是结果表达式里用的是双引号。 双引号里 # 就要转义了,否则就可能成为非法表达式了。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号