2013-05-08 1 views
0

Я ищу, чтобы создать на основе Python словарный запас для моего маленького кузена, который будет использоваться для изучения. Цель программы - отобразить слово, а затем ей нужно будет ввести определение и проверить его. Мне было интересно, есть ли лучший способ сделать это с помощью списков массивов:Python Vocab Checker

vocab = ['Python','OSX'] 
definition = ['programming language','operating system'] 

Это лучший способ сделать это? И если да, то как у меня программа случайно отображает вокаб, а затем проверяет определение. Любая помощь будет принята с благодарностью. Спасибо вам, ребята.

Хорошо. Так что это то, что я до сих пор .... #Russian перевод Программа

import os 
import random 

#Asks users if they want to add more vocabulary 
word_adder=raw_input("Add more words? If yes, press 1: ") 
with open("Russian_study.txt","a") as f: 
while word_adder=="1": 
    word=raw_input("Enter word: ") 
    translation=raw_input("Word translation: ") 
    f.write("'{0}':{1},".format(word,translation)) 
    word_adder=raw_input("Add another word? If yes, press 1: ") 

#Checks to see if file exists, if not one is created 
with open("Russian_study.txt","a") as f: 
pass 

os.system('clear') 
print("Begin Quiz") 

#Begin testing user 
with open("Russian_study.txt","r") as f: 
from random import choice 
question = choice(list(f)) 
result = raw_input('{0} is '.format(question)) 
print('Correct' if result==f[question] else ':(') 

Однако мой выход

Begin Quiz 
'Один':'One', is 

Как сделать это только отображать один и проверить пользовательский ввод против один?

+0

Возможно, вы предпочитаете сопоставление 'dict', а не пару списков. – wim

ответ

3

использование словаря:

d={'Python':'programming language', 'OSX':'operating system'} 

from random import choice 
q = choice(list(d)) 
res = input('{0} is:'.format(q)) 
print('yay!' if res == d[q] else ':(') 

[если вы используете питона < 3,0, используйте raw_input() вместо input()]

простейшего (и не безопасно!) Способ записи/считывания из файла :

with open('questions.txt', 'w') as f: 
    f.write(repr(d)) 

'questions.txt' будет иметь следующую строку:

`{'Python':'programming language', 'OSX':'operating system'}` 

так для прочтения вы можете сделать

with open('questions.txt') as f: 
    q=eval(f.read()) 

и теперь д и d равны. не используйте этот метод для «реального» кода, так как «question.txt» может содержать вредоносный код.

+0

В качестве дополнительной функции вы можете попытаться нормализовать ввод. Например, последняя строка может быть 'print ('yay!', Если res.strip(). Lower() == d [q] else ':(')' и т. Д., С другими способами сделать его более удобным для пользователя, friendly – jsvk

+0

Спасибо. Если бы я собирался поместить словарь в текстовый файл, как бы он был отформатирован внутри файла. – h3tr1ck

+0

Я редактировал, чтобы читать и писать файл. Если вы хотите его форматировать, посмотрите 'format' в docs – Elazar

0

1) Вы можете использовать random.choice() для случайного выбора элемента из своего словарного списка (или клавиш() словаря).

2) Решение, когда ответ достаточно близок к определению, сложнее. Вы можете просто найти строку ответа для определенных ключевых слов. Или, если вы хотите усложниться, вы можете вычислить что-то вроде расстояния Левенштейна между двумя строками. Вы можете прочитать о расстоянии L здесь: http://en.wikipedia.org/wiki/Levenshtein%5Fdistance. И есть рецепты python онлайн для вычисления расстояния L.

+0

Если это всего лишь учебное пособие и не предназначен для оценки кого-то, тогда достаточно просто отобразить определение после того, как вы наберете его. Тогда студент может решить, насколько они близки. – Patashu

+0

Я думаю, вы может использовать Google и посмотреть, исправляет ли он вас правильную вещь ... – Elazar

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

  • Нет связанных вопросов^_^