2014-11-15 161 views
0
def key(keyC, keyG, keyE): 
    keyC = ('em','f','g','am','c') 
    keyG = ('g','c','d','em','am') 
    keyE = ('a','b','e') 
    key = input("What key would you like to play in") 
    print "I will display chords in that key" 
    if input == 'c': 
     return(random.choice(keyC)) 
    elif input == 'g': 
     return(random.choice(keyG)) 
    elif input == 'e': 
     return(random.choice(keyE)) 
    else: 
     return "Pick another key" 

我是新來的,我正在寫我的代碼,它看起來很有趣。任何意見或建議都會有所幫助。我的功能不會返回值

+0

你是什麼意思,它不會返回一個值?你如何調用函數? – DanielGibbs

回答

4

你應該對key來比較你的字符串:

if key == 'c': 
... 
elif key == 'g': 
... 
elif key == 'e': 

key就是保存用戶的輸入。 input只是爲了獲取輸入內置功能:

>>> key = input(':') 
:abc 
>>> input 
<built-in function input> 
>>> key 
'abc' 
>>> 

不過請注意,上面是用Python編寫的3.x中給出的示範如果您使用Python 2.x,那麼您應該使用raw_input而不是input。 Python 2.x input函數將其輸入作爲真實的Python代碼進行評估,並將爲您輸入的任何未定義的名稱生成一個NameError

1

一些更正:

  1. 使用key,通過iCodez
  2. 爲輪廓的把import random你的函數定義的上方。否則,使用這個的程序會詢問random的位置。使用raw_input("What key would you like to play in")代替input。如果在提示後鍵入c,則input將查找名爲c的變量並打印其值。如果該變量不存在,並且拋出錯誤。 raw_input只是將您的輸入轉換爲字符串。
  3. 如果您將函數內的keyC,keyGkeyE定義爲常量,那麼將它們作爲函數的參數是沒有必要的(並且不執行任何操作)。您可以將它們作爲可選參數,也可以完全忽略參數。

終極密碼:

import random 
def key(keyC=('em','f','g','am','c'),keyG=('g','c','d','em','am'),keyE=('a','b','e')): 
    #keyC, keyG, keyE as optional arguments 

    key = raw_input("What key would you like to play in") 
    print "I will display chords in that key" 

    if key == 'c': 
     return(random.choice(keyC)) 
    elif key == 'g': 
     return(random.choice(keyG)) 
    elif key == 'e': 
     return(random.choice(keyE)) 
    else: 
     return "Pick another key" 

另見this answer

編輯:根據twasbrillig,此解決方案假設Python 2.x而不是Python 3.我使用Python 2.7,它仍然是常見的。

+1

OP可能使用Python 3,在這種情況下'input'是正確的。 – twasbrillig

+0

啊,我沒有考慮Python 3.我習慣於使用Python 2.7。 :)我想那個細節也是必需的。 – Matt

+1

很酷。評論已被刪除,但有人指出'print'語句顯示在這種情況下,OP最可能使用Python 2。 – twasbrillig