2013-04-02 42 views
1

在這個時候運行時刻,用戶可以要求一個元音或通過輸入「C」或「V」什麼別的東西將拋出一個錯誤輔音。抓只允許內的2種輸入類型聲明

我將如何修改代碼以什麼我假設將可能isisntance添加收穫?

for i in range(9): 
    x = input("letter("+str(i+1)+"), Would you like a consonant (c) or a vowel (v)? :") 
    if x == 'c': 
     randomLetters += getConsonant() 
     print(randomLetters) 
    elif x == 'v': 
     randomLetters += getVowel() 
     print(randomLetters) 
return (randomLetters) 

完成代碼感興趣的人,感謝您的答案幫助我通過它的工作。

for i in range(9): 
    msg = "letter("+str(i+1)+"/9), Would you like a consonant (c) or a vowel (v)? :" 
    x = input(msg) 
    while x != "c" and x != "v": 
     print("put a damn c or v in") 
     x = input(msg) 
    if x == 'c': 
     randomLetters += getConsonant() 
     print(randomLetters) 
    elif x == 'v': 
     randomLetters += getVowel() 
     print(randomLetters) 
return (randomLetters) 

回答

0

有你的代碼的幾個問題:

  1. 它的移動直到下一封信,不管輸入如何。
  2. 它不處理的情況下,當輸入不是"c""v"
  3. 它沒有給予任何味精約無效用戶輸入。

我在這裏做:
在for循環每次迭代,我們進入一個無限循環,繼續,直到有效的輸入給出。

  1. 取第一個輸入,然後輸入while循環。
  2. 有效輸入,「有效」處理後,我們break的INF循環,並移動到下一個字母。
  3. 對於無效的輸入,我們顯示一個錯誤味精,再取輸入,並轉到2

「固定」 版本:

for i in range(1,10): # no need for the +1 in string. 
    msg = "letter({0}), Would you like a (c)onsonant or a (v)owel? : ".format(i) 
    x = input(msg) # raw_input(msg) 
    while True: # infinite loop 
     if x == 'c': 
      randomLetters += getConsonant() 
      print(randomLetters) 
      break 
     elif x == 'v': 
      randomLetters += getVowel() 
      print(randomLetters) 
      break 
     else: # x not in ['c','v'] 
      print('Invalid input, {0} is not valid'.format(x)) 
      x = input(msg) # get new input and repeat checks 
return (randomLetters) 

與一些額外的調整

+0

謝謝你! - 我做了upvote順便說一句, – jackdh

+0

我很快就接受了主要是爲了你做了什麼的想法,我接受了它並做了一些改動來幫助我, – jackdh

0

假設你使用Python 3.x,input()返回一個字符串。 所以:

for i in range(9): 
    x = input("letter("+str(i+1)+"), Would you like a consonant (c) or a vowel (v)? :") 
    if not x.isalpha(): raise TypeError('x can only have be a string') 
    if x == 'c': 
     randomLetters += getConsonant() 
     print(randomLetters) 
    elif x == 'v': 
     randomLetters += getVowel() 
     print(randomLetters) 
return (randomLetters) 

如果只想輸入是 'C' 或 'V':

for i in range(9): 
    while not x in ('c', 'v'): 
     x = input("letter("+str(i+1)+"), Would you like a consonant (c) or a vowel (v)? :") 
    if x == 'c': 
     randomLetters += getConsonant() 
     print(randomLetters) 
    elif x == 'v': 
     randomLetters += getVowel() 
     print(randomLetters) 
return (randomLetters) 
+0

嗯,我真的不能得到這個工作,因爲當我進入沒有C或v的字符串,它絕對treturns,而不是要求美國一個紅色的錯誤呃爲同一'i'選擇另一個字母 – jackdh

+0

@jack您沒有指定您希望它繼續循環;你說如果這不是正確的輸入,你想抓住。改變了第二個代碼以反映它。 –

+0

我很抱歉沒有說清楚!我的壞, – jackdh