2014-02-27 178 views
0

我已經嘗試了幾種不同的方法,但無濟於事。我們需要使用簡單的運算符和簡單的循環來執行此操作這是我曾嘗試:將小寫字母更改爲:數字00-25,將大寫字母更改爲:數字26-51

def str2num(inputstr): 
    i = '' 

    for x in inputstr: 

     i = i + str.replace(x, str(ord(x)),1) 
    i = str(i) 

    print(i) 

有錯誤,指出在整數不能隱式轉換爲字符串,我試圖與STR(ORD修復(X),但我還是收到了離開時。同樣的錯誤

然後我決定我會嘗試轉換到一個列表,並使用進口串......事情變得凌亂:

def str2num(s): 

    import string 

    r = string.ascii_lowercase + string.ascii_uppercase 
    L = list(r) 

    for i in L: 
     L [i] = 00 + 1 

    print(L) 

我出的解決方案,我可以想出,任何建議嗎?記住(我知道這是一種痛苦,但是)僅僅是簡單的解決方案。用於,with,while,if ,導入字符串和一般數學運算符。這門課不關乎效率,而是使用基本工具完成工作。

謝謝。

+0

我也必須能夠在def str2num()括號中輸入一個值,並使用前面提到的數字給出一個代碼。 – ringlei2

+0

你試圖用一個整數'1'來替換一個字符串中的東西;那是錯誤。你可能需要''1「',儘管我不清楚你在代碼中究竟做了什麼。 – geoffspear

+0

這裏是問題: – ringlei2

回答

0

要獲得號碼的清單:

In [172]: t='abcABC' 

In [175]: l = map(lambda x: ord(x)-97 if x.islower() else ord(x)-65+26, t) 

In [176]: l 
Out[176]: [0, 1, 2, 26, 27, 28] 

爲了得到一個字符串1'01'

In [179]: ''.join('%02d'%i for i in l) 
Out[179]: '000102262728' 

功能版本:

In [186]: def str2num(s): 
    ...: res=[] 
    ...: for i in s: 
    ...:  if i.islower(): 
    ...:   res.append(ord(i)-97) 
    ...:  else: 
    ...:   res.append(ord(i)-65+26) 
    ...: return ''.join('%02d'%i for i in res) 

In [187]: str2num('MyHome') 
Out[187]: '382433141204' 
+1

如果你要爲他們做某人的作業,那麼採用'map'和'lambda'的方式來做,這樣他們就會因爲作弊而失敗似乎有點殘酷。 – geoffspear

+0

@Wooble,但我沒有看到關鍵字「家庭作業」 – zhangxaochen

+0

lambda是我們沒學過的東西,因此不幸的是我不能接受答案(根據教授的要求) – ringlei2

0

使用somestring.islower()和somestring.isUpper()

爲小寫其STR(ORD(somestring [I]) - 97),以獲得0 - 25爲z

大寫STR(ORD(somestring [I]) - 65 + 26),以獲得26 - 51對於AZ

我不知道如何編碼它,但這應該很有幫助。烏爾使用ASCII表;)

也是這個不檢查2位,因此你會需要去弄清楚太多,如果你想要的東西像00,01,等等

相關問題