2013-05-08 4 views
0

Ok. Так что это то, что я до сих пор .... #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},/n".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, answer = choice(list(f)).split(':') 
    result = raw_input('{0} is '.format(question)) 
    print('Correct' if result==answer else ':(') 

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

ответ

1

Здесь есть несколько проблем.

  1. опечатка: /n вместо \n в f.write("{0}:{1},/n"...

  2. Когда вы list(f) первый раз в цикле, он вызывает f.readlines(), который перемещает чтение «указатель» до конца файла. Поэтому все последующие вызовы list(f) возвращают пустой список. Остерегайтесь этого скрытого состояния.

  3. list(f) содержит символ новой строки в строках, которые он возвращает, плюс у вас есть запятая в конце любого ответа. Итак, answer получает что-то вроде "word,\n". Перед сопоставлением answer вам необходимо снять эти два символа с result.

  4. Он перестает работать после первого вопроса, потому что у вас нет петли в допросе.

  5. Кроме того, в Python3 нет raw_input, только input.

С учетом всего этого, неподвижная программа (с минимальными изменениями) может выглядеть следующим образом:

import os 
import random 

#Asks users if they want to add more vocabulary 
word_adder=input("Add more words? If yes, press 1: ") 
with open("Russian_study.txt","a") as f: 
    while word_adder=="1": 
     word=input("Enter word: ") 
     translation=input("Word translation: ") 
     f.write("{0}:{1},\n".format(word,translation)) 
     word_adder=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: 
    l = list(f) 
    from random import choice 
    while True: 
     question, answer = choice(l).split(':') 
     answer = answer[:-2] 
     result = input('{0} is '.format(question)) 
     print('Correct' if result==answer else ':(') 
+0

Ха вы просто бить меня к нему. – Ewan

+0

Вход, не работает. Он работает только при использовании raw_input. – h3tr1ck

+0

Это странно. У меня установлен Python 3.3.1, и там нет '' raw_input() '. Кроме того, нет '' raw_input() '', упомянутого в http://docs.python.org/3/library/functions.html. – fjarri

0

код, который работал для меня. Спасибо за помощь, ребята

импорт бя импорт случайных

#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},\n".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: 
    l = list(f) 
    from random import choice 
    while True: 
     question, answer = choice(l).split(':') 
     answer = answer[:-2] 
     result = raw_input('{0} is '.format(question)) 
     print('Correct' if result==answer else ':(') 
Смежные вопросы