2012-11-09 75 views
1

我想在Python中製作這個Pig Latin翻譯器,它一直運行良好,直到我嘗試縮小它的尺寸。Python中的if/else循環的問題

有人可以看看這段代碼,並告訴我爲什麼,當我在開頭輸入沒有元音的單詞時,它仍然會在這個if語句中打印「元音」代碼?

CODE:

pyg = 'ay' 

original = raw_input('Enter a word: ') 
low_original = original.lower() 

if len(low_original) > 0 and low_original.isalpha(): 
     print low_original 
     if low_original[0] == 'a' or 'e' or 'i' or 'o' or 'u': 
       print "vowel" 
       pyg_vowel = low_original + pyg 
       print pyg_vowel 
     else: 
       print "consonant" 
       pyg_cons = low_original[1: ] + low_original[0] + pyg 
       print pyg_cons 
else: 
     print 'empty' 
+3

'if'不是一個循環。 – Matthias

+0

你可能想要在['a','e','i','o','u']中使用'if low_original [0]:'。否則,即使第一次比較爲「False」,「e''評估爲」True「,並且因爲您擁有」或「,」if「子句始終爲」True「。 –

回答

3

您應該替換字符串:

if low_original[0] == 'a' or 'e' or 'i' or 'o' or 'u': 

有:

if low_original[0] in ('a', 'e', 'i', 'o', 'u'): 
0

的,如果的永遠返回true!

pyg = 'ay' 

original = raw_input('Enter a word: ') 
low_original = original.lower() 

if len(low_original) > 0 and low_original.isalpha(): 
    print low_original 
    if low_original[0] in ['a' , 'e' , 'i' , 'o' , 'u']: 
      print "vowel" 
      pyg_vowel = low_original + pyg 
      print pyg_vowel 
    else: 
      print "consonant" 
      pyg_cons = low_original[1: ] + low_original[0] + pyg 
      print pyg_cons 
else: 
    print 'empty' 
8

您需要單獨檢查所有元音。

目前,你如果條件評價爲: -

if (low_original[0] == 'a') or 'e' or 'i' or 'o' or 'u': 

or返回其狀態的第一個真正的價值,這要麼Truee這裏,這取決於你的第一個條件是真還是假。現在,由於'e'被評估爲True,所以這兩個值都是true,因此您的條件將始終爲true

你應該做的是這樣的: -

if low_original[0] in 'aeiou': 

或: -

if low_original[0] in ('a', 'e', 'i', 'o', 'u'): 
+0

真棒,謝謝你解釋 – user1811708

+0

@ user1811708 ..不客氣:) –

0

的問題是 '如果low_original [0] == 'a' 或 'E' 或'我'或'o'或'你':' - 首先不是pythonic秒沒有給你不你所期望的。

嘗試更新您的代碼:

pyg = 'ay' 

original = raw_input('Enter a word: ') 
low_original = original.lower() 

if len(low_original) > 0 and low_original.isalpha(): 
    print low_original 
    if low_original[0] in ('a', 'e', 'i', 'o', 'u'): 
      print "vowel" 
      pyg_vowel = low_original + pyg 
      print pyg_vowel 
    else: 
      print "consonant" 
      pyg_cons = low_original[1: ] + low_original[0] + pyg 
      print pyg_cons 
else: 
    print 'empty' 
0

if low_original[0] in ['a', 'e', 'i', 'o', 'u'] 
0

在這種if條件將始終評估爲True取代if語句。

if low_original[0] == 'a' or 'e' or 'i' or 'o' or 'u': 
      print "vowel" 
      pyg_vowel = low_original + pyg 
      print pyg_vowel 

這是一樣if (low_original[0] == 'a') or 'e' or 'i' or 'o' or 'u'

你應該使用類似if low_original[0] in 'aeiou'