2014-11-15 4 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.
  3. Используйте raw_input("What key would you like to play in") вместо input. Если после запроса введите c, input будет искать переменную c и распечатать ее значение. Если эта переменная не существует и возникает ошибка. raw_input просто преобразует ваш вход в строку.
  4. Если вы определяете keyC, keyG и keyE в функции как константы, то использование их в качестве аргументов функции не требуется (и ничего не делает). Вы могли бы использовать их в качестве необязательных аргументов или полностью исключить аргументы.

Финальный код:

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

Смежные вопросы