【问题标题】:Rotate a word in Python with a key用键旋转 Python 中的单词
【发布时间】:2017-09-26 14:07:24
【问题描述】:

编写一个名为rotate_word() 的函数,它接受一个字符串和一个整数作为参数,并返回一个新字符串,其中包含原始字符串中按给定数量旋转的字母。 Rotate_word('cheer',7) == 'jolly', Rotate_word('melon', -10) = 'cubed',**

我的 Python 代码是:

def Rotate_word(str_, num_):
    result = ''
    for i in str_:
        i = chr(ord(i) + num_)
        result = result + i
    return (result)

str_ =input("Enter a string: ")
num_ = int(input("Enter rotate number: "))
print (Rotate_word(str_,num_))

它给出如下输出:

Enter a string: cheer  
Enter rotate number: 7  
jolly   

哪个是正确的。

Enter a string: melon  
Enter rotate number: -10  
c[bed  

这是错误的正确答案是cubed

我做错了什么,我该如何解决?

【问题讨论】:

    标签: python string python-3.x


    【解决方案1】:
    s=input()
    n=int(input())
    s2=""
    for l in s:
        s2=s2+chr(ord(l)+n)
    print(s2)    
    

    【讨论】:

      【解决方案2】:

      假设您只需要小写字符,如果它“溢出”,则需要将其环绕,这意味着如果它超出z 或在a 之前:

      left_bound = ord("a")
      right_bound = ord("z")
      

      然后做这样的事情:

      char_num = ord(i) + num_
      while char_num > right_bound: char_num -= 26
      while char_num < left_bound: char_num += 26
      i = chr(char_num)
      result = result + i
      

      有更短更优雅的解决方案,但这是最直接的解决方法

      【讨论】:

        【解决方案3】:

        问题是当低于'a' 或高于'z' 时,您需要“环绕”。

        但是,您可以简单地将str.translatestr.maketrans 一起使用,而不是使用chrord

        import string
        
        def Rotate_word(str_, num_):
            # Create a translation table from lowercase characters to shifted lowercase chars
            tab = str.maketrans(string.ascii_lowercase, 
                                string.ascii_lowercase[num_:] + string.ascii_lowercase[:num_])
            return str_.translate(tab)
        
        str_ =input("Enter a string: ")
        num_ = int(input("Enter rotate number: "))
        print(Rotate_word(str_,num_))
        

        需要做一些额外的工作才能使它也能处理大写字母。但它会为 'melon'-10'cheer'7 生成正确的输出。

        【讨论】:

          【解决方案4】:
          str_ ='melon'
          num_ = -10
          cstr=''
          for i in str_:
            t= (ord(i) + num_)
            if t<97:
              t=123-(97-t)
            cstr =cstr + chr(t)
          print(cstr)
          
          output is cubed
          

          【讨论】:

          • 请记住,Stack Overflow 不仅仅是为了解决眼前的问题,而是为了帮助未来的读者找到类似问题的解决方案,这需要了解底层代码。这对于我们社区的初学者和不熟悉语法的成员来说尤其重要。鉴于此,您能否edit 您的答案包括对您正在做什么的解释以及为什么您认为这是最好的方法?
          猜你喜欢
          • 2011-05-11
          • 1970-01-01
          • 2013-09-22
          • 1970-01-01
          • 1970-01-01
          • 2016-01-02
          • 2016-05-27
          • 1970-01-01
          • 2012-04-16
          相关资源
          最近更新 更多