2012-05-11 29 views
0

我想教自己的Python,並用它做一些卑鄙的任務。目前我正在處理列表和字符串。我知道字符串是不可變的,所以我將一個字符串轉換爲一個列表,並希望遍歷列表以將任何元音更改爲$符號。問題在於$符號不被歸因於元音。這裏是我的代碼:在Python中使用for循環更改數組的一個元素

aString = raw_input("Please enter a sentence: ") 

aString = list(aString) 

for i in xrange(len(aString)): 
    if i=='a' or \ 
     i=='e' or \ 
     i=='i' or \ 
     i=='o' or \ 
     i=='u': 
     i.newattribute = '$' 

print aString 
+0

xrange生成整數,而不是字符:-) –

+0

@MaksymPolshcha謝謝你。必須對Python中的循環等進行更多的研究。對他們來說有很多 – adohertyd

+0

感謝所有人的幫助,真的很感謝! – adohertyd

回答

4

我知道你正在做它來學習語言,但你應該知道,你可以簡單地使用方法sub來分用正則表達式構成:

import re 
re.sub('[aeiou]', '$', aString) 
2

你要做到以下幾點:

for i in xrange(len(aString)): 
    if aString[i]=='a' or \ 
     aString[i]=='e' or \ 
     aString[i]=='i' or \ 
     aString[i]=='o' or \ 
     aString[i]=='u': 
      aString[i] = '$' 

但它很可能是更容易使用的替代方法。

replaceList = ['a', 'e', 'i', 'o', 'u'] 
aString = raw_input("Please enter a sentence: ") 
for letter in replaceList: 
    aString.replace(letter) 
print aString 
+0

替換函數是我以前沒見過的東西。感謝Niek。 Python充滿了我以前從未見過的這些新功能。我只熟悉C和C++ – adohertyd

2
strs="abcduitryd" 
print("".join(('$' if x in 'aeiou' else x for x in strs))) 

$bcd$$tryd 

或:

strs="abcduitryd" 
lis=list(strs) 
for i,x in enumerate(lis): 
    if x in 'aeiou': 
     lis[i]='$' 
strs="".join(lis) 
print(strs) 

$bcd$$tryd 

或:

strs="abcduitryd" 
for i,x in enumerate(strs): 
    if x in 'aeiou': 
     strs=strs.replace(strs[i],'$') 
print(strs) 

$bcd$$tryd 
+1

,您不必「列出()」字符串。一個字符串是一個可迭代的。 – ch3ka

+0

哦!當我從IDE中複製這條信息時,我忘了刪除該行。 –

1

「Pythonic」方法是對字符串使用translate方法。
例如:

import string 
mystr="hello world" 
vowels="aeiou" 
token="$"*len(vowels) 
tab=string.maketrans(vowels,token) 
mystr.translate(tab) 
'h$ll$ w$rld' 
1

如果你正在學習Python中,可以使用一個很酷的功能是一個列表理解。你可以這樣做:

>>> str = "hello world" 
>>> l = ["$" if ch in "aeiou" else ch for ch in str] 
>>> str = "".join(l) 
>>> str 
'h$ll$ w$rld' 

第二行建立一個列表,通過每個角色的行走和應用`「$」,如果在章「AEIOU」其他通道ch1〜它。然後您只需加入列表即可獲取新字符串。它正在做你正在做的事情,將字符串轉換爲列表,並在此過程中將元音轉換爲'$'。

這當然不是最有效的方法。最好的辦法就是像其他人提到的那樣,使用一個專門用於這種事情的庫。

+0

你並不需要製作一個單獨的列表,只需將其更改爲一個生成器表達式並將它放在'「」.join()'中即可。 – kindall

+0

這裏不需要列表理解。 –

相關問題