How to declare a global variable used for input in Python

五迷三道 提交于 2021-01-29 13:18:30

问题


Hello I am new user to Python - Could somebody help me understand why i cant seem to declare this global variable col_number. I want to try and use the col_number to pass it to the plotting function. Ive tried declaring it as a global variable but I am just guessing now - not really sure how to fix this. Thanks

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()
            if user_input in ('apples', 'pears', 'oranges', 'quit'):
# the user = int(0),int(1), int(2) values just assign a different column numnber
                if user_input == 'apples':
                    col_number = int(0)
                if user_input == 'pears':
                    col_number = int(1)
                if user_input == 'oranges':
                    col_number = int(2)
                if user_input == 'quit':
                    break
                return user_input
    print(get_input('Enter apples, oranges or q to quit'))
# ######end of input#########################################################################

    for item in my_list:
        print(col_number)

        x, y = np.loadtxt(item + '_'+'Test.csv', skiprows=1, usecols=[0, col_number], 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()

input file

Name1,Name2,Name3,Name4,Name5,Name6,Name7,Name8 1,10,19,4,Blue,6,7,8 2,11,20,4,Blue,6,7,8 3,12,21,4,Blue,6,7,8 4,13,22,4,Green,6,7,8 5,14,23,4,Green,6,7,8 6,15,24,4,Blue,6,7,8 7,16,25,4,Blue,6,7,8 8,17,26,4,Yellow,6,7,8 9,18,27,4,Yellow,6,7,8


回答1:


It's probably a good idea to avoid global state.

col_number is in no way global here. col_number is local variable in your function get_input

To make it global and access it from your function add the statement global col_number at the top of your function (before you use it).

If you change your get_input() function to return col_number you don't have to store any global state.



来源:https://stackoverflow.com/questions/61068235/how-to-declare-a-global-variable-used-for-input-in-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!