Как я могу использовать while l oop, чтобы добавить словарь с произвольным количеством ключей и несколькими значениями из пользовательского ввода - PullRequest
0 голосов
/ 20 января 2020
print('Scenario Analysis')

profit_dict = {}

while True:
    item1= input ('What is the item: ')   
    price_good= int (input('What is the expected profit of {}, in the best case scenario: '.format(item1)))
    price_bad = int( input ('What is the expected profit of {}, in the worst case scenario: '.format(item1)))
    user_choice= input('Do you have anymore items: ')
    if user_choice in ['Yes','yes','y','Y']:
            pass
    else:
            break

profit_dict[item1]=price_good,price_bad

#EVERYTHING FROM HERE ON IS NOT RELEVANT DIRECTLY TO QUESTION BUT PROVIDES CONTEXT

print('This is your best profit outcome: ')
for values in good_dict.values():
    total_list=(max(values))
    print(total_list)

print('This is your worst profit outcome: ')

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

Заранее спасибо за любые ответы.

Ответы [ 2 ]

1 голос
/ 20 января 2020

Это что-то вроде того, что соответствует вашим ожиданиям:

print('Scenario Analysis')

profit_dict = {}

while True:
   item1= input ('What is the item: ')
   price_good= int (input('What is the expected profit of {}, in the best case scenario: '.format(item1)))
   price_bad = int( input ('What is the expected profit of {}, in the worst case scenario: '.format(item1)))

   if item1 in profit_dict.keys():
       profit_dict[item1]['good'].append(price_good)
       profit_dict[item1]['bad'].append(price_bad)

   else:
       profit_dict[item1]={'good':[price_good],'bad':[price_bad]}

   user_choice= input('Do you have anymore items: ')
   if user_choice in ['Yes','yes','y','Y']:
        pass
   else:
        break

=> В результате вы получите словарь словаря: {'Item1': {'good': [1,2,3] , «плохо»: [0,0,1]}, «Item2»: {«хорошо»: [10,20,30], «плохо»: [1,2,3]},, ..., ' ItemX ': {' good ': [10,20,30],' bad ': [1,2,3]}}

И после этого вы можете попытаться вызвать печать с чем-то вроде:

print(f'This is your best profit outcome: {max(profit_dict[item]['good'])}')
print(f'This is your worst profit outcome: {min(profit_dict[item]['bad'])}')

РЕДАКТИРОВАТЬ: Не уверен, что понимаю ваш комментарий: если вы ищете конкретный c элемент:

item='item1'
print(f'This is your best profit outcome: {max(profit_dict[item]['good'])}')

, если элемент не известен, вы можете исследовать словарь путем итерации:

for key, value in profit_dict.items():
    for key2, value2 in value.items():
        print(f"This is your best profit outcome for {key}:{max(profit_dict[item]['good'])}")

он напечатает вас: Это ваш лучший результат прибыли для Item1: 3 Это ваш лучший результат прибыли для Item2: 30 ... Это ваш лучший результат прибыли для ItemX: 30

И если вы хотите узнать предмет с большим «добром», это решение не самое лучшее, но вы все равно можете сделать итерацию:

previous_best_value=0
for key, value in profit_dict.items():
    for key2, value2 in value.items():
        best_value=max(profit_dict[key]['good'])
        if best_value>previous_best_value:
            previous_best_value=best_value
            best_item=key

print(f"The item:{key} has the best outcome {previous_best_value}")

Надеюсь, вы найдете то, что ожидали.

1 голос
/ 20 января 2020
profit_dict = {}

while True:
    item1= input ('What is the item: ')   
    price_good= int (input('What is the expected profit of {}, in the best case scenario: '.format(item1)))
    price_bad = int( input ('What is the expected profit of {}, in the worst case scenario: '.format(item1)))
    user_choice= input('Do you have anymore items: ')
    profit_dict[item1]=[price_good,price_bad]    
    if user_choice in ['Yes','yes','y','Y']:
            continue
    else:
            break

print(profit_dict)

Это то, что вы ищете? Это просто продолжает добавлять в словарь, пока пользователь не введет Да.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...