L oop для непрерывного ввода, вывод данных из списка в файле, выход, если ввод равен q, или выход - PullRequest
0 голосов
/ 08 мая 2020

У меня есть следующий код, который извлекает данные из заданного текстового файла на основе пользовательского ввода:

def read_file():

    students = []
    f = open('file.txt', 'r')
    for line in f.readlines():
        data = {}
        lines = ' '.join(line.split()).split()
        data[''] = int(lines[5])
        data[''] = float(lines[3])
        data[''] = float(lines[2])
        data[''] = line[1:6].rstrip(' ')
        students.append(data)
def search_student(students):
    student_search = input('Search for a student: ').lower()
    while student_search != 'q' and student_search != 'quit':
        for student in students:
            if student_search in student['Student Info'].lower():
                print_student_info(student)
                break
        student_search = input('Search for a student: ').lower()

Эта программа возвращает следующий вывод:

>>> Search for a student: 
>>> allen
>>> word: Allen, Age: 12, Height: 5'4, GPA: 3.8
>>> Search for a student:
>>> quit
>>> 

Ввод предложит программе извлечь определенные c данные из текстового файла на основе слова, введенного пользователем. Все работает нормально. Я не могу понять, как добавить функцию, которая будет запрашивать другой ввод, если слово не найдено в файле.

Прямо сейчас, если слово не найдено в файле, программа просто просит о другом поиске. Однако мне нужно, чтобы он сказал что-то вроде «слово не найдено в текстовом файле», прежде чем запрашивать другой поиск.

Это результат, который я ищу:

>>> Search for a student:
>>> Jim
>>> Word: Jim, Age: 20, Height: 6'1, GPA: 2.5
>>> Search for a student:
>>> Molly
>>> Your searched student could not be found.
>>> Search for a student:
>>> Eddy
>>> Word: Eddy, Age: 15, Height: 5'6, GPA: 4.0
>>> Search for a student:
>>> quit
>>> 

Я чувствую что-то вроде этого должно работать:

def search_student(file):
student_search = input('Search for a student: ').lower()
while student_search != 'q' and student_search != 'quit':
    for student in students:
        if student_search in student['Student Info'].lower():
            print_student_info(student)
            student_search = input('Search for a student: ').lower()
        else:
            print("Your searched student could not be found.")
            student_search = input('Search for a student: ').lower()

Но он просто выводит Ваш искомый ученик не может быть найден независимо от того, какое слово я ввожу. Даже ввод ученика, который работал в первом коде, теперь больше не работает. Даже ввод "quit" больше не приводит к выходу из l oop. Пожалуйста помоги.

Новый вывод:

>>> Search for a student: 
>>> Allen
>>> Your searched student could not be found.
>>> Search for a student:
>>> quit
>>> Your searched student could not be found. 
>>> Search for a student:

Ответы [ 4 ]

0 голосов
/ 11 мая 2020

Итак, мне потребовалось время, чтобы понять, в чем проблема. Во-первых, я предположил, что ваш file.txt имеет следующий формат:

Allan 12 5'4 3.8    
Eddy 15 5'6 4.0  

И поля: Имя, Возраст, Рост, Средний балл. Итак, вот функция для чтения текстового файла (обратите внимание на изменения):

def read_file():
    students = []
    f = open('file.txt', 'r')
    for line in f.readlines():
        data = {}
        lines = ' '.join(line.split()).split()
        data['Name'] = str(lines[0])
        data['Age'] = int(lines[1])
        data['Height'] = str(lines[2])
        data['GPA'] = float(lines[3])
        data[''] = line[1:4].rstrip(' ')
        students.append(data)
    return students

Затем для поиска информации о студенте я использовал следующий код:

def search_student(students):
    found = False
    student_search = input('Search for a student: ').lower()
    while student_search != 'q' and student_search != 'quit':
        for student in students:
            if student_search in student['Name'].lower():
                print_student_info(student)
                found = True
                break
        if found==False:
            print('Your searched student could not be found.')
        student_search = input('Search for a student: ').lower()

И, наконец, для печати ученика info:

def print_student_info(student):
    print('Word: {}, Age: {}, Height: {}, GPA: {}'.format(student['Name'],student['Age'],student['Height'],student['GPA']))    

После определения этих функций теперь мы можем запустить код с этими двумя строками:

students = read_file()
search_student(students)

Вот результаты, которые я получил:

Search for a student: molly
Your searched student could not be found.
Search for a student: david
Your searched student could not be found.
Search for a student: allan
Word: Allan, Age: 12, Height: 5'4, GPA: 3.8
Search for a student: q
0 голосов
/ 08 мая 2020

В коде есть одна ошибка. он говорит for f in file, но затем снова использует file. Я думаю, вам нужно изменить эту часть на эту:

        for f in file:
            if user_search in f['Data Info'].lower():
                print(data_info)
                break
0 голосов
/ 08 мая 2020

Я не знаю, какие у вас данные, а что Data Info, но если у вас есть только файл, вы можете использовать приведенный ниже код.

def info_search(lines):
    user_search = ''
    while True:
        user_search = input('Search for a word: ').lower()
        if user_search in ("q", "quit"):
            break
        for line in lines:
            if user_search in line.lower():
                print("Your searched word[{0}] found.".format(user_search))
                break
        else:
            print("Your searched word[{0}] could not be found.".format(user_search))

with open(filename, 'r') as file:
    lines = file.readlines()

info_search(lines)
0 голосов
/ 08 мая 2020

Проблема в вашем коде в том, что вы используете l oop для поиска слова. Если первое слово в файле не равно искомому слову, оно войдет в условие else. Вам нужно переместить это условие else для выполнения после окончания for l oop.

def info_search(file):
    user_search = input('Search for a word: ').lower()
    while user_search != 'q' and user_search != 'quit':
        for f in file:
            if user_search in f['Data Info'].lower():
                print(data_info)
                user_search = input('Search for a word: ').lower()
        else:
            print("Your searched word could not be found.")
            user_search = input('Search for a word: ').lower()
    return
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...