2015-03-08 2 views
0

Я пишу слова unjumble program. Вот мой код:Распечатайте различные результаты в Python a dictionary

sortedWords = {} 
with open("/Users/xxxx/Desktop/words.txt", "r") as f: 
    for word in f: 
     word = word.strip() 
     sortFword = ''.join(sorted(word)) 
     sortedWords.setdefault(sortFword,[]).append(word) 
while True: 
jumble = input("Enter your jumbled word: ").lower() 
    sortedJumble = ''.join(sorted(jumble)) 
    if sortedJumble in sortedWords: 
     print ("Your words are:") 
     print ("\n".join(sortedWords[sortedJumble])) 
     break 
    else: 
     print ("Oops, it can not be unjumbled.") 
     break 

Код работает. Тем не менее, я хочу, чтобы моя программа была в состоянии узнать, есть ли только одно несвязанное слово или есть несколько несмешанных слов. Вот выходы, которые я хочу:

Введите ваше перемешано слово: gfoirevssne

слова Твоего прощения.

или

Введите ваше перемешаны слово: Caid

Ваши слова:

кислота

кади

CAID

Как достичь этого?

ответ

1

Вам просто нужно добавить простой тест на длину списка! Где вы теперь:

if sortedJumble in sortedWords: 
     print ("Your words are:") 
     print ("\n".join(sortedWords[sortedJumble])) 
     break 

использовать вместо:

if sortedJumble in sortedWords: 
    words = sortedWords[sortedJumble] 
    if len(words) > 1 
     print ("Your words are:") 
     print ("\n".join(words)) 
    else: 
     print ("Your word is:") 
     print (words[0]) 
    break 

Кстати, небольшое улучшение по программе было бы использовать, вместо того, чтобы просто

sortedWords = {} 

, как у вас есть сейчас,

import collections 
sortedWords = collections.defaultdict(list) 

a й, то вместо

sortedWords.setdefault(sortFword,[]).append(word) 

использование

sortedWords[sortFword].append(word) 

setdefault очень старый и немного неуклюжий подход, и, в то время как все еще поддерживается для обратной совместимости, можно рассматривать как «вытеснен» в slightly- newer collections.defaultdict, который просто создает пустой экземпляр нужного типа (часто, как здесь, пустой список), «волшебным образом появляется в нужном месте», когда контейнер индексируется ранее отсутствующим ключом.

+0

Спасибо !!! lol – Turf

+0

@Turf, всегда HTH, но почему бы не поблагодарить, не повышая (нажав на треугольник вверх в верхнем левом углу ответа) и, в конце концов, принимая (нажав на контрольную галочку), когда прошло достаточно времени, что stackoverflow позволяет вы...? –

+0

Hi, @Alex. Я нашел еще одну проблему с моей программой. Я заметил, что мои слова. Txt не были изменены на нижний регистр, поэтому я использую слово «word = word.strip(). Lower()» вместо «word = word.strip()», чтобы словарь охватывал все слова из документ. Тем не менее, я обнаружил, что моя программа обычно печатает два одинаковых слова. Например, я набрал «prisng» как беспорядочное слово, затем получил две «весны».Это потому, что в документе слова были две «весны»: одна - «весна», а другая - «Весна». Как решить эту проблему? Или есть ли какие-либо алгоритмы, которые я могу использовать, чтобы избежать этой проблемы? – Turf