如何教初学者在Python中反转字符串?

How to teach beginners reversing a string in Python?

我正在给一年级的数学学生讲授"计算机程序设计导论"课程。必须假设这是学生第一次接触计算机编程。以下是我教学的主要目标:

  • 学生应该学习和理解Python的基础知识。
  • 最终,他们需要掌握足够多的Python工具,以便能够为给定的问题选择正确的工具。
  • 同时,他们必须通过计算机编程学习解决问题的基本技能。

我的教学方法是给每个新引入的概念一系列的问题和挑逗,以激励学生。例如,当引入字符串和列表时,一个自然问题是字符串或列表反转的任务。如果我让学生写一个代码来检查一个字符串是否是回文,那么我最好告诉他们如何反转它。

对于列表,自然解决方案myString.reverse()至少有两个缺点:

  • 它不会延续到字符串上。
  • 学生们会发现这是一种魔力,除非先告诉他们方法。
  • 真正的问题是:如何在Python中引入反转字符串的问题?


    你可以先教他们关于步幅符号(::)的知识,然后再把它们切片并应用。

    1
    2
    3
    s = 'string'
    s = s[::-1]
    print s  # gnirts

    参考资料和更多信息:

    • 扩展切片
    • 关于python的非正式介绍
    • python字符串反向解释

    为了响应您的评论,您可以提供任意一个参数。

    1
    2
    3
    4
    5
    6
    >>> s[len(s):None:-1]  
    'gnirts'
    >>> s[5:None:-1]  
    'gnirts'
    >>> s[::-1]  # and of course
    'gnirts'


    两种明显的方法是:

    1
    ''.join(reversed(s))

    1
    s[::-1]

    对于一个编程新手来说,这两者都是不平凡的,但是所涉及的概念并没有那么困难。

    第二种方法更容易理解,如果你首先向他们展示s[::3]s[::2]s[::1]的结果。那么,以东十一〔三〕自然就来了。


    就这样问他们一个谜语:

    为什么?

    1
    2
    >>> 'dammitimmad'[::-1] == 'dammitimmad'
    True

    但是

    1
    2
    >>> 'dammit im mad'[::-1] == 'dammit im mad'
    False


    Python中的字符串反转绝对初学者指南。;)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # Tell them that,
    # to reverse a string
    # we read it backwards

    s = 'string'  # input string
    l = len(s)
    rs = ''       # reversed string

    for i in range(l-1,-1,-1): # range(start,end,step)
        rs += s[i]

    print rs

    但这不被认为是Python,我赞成其他人已经发布的更好的方法。


    将它们引入足够的工具(尤其是数组切片和函数式递归)来完成反转。然后,让他们努力想办法解决一段时间。取几个不同的答案进行比较,说明每种方法的优缺点。


    看看这个讨论。