2014-09-20 5 views
0

У меня есть текстовый файл с общей формой:Python TXT файл- Чтение и использование информации в файле

Last Name 
First Name 
Year 
Medal (This line only contains one number either 1,2,3 meaning gold,silver,bronze respectively) 

То, что я пытаюсь сделать, это иметь пользовательский ввод в году и подсчитать, сколько медалей выиграл в этом году. то есть еще одна функция, где пользователь может ввести имя и фамилию, функция должна распечатать «Джон Смит выиграл золото (1) медаль в 1864 году»

def medals(medalcount): 
    year= str(input("Please enter a year: ")) 
    with open("textfile") as f: 
      medalcount+=f.read().count(year) 
    return medalcount 

В основном я использую эту функцию для подсчета многократно вводимый пользователем строковый год появляется в txt-файле. Что касается следующей части, я все еще путаюсь, как на самом деле подходить к ней.

Пример:

Smith 
John 
1896 
1 
>>> Please enter year: 1896 
15 medals won in this year 
+0

Можете ли вы привести пример ввода? Ваше описание меня смущает. – Veedrac

+0

Теперь ваш пример текстового файла выглядит так, как будто у вас есть один файл на человека в год. Это правильно? Вы не имеете в виду файл с несколькими списками? – Newb

+0

Да, точно. Я только показывал, как выглядел весь файл. – Cos

ответ

0
def readFile(infilepath): 
    answer = {} 
    with open(infilepath) as infile: 
     for lastname in infile: 
      lastname = lastname.strip() 
      firstname = infile.readline().strip() 
      year = infile.readline().strip() 
      medal = infile.readline().strip() 

      if year not in answer: 
       answer[year] = {} 
      if lastname not in answer[year]: 
       answer[year][lastname] = {} 
      if firstname not in answer[year][lastname]: 
       answer[year][lastname][firstname] = {} 
      if medal not in answer[year][lastname][firstname]: 
       answer[year][lastname][firstname][medal] = 0 
      answer[year][lastname][firstname][medal] += 1 
    return answer 

def count(medalcounts): 
    year = input("What year would you like to check: ").strip() 
    answer = 0 
    for lastname in medalcounts[year]: 
     for firstname,medals in medalcounts[year][lastname].items(): 
      answer += sum(medals.values()) 
    print(answer, "medals were awarded in", year) 

    firstname = input("Enter first name: ").strip() 
    lastname = input("Enter last name: ").strip() 
    for year,yeard in medalcounts.items(): 
     medals = yeard[lastname][firstname] 
     for med,count in medals.items(): 
      print("In year", year, firstname, lastname, "won", count, '. gold silver bronze'.split()[med], "medals") 

ПРИМЕНЕНИЕ:

count(readFile('path/to/file')) 
+0

Я вижу, что def count не вызывает def readFile в любой момент, как он выполняет всю проверку? – Cos

+0

также что делает .items do – Cos

+0

@Cos: 'myDict.items()' дает вам список пар ключей, значений 'myDict' – inspectorG4dget

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

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