#python #nested-lists
Вопрос:
Задание требует, чтобы я сохранил новые значения в списке, а затем обновил список списков с их помощью. Программа, кажется, работает нормально, пока я не вызову «ежемесячно» после вызова «редактировать». Я предполагаю, что моя проблема где-то в функции «редактировать», но на всякий случай, если я дурак, я включил весь свой код.
Функции и основной метод находятся в отдельных файлах
def Monthly(mSales):
for row in mSales:
print(row[0] ' - ' row[1])
print()
def Yearly(mSales):
total = sum(int(monthlySales) for _, monthlySales in mSales)
average = total/ len(mSales)
print("Yearly Total: ",total)
print("Monthly Average: ",round(average, 2))
print()
def Edit(mSales):
editMonth = input("Three-letter Month: ")
#index = 0
months = ['Jan','Feb','Mar','Apr',
'Jun','Jul','Aug','Sep',
'Oct','Nov','Dec']
if editMonth not in months:
print("Invalid three-letter month.")
print()
return
new_sales = input("Sales Amount: ")
#index = months.index(month)
#print(index)
new_list = [editMonth, str(new_sales)]
#mSales[index][1] = new_list
for i in range(len(mSales)):
if mSales[i][0] == editMonth:
mSales[i] = new_list
break
print("Sales amount for {} was modified".format(editMonth))
print()
import ch06_Monthly_Sales_commandFunctions_CJR as Func
def main():
#initialize monthly sales list of lists
monthlySales = [['Jan','616'],['Feb','466'],['Mar','796'],
['Apr','238'],['May','310'],['Jun','726'],
['Jul','987'],['Aug','604'],['Sep','951'],
['Oct','958'],['Nov','238'],['Dec','610']]
print("Monthly Sales program")
print("")
print("COMMAND MENU")
print("monthly - View monthly sales")
print("yearly - View yearly summary")
print("edit - Edit sales for a month")
print("exit - Exit program")
print(" ")
while True:
command = input("Command: ")
#if statements correlating to command functions
if command == 'exit':
print("Bye!")
break
elif command == 'monthly':
Func.Monthly(monthlySales)
elif command == 'yearly':
Func.Yearly(monthlySales)
elif command == 'edit':
monthlySales = Func.Edit(monthlySales)
elif command != 'exit' or 'monthly' or 'yearly' or 'edit':
print("Invalid command.")
Комментарии:
1. Похоже
'May'
, что вы пропустили свой список месяцев вEdit
(в году 12 месяцев, а не 11). Это было намеренно?2. Вы знаете об ошибке, но какая строка ее вызывает? Это помогает диагностировать, когда дается полная обратная связь.
3. Нет, опустить «май», конечно, не было намеренным. Спасибо за отзыв, я включу более подробную информацию в следующий раз.
Ответ №1:
Вы ничего не возвращаете Edit
, и этот None
результат присваивается monthlySales
, в который вы переходите Monthly()
при следующем вызове, что приводит к ошибке.
Если вы добавляете return mSales
в свою Edit()
функцию, ваш код работает должным образом.
В вашем коде также есть некоторые проблемы со стилем, но это выходит далеко за рамки того, о чем вы спрашиваете :).
Комментарии:
1. Спасибо, это было все, я чувствую себя глупо, аф. Что касается моих проблем со стилем, надеюсь, они улучшатся с опытом/временем.
2. Нет проблем, требуется мужество, чтобы показать свой код на SO, но именно так вы учитесь, и мы все там были. Если вы считаете, что ответа достаточно, пожалуйста, поставьте галочку, чтобы он больше не оставался без ответа — и помогите кому-нибудь другому в этом как-нибудь, если хотите.