Функция, которая принимает аргументы в качестве ввода от пользователя

1

Я пытаюсь написать программу, которая принимает 2 входа от пользователя.

  1. Расположение текстового файла, содержащего массив и
  2. Столбец в массиве.

Затем я хочу извлечь этот столбец из массива и выполнить на нем функции, используя мою собственную статистику модуля.

Я попытался установить переменную, т.е.

def arcol(fname, i):
    data = np.loadtxt(fname, usecols=i)
    return data

в функции, но это не похоже на то, что для usecols строк используются usecols.

Вот код, который у меня есть, ошибка заключается в том, что переменные в print() не определены.

import numpy as np
import stats as st

def setInput1():
    fname = input("Please enter file location/path:")
    return fname

def setInput2():
    i = input("Please enter the desired column in the array:")
    return i

def arcol(fname, i):
    return np.loadtxt(fname, usecols= i)

print(st.mean(arcol(fname, i)))
  • 1
    Предполагается, что ваш входной столбец читается как строка, но arcol предполагает, что это int. Попробуй, i = int(i) . Кроме того, вы не показываете, где вызываете функции, поэтому без работоспособного примера трудно сказать, что происходит.
  • 0
    Вы никогда не определите i или fname вы проходящие в print(st.mean(arcol(fname, i))) , так что, очевидно , вы получите ошибку , говорящие вам , что они не определены
Показать ещё 1 комментарий
Теги:
function

1 ответ

1
Лучший ответ

Похоже, ваша проблема в том, что вы никогда не вызываете свои функции setInputN. Простое определение функции ничего не полезно, вы должны вызвать ее, чтобы получить ее возвращаемое значение. Я думаю, вам нужно что-то вроде этого:

print(st.mean(arcol(setInput1(), setInput2())))

Я не тестировал ваш код, поэтому может быть больше ошибок, например, проблем с типами ваших входных данных (как написано, обе функции возвращают строки, но значение, которое вы используете в качестве второго аргумента для arcol возможно, должно быть число).

Также было бы неплохо выбрать лучшие имена для ваших функций. Ни одно из функций setInputN не имеет описательного имени. arcol, может быть, немного лучше, но он настолько сокращен, что на самом деле это ничего не значит для меня, как для кого-то, кто ничего не знает о том, что он делает.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню