2014-09-11 63 views
2

我試圖運行此程序,但出於某種原因字符串只能更改爲小寫。元音不會變成小寫字母。任何想法爲什麼?在python中更改爲大寫和小寫

謝謝!

def changeCaps(string): 
     i = 0 
     while i < len(string): 
      if string[i] == 'a' or string[i] == 'e' or string[i] == 'i' or string[i] == 'o' or string[i] =='u': 
       print(string[i].upper()) 
       i = i + 1 
      else: 
       print(string[i].lower()) 
       i = i + 1 
    changeCaps("AlbErT") 
+0

你必須清楚你希望你的程序做什麼。在你的情況下,「AlbErT」它總是會回到其他順便說一句。 – doubleo 2014-09-11 03:11:42

+0

爲什麼它總是回退到其他地方? – albad 2014-09-11 03:12:54

+1

「AlbErT」中沒有小寫元音。嘗試changeCaps(「aeiou」)並查看其差異。 – doubleo 2014-09-11 03:16:31

回答

2

在他的兩條意見說什麼doubleo是正確的:因爲A和E阿爾伯特已經被資本化,他們是不等於小寫a和e,因此,它們是用來被沿着小寫與所有的輔音。如果你想改變輸入的任何字母的情況下,這將需要一個不同的例程。東西沿着這些線路更多:

def changeCaps(string): 
     i = 0 
     while i < len(string): 
      if string[i].islower(): 
       print(string[i].upper()) 
       i = i + 1 
      else: 
       print(string[i].lower()) 
       i = i + 1 
changeCaps("AlbErT") 

這將導致任何大寫字母小寫成爲任何小寫字母大寫變得和它是否是元音輔音或將有什麼關係呢。

另外,爲什麼不使用for循環呢?這將工作一樣好,而且佔用更少的代碼:

def changeCaps(string): 
    for i in range(len(string)): 
     if string[i].islower(): 
      print(string[i].upper()) 
     else: 
      print(string[i].lower()) 
changeCaps("AlbErT") 

好了,所以它不僅節省了兩行,但它使在我看來,使用for循環更有意義。無論哪種方式,其輸出將是:

aLBeRt 

關於最後一點,安東指出,你甚至不真的需要一個數字指針,剛剛過去的字符串。

def changeCaps(string): 
    for c in string: 
     if c.islower(): 
      print(c.upper()) 
     else: 
      print(c.lower()) 
changeCaps("AlbErT") 

(謝謝你,安東!)

+1

如果你做for循環,那麼爲什麼使用索引'i'?你可以直接在字符串中循環,例如'for c in string:...'。 – Anton 2014-09-11 04:34:34

+0

好點。我忘了那個。我在使用真正的列表時記得這一事實,但出於某種原因,它在處理字符串時滑倒了我的思路。絕對是更好的方式去。 – PCGuyIV 2014-09-11 04:37:39