Как l oop над операторами INPUT в Python, используя вызов функции - PullRequest
0 голосов
/ 06 апреля 2020

Я новый пользователь Python и застрял в цикле по операторам ввода, если введенные данные неверны. Я пытаюсь улучшить мой оператор ввода в коде ниже. Я пытаюсь вернуть ввод в l oop в начало и предложить пользователю ввести снова, если запись находится за пределами запрашиваемого.

Исходная рабочая версия была очень простой и просто зациклилась 3 раза (потому что я знал, что хотел только 3 входа), а затем программа была выполнена и завершена. Сейчас я пытаюсь добавить некоторые дополнительные условия в случае, если пользователь делает орфографические ошибки или хочет выйти, но затем снова получает команду ввода.

У меня периодически возникали проблемы с отсутствием переменной sample_string область за пределами функции. Затем я попытался объявить его как глобальную переменную, тогда интервалы были неправильными - так что это не сработало, поэтому любая помощь / руководство приветствуются.

Помеченный код, который я пытался заставить работать с #### Символ ############# Я пометил код, который я пытался включить между символом ####, а также код, который я пытался заменить. Любая помощь или комментарии о структуре кода приветствуются. Я ходил кругами с этим весь день. Спасибо!

from matplotlib import style
from matplotlib import pyplot as plt
import numpy as np
import csv
# import random used for changing line colors in chart
import random
from itertools import cycle

# opens a the input file and reads in the data
with open('Test_colours_in.csv', 'r') as csv_file:
    csv_reader = csv.DictReader(csv_file)
# prints list of unique values in column 5 of csv of input file
    my_list = set()
    for line in csv_reader:
        my_list.add(line['Name5'])
    print(my_list)

# takes these unique values and creates files associated with each unique value
    for item in my_list:
        with open(item + '_'+'Test.csv', 'w', newline='') as new_file:
            fieldnames = ['Name1', 'Name2', 'Name3', 'Name4', 'Name5', 'Name6', 'Name7', 'Name8']
            csv_writer = csv.DictWriter(new_file, fieldnames=fieldnames)
            csv_writer.writeheader()

# filters the original file for each item in the list of unique values and writes them to respective file
            csv_file.seek(0)  # Reposition to front of file
            filtered = filter(lambda r: r['Name5'] == item, csv_reader)
            for row in filtered:
                csv_writer.writerow(row)

# Section of code below plots data from each of the filtered files

#
    my_color_list = ['b', 'g', 'r', 'c', 'm', 'y', 'tab:blue', 'tab:orange', 'tab:purple', 'tab:gray', 'b', 'g', 'r',
                     'c', 'm', 'y', 'tab:blue', 'tab:orange', 'tab:purple', 'tab:gray']
# ###################################################################
# ### trying to get this to do the same as the current input commands
#     def get_input(prompt):
#         while True:
#             user_input = input(prompt).lower[0:1]
#             if user_input in ('apples', 'pears', 'oranges', 'q'):
#                 return user_input
#      print(get_input('Enter apples, oranges or q to quit'))
# #####################################################################
#
# ########To be replaced#####################################
# loops through 3 times because theres only 3 input values
    for i in range(3):
        # the user = int(0),int(1), int(2) values just assign a different column numnber
        # from the data file depending on whats inputs been entered , eg apples might
        # want the first column etc
        user_input = input('enter apples, pears or oranges, q to quit ?')
        sample_string = user_input
        if sample_string[:1] == 'q':
            break
        if sample_string[:1] == 'a':
            user = int(0)
        if sample_string[:1] == 'p':
            user = int(1)
        if sample_string[:1] == 'o':
            user = int(2)
# ######end of input#########################################################################

        for item in my_list:
            print(user)

            x, y = np.loadtxt(item + '_'+'Test.csv', skiprows=1, usecols=[0, user], unpack=True, delimiter=',')
            color = random.choice(my_color_list)
            plt.plot(x, y, color, label=item, linewidth=5)

            style.use('ggplot')

        plt.title('Data v Time')
        plt.ylabel('Data')
        plt.xlabel('Time seconds')

        plt.legend()
        plt.grid(True, color='k')
        plt.show()

составил файл входных данных ниже

Имя1, Имя2, Имя3, Имя4, Имя5, Имя6, Имя7, Имя8 1,10,19,4, Синий, 6 , 7,8 2,11,20,4, синий, 6,7,8 3,12,21,4, синий, 6,7,8 4,13,22,4, зеленый, 6,7,8 5 14,23,4, Зеленый, 6,7,8 6,15,24,4, Синий, 6,7,8 7,16,25,4, Синий, 6,7,8 8,17,26, 4, желтый, 6,7,8 9,18,27,4, желтый, 6,7,8

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...