2013-08-01 71 views
0

有人能解釋我下面的腳本有什麼問題嗎?以下Python腳本有什麼問題?

我已經開始在Python學習編程最近所以這可能是經驗豐富的在這裏很瑣碎,但請查看一下,讓我知道什麼是錯。這個想法是編寫一個反轉給定字符串的腳本。我知道有一個更簡單的方法,使用s[::-1]來做到這一點,但我想以我自己的方式做到這一點。錯誤是否與z沒有以適當的方式定義有關?如果是這樣,請讓我知道如何解決它。謝謝!

def reverse(x): 
    y = len(x) 
    for i in range(y-1): 
     z[i] == x[y - 1 - i]  
    return z 
+1

前的for循環定義Z' – bozdoz

+7

'=='表示比較,'='表示賦值。 –

+2

您需要首先在循環外定義'z'。但你爲什麼這樣做呢? –

回答

1

首先,從你最近的評論我推斷你的Python程序作爲一個bash腳本執行。爲了讓它正確執行,請將此行添加到頂端:

#!/usr/bin/env python 

然後有相反的功能。其他人都指出,您需要使用賦值運算符(=)而不是等號運算符(==)。但是這並不能解決問題,因爲z未定義。但我們應該如何定義它?它不能是字符串,因爲字符串是不可變的,所以你不能像你試圖做的那樣改變字符串中的單個字符。

的Python的解決方案,如果你決定使用完全相同的算法是這樣,就是讓z進行列表,並使用stringjoin方法列表z人物串聯在了一個字符串結束。但是我們還沒有走出困境。 range(y - 1)是一個從0到y - 2的列表,但您也希望在該列表中有y - 1。所以我們需要使用range(y)

總之這給了我們下面的代碼:

def reverse(x): 
    y = len(x) 
    z = list(x) # Using the characters of x will give it the correct length 
    for i in range(y): 
     z[i] = x[y - 1 - i] 
    return "".join(z) 
+0

感謝您的幫助Lauritz。這解決了我的問題! – pfatagaga

4

您使用了雙「=」,它返回True或False進行比較。你應該使用「=」。

我強烈建議你閱讀有關運營商,因爲它會爲你節省大量的時間進行編碼時:

http://www.tutorialspoint.com/python/python_basic_operators.htm

+0

試過,沒有效果。以下是我在修改建議修改後得到的錯誤消息 - 回溯(最近一次調用最後一次): 文件「palindrome.py」,第9行,在 print reverse('abcde') 文件「palindrome.py」,線6,在反向 Z [I] = X [Y - 1 - I] \t NameError:全局名稱 'Z' 未定義 – pfatagaga

0

一個錯誤,我看到的是,你正在使用的比較操作符(== )在第5行,你也許想用賦值運算符(=)

+0

-1什麼?它背後的原因是什麼?正如其他人指出的那樣,上述腳本中的一個錯誤(即使它是合乎邏輯的錯誤)是操作符的錯誤使用。 – misterjinx