Python: динамическая вставка пользовательских данных в двухмерный список - PullRequest
0 голосов
/ 13 января 2019

Я пытаюсь создать таблицу для еженедельных продаж от поставщика, которая выглядит следующим образом:

Monday    Tuesday    Wednesday    
50        80         10
54        98         7
29        40         80

Я пытаюсь заставить пользователя вставлять ежедневные продажи, вот что у меня есть:

weekly_sales_list = [['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday', []]]

    for i in range(len(weekly_sales_list)):
        for j in range(len(weekly_sales_list[i])):
            weekly_sales_list[i][j] = input('input value for ' + weekly_sales_list[i][j])
    print(weekly_sales_list)

Я не уверен, что это лучший способ настроить двухмерный список, и я также получаю следующую ошибку:

TypeError: can only concatenate str (not "list") to str

Любая помощь будет оценена

Ответы [ 2 ]

0 голосов
/ 13 января 2019

Используя списки, как в вашем вопросе, немного измените структуру:

weekly_sales_list = [['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'],[]]

Определить метод сбора данных от пользователя (from random import randint для моделирования):

def ask_for_input(n):
  tmp = []
  for i in range(7):
      # user_input = input('input value for ' + weekly_sales_list[0][i])
      # print('input value for ' + weekly_sales_list[0][i])
      user_input = randint(0,2) # to simulate user input (from random import randint)
      tmp.append(user_input)
  weekly_sales_list[1].append(tmp)

Цикл для запроса ввода пользователя:

for n in range(3):
  # print('week - ' + str(n) )
  ask_for_input(n)

Подготовьте данные и таблицу для печати:

tot_per_day = [sum(col) for col in zip(*weekly_sales_list[1])]
tot_per_day = tot_per_day + [sum(tot_per_day)]
headers = weekly_sales_list[0] + ['total']
row_format ="{:>12}"*9

Затем распечатайте:

print (row_format.format("", *headers))
for row in weekly_sales_list[1]:
  print (row_format.format("", *(row + [sum(row)])))
print ("-"*12*9)
print (row_format.format("", *tot_per_day))

Это случайный результат:

# Monday     Tuesday   Wednesday    Thursday      Friday    Saturday      Sunday       total
#      0           1           1           0           2           0           1           5
#      1           2           0           2           0           0           1           6
#      1           2           0           0           1           0           2           6
# ------------------------------------------------------------------------------------------
#      2           5           1           2           3           0           4          17
0 голосов
/ 13 января 2019

Используйте словарь с названием недели в качестве ключа и данными за эту неделю в качестве значения.

import itertools
data = {'Monday':[],
        'Tuesday':[],
        'Wednesday':[],
        'Thursday':[],
        'Friday':[],
        'Saturday':[],
        'Sunday':[]}
while 1:
    info = input('Enter day and value (e.g. "Monday 26") or nothing to stop: ')
    if not info:
        break
    k,v = info.split()
    data[k].append(v)

А затем распечатайте таблицу, отобразив заголовок:

print(*(f'{day:<10}' for day in data))

Наконец, транспонируйте ваши данные, используя itertools.zip_longest для обработки дней с меньшим количеством значений, чем у других:

for group in itertools.zip_longest(*data.values(), fillvalue=''):
    print(*(f'{value:<10}' for value in group))

Пример ввода:

Enter day and value (e.g. "Monday 26") or nothing to stop: Monday 3
Enter day and value (e.g. "Monday 26") or nothing to stop: Monday 4
Enter day and value (e.g. "Monday 26") or nothing to stop: Monday 5
Enter day and value (e.g. "Monday 26") or nothing to stop: Tuesday 6
Enter day and value (e.g. "Monday 26") or nothing to stop: Tuesday 7
Enter day and value (e.g. "Monday 26") or nothing to stop: Wednesday 8
Enter day and value (e.g. "Monday 26") or nothing to stop: Thursday 9
Enter day and value (e.g. "Monday 26") or nothing to stop:

Пример результата:

Monday     Tuesday    Wednesday  Thursday   Friday     Saturday   Sunday
3          6          8          9
4          7
5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...