2010-03-13 53 views
4

我正在爲第一年的數學學生教授「計算機編程入門」課程。人們必須假設這是學生們首次接觸計算機編程。這裏是我的教學的主要目標:如何讓初學者在Python中反轉字符串?

  • 學生應該學習和理解Python的基礎知識。
  • 最終,他們需要掌握足夠多的Python工具,以便他們能夠爲給定問題選擇合適的工具。
  • 同時,他們必須學習計算機編程解決問題的基本技能。

我的教學方法是爲每個新引入的概念提供一系列激勵學生的問題和挑逗。例如,當引入字符串和列表時,自然問題是字符串或列表反轉的任務。如果我要求學生編寫一個代碼來檢查一個字符串是否是迴文,那麼我最好告訴他們如何反轉它。

對於列表,myString.reverse()至少有兩個缺點,一個自然的解決方案:

  1. 它不會延續到字符串。
  2. 學生將會看到它魔術除非先告訴方法。

真正的問題是:應該如何介紹在Python中反轉字符串的問題?

+1

告訴他們使用'myString [:: - 1]'這麼難? – poke 2010-03-13 17:21:03

+5

請提供您正在考慮使用的材料。這在Python中是一個簡單的函數,不需要任何「教學」。它已經在圖書館。你想教什麼?算法?數據結構?如何在圖書館中搜索?如何避免使用Google?請在你的問題中提供更多背景。 – 2010-03-13 17:21:52

+0

我可以做到這一點,但他們會理解或只是學習另一個訣竅? – 2010-03-13 17:24:43

回答

7

您可以先教他們關於跨步表示法(::),然後切片並同時應用。

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

參考和信息

在回答您的意見,您可以提供任何參數。

>>> s[len(s):None:-1] 
'gnirts' 
>>> s[5:None:-1] 
'gnirts' 
>>> s[::-1] # and of course 
'gnirts' 
+0

我將a和b的各種值插入語句s = s [a:b:-1]中,但我無法獲得與s = s [:: - 1]相同的效果。 – 2010-03-13 22:40:15

+0

你爲'a'和'b'使用了什麼值? – 2010-03-13 22:57:27

+0

我編輯了我的答案,以結合'a'和'b'值來重現相同的結果,希望有所幫助。 – 2010-03-13 23:04:59

4

兩個明顯的方法是:

''.join(reversed(s)) 

s[::-1] 

我認爲都是不平凡的編程新手,但所涉及的概念是不是真的那麼難。

第二種方法更容易理解,如果您先向他們展示s[::3],s[::2]s[::1]的結果是什麼。然後s[::-1]自然會到來:)

+0

非常好!第一個解決方案更難以解釋? – 2010-03-14 04:45:06

1

向他們介紹了足夠的工具(陣列切片,也許函數式遞歸,尤其是)來完成逆轉。然後,讓他們努力嘗試弄清楚一段時間。採取幾個不同的答案並進行比較,顯示每種方式的優缺點。

2

絕對初學者指南在Python中的字符串反轉。 ;)

# 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 

但是這不被認爲是pythonic,我贊成其他人已經發布的更好的方法。

+2

我同意這一點。如果你正試圖用python教授基本的編程概念,那麼首先要用明顯的(如果不是最優的)方法。然後,一旦他們理解了理論,你就可以向他們展示「捷徑」。 (你知道嗎,就像你的數學老師總是這樣做?那男人生氣我了:) 話又說回來,如果你的學生已經有基本的編程技能下來,你要專門教他們的Python,做切片方法,並以此爲契機,研究切片一般和多麼強大會是。 – Toji 2010-03-13 17:40:41

+0

您應該避免將錯誤的代碼作爲任何事物的第一種方法。 – 2010-03-13 17:46:23

+0

@Mike格雷厄姆:並與代碼目前他們SOOO複雜,他們失去了所有的興趣之前,他們甚至得到started.Though我蟒實力OP說,他正在教「計算機程序設計」非常清楚。 – 2010-03-13 17:49:51

3

就問他們這樣一個謎語:

爲什麼

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

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