Как отобразить все мои входные данные после каждой команды в Python

#python

#python

Вопрос:

У меня проблема.

Я хочу отобразить все мои записи в команде «просмотр», но она отображает только последнюю запись.

Как мне решить проблему?

Пожалуйста, помогите мне, спасибо!

мой код:

 initial_money = int(input('How much money do you have? ')) 

def records():
    return

def add(records):
    records = input('Add an expense or income record with description and amount:n').split()
    global rec
    rec = records[0]
    global amt
    amt = records[1]
    global initial_money
    initial_money  = int(amt)
    
def view(initial_money, records):
    print("Here's your expense and income records:") 
    print("Description          Amount")
    print("-------------------  ------")
    print('{name:<20s} {number:<6s}'.format(name = rec,number = amt))
    print('Now you have {} dollars.'.format(initial_money))

while True:
    command = input('nWhat do you want to do (add / view / delete / exit)? ') 
    if command == 'add':
        records = add(records)
    elif command == 'view':
        view(initial_money, records)
  

Вывод

 How much money do you have? 100

What do you want to do (add / view / delete / exit)? add
Add an expense or income record with description and amount:
tomato -50

What do you want to do (add / view / delete / exit)? add
Add an expense or income record with description and amount:
salary 100

What do you want to do (add / view / delete / exit)? view
Here's your expense and income records:
Description          Amount
-------------------  ------
salary               100   
Now you have 150 dollars.
  

вывод, который я хочу:

 -------------------  ------
tomato               -50
salary               100
Now you have 150 dollars.   
  

Ответ №1:

Вместо этого я буду использовать словарь для их хранения:

 initial_money = int(input('How much money do you have? ')) 

mr = {}

def records():
    return

def add(records):
    records = input('Add an expense or income record with description and amount:n').split()
    global rec
    rec = records[0]
    global amt
    amt = records[1]
    global mr
    global initial_money
    mr[rec] = int(amt)
    initial_money  = mr[rec]
    
    
def view(initial_money, records):
    print("Here's your expense and income records:") 
    print("Description          Amount")
    print("-------------------  ------")
    for r,a in mr.items():
      print('{name:<20s} {number:<6s}'.format(name = r,number = str(a)))

    print('Now you have {} dollars.'.format(initial_money))

while True:
    command = input('nWhat do you want to do (add / view / delete / exit)? ') 
    if command == 'add':
        records = add(records)
    elif command == 'view':
        view(initial_money, records)
  

Тест:

 How much money do you have? 100         

What do you want to do (add / view / delete / exit)? add
Add an expense or income record with description and amount:
tomato -50

What do you want to do (add / view / delete / exit)? add
Add an expense or income record with description and amount:
salary 100

What do you want to do (add / view / delete / exit)? view
Here's your expense and income records:
Description          Amount
-------------------  ------
tomato               -50   
salary               100   
Now you have 150 dollars.
  

Комментарии:

1. Это решает мою проблему, но общая сумма кажется неправильной.

2. О, теперь это правда. Большое спасибо!

Ответ №2:

Вам нужно внести записи в список вставленных вами записей. В настоящее время вы перезаписываете его каждый раз, когда вызываете add .

  1. сделайте записи массивом вне вашего основного цикла
  2. В вашем основном цикле нажмите результаты вызова для добавления в ваш массив в вашей функции просмотра
  3. затем вам нужно выполнить цикл по массиву, чтобы просмотреть все результаты.

Также для бонуса прекратите использовать global в своей функции добавления, это считается дурным тоном

Комментарии:

1. О, действительно, поэтому я должен удалить глобальный и использовать цикл.