2016-10-07 2 views
3

Это всего лишь часть игры, функция, которая берет секретное слово и буквы, угадываемые как аргументы, и говорит вам, правильно ли они догадались о слове.Word guessing game - Может ли это быть написано лучше?

Я буду полностью честен, это из задания на курс edX, однако Я уже передал это задание, этот код работает. Мне просто интересно, можно ли его лучше написать. Некоторые люди на дискуссионных форумах говорили о том, как они решили это с помощью 1 строки, поэтому я спрашиваю.

def isWordGuessed(secretWord, lettersGuessed): 
    guessed = [] 
    l= str(lettersGuessed) 
    s= list(secretWord) 
    for i in l: 
     if i in s: 
      guessed.append(i) 
      guessed.sort() 
      s.sort() 
    return guessed == s 

Вот один из тестов с грейдера в качестве примера:

isWordGuessed('durian', ['h', 'a', 'c', 'd', 'i', 'm', 'n', 'r', 't', 'u'])

+1

Если этот вопрос касается исключительно улучшения кода, я предлагаю его вместо этого перейти на codereview.stackexchange.com. Вы заявляете, что код работает, поэтому здесь нечего «решать», кроме улучшений существующего рабочего кода. – blacksite

+1

@not_a_robot Хотя [Code Review] (http://codereview.stackexchange.com/tour) может быть хорошим местом, чтобы предлагать идти по этому типу вопроса, мы должны избавиться от привычки посылать вопросников. Пожалуйста, прочитайте [this] (http://meta.codereview.stackexchange.com/questions/5777/a-guide-to-code-review-for-stack-overflow-users) мета-сообщение для уточнения. – idjaw

+0

Не видел этого, спасибо. Я вижу это в любом случае. – blacksite

ответ

6

Что-то вроде этого является довольно коротким:

def isWordGuessed(secretWord, lettersGuessed): 
    return all([c in lettersGuessed for c in secretWord]) 

Для каждого символа в secretWord убедитесь, что он находится в lettersGuessed. Это в основном создает список логических элементов, а встроенный all возвращает True, если каждый элемент в массиве True.

Кроме того, FWIW: Idiomatic python будет использовать символы подчеркивания, а не верблюд.

+0

О, я вижу, это отличное решение. Я пробовал делать это так, используя все, кроме моего кода, который не проходил. Наверное, я просто использовал все неправильно. Я использовал 'all (x == lettersGuessed для x в secretWord)', потому что я все еще новичок, и это единственный способ, которым я знаю, как использовать все. Спасибо за урок! - Кроме того, я обычно использую также подчеркивания, но я просто использую имена функций, аргументы и переменные, указанные в описании присваивания, чтобы избежать путаницы. –

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