#python #while-loop
Вопрос:
Каждый раз он будет возвращать один последний элемент, введенный из входных данных. Я новичок в кодировании и python, извините, если это глупый вопрос.
cars = {}
while True:
models = input('Please enter car model name: ')
colors = input('Please enter car color: ')
cars[models] = colors
another = input('Do you want to register another car? (y/n): ')
if another == 'y':
continue
else:
break
print(cars)
Он возвращается:
Please enter car model name: bmw
Please enter car color: red
Do you want to register another car? (y/n): y
Please enter car model name: bmw
Please enter car color: blue
Do you want to register another car? (y/n): y
Please enter car model name: merc
Please enter car color: black
Do you want to register another car? (y/n): n
{'bmw': 'blue', 'merc': 'black'}
Он не вернул {«bmw»:»красный»}
Комментарии:
1. Блок, который начинается
another =
и заканчивается,break
должен иметь отступ, чтобы находиться внутри цикла while.2. Извините, отредактировал сообщение. Другой= имеет отступ в моем коде.
3. По — моему, все в порядке. Я запустил ваш код и получил словарь с несколькими автомобилями и цветами (после ввода нескольких автомобилей и цветов). Если вы хотите иметь возможность иметь автомобили одной модели, но разных цветов, я бы предложил сделать это списком кортежей вместо словаря.
Ответ №1:
Я думаю, что вы хотите сохранить несколько цветов для каждой представленной модели?
В этом случае рассмотрите возможность использования добавления списка вместо присвоения значения.
from collections import defaultdict
cars = defaultdict(list)
while True:
model = input('Please enter car model name: ')
color = input('Please enter car color: ')
cars[model].append(color)
another = input('Do you want to register another car? (y/n): ')
if another != 'y':
break
print(cars)
В случае, если вы хотите сохранить список наборов «модель, цвет», используйте список вместо dict, так как dict может хранить только одно (последнее) значение для одного и того же ключа.
cars = []
while True:
model = input('Please enter car model name: ')
color = input('Please enter car color: ')
cars.append([model, color])
another = input('Do you want to register another car? (y/n): ')
if another != 'y':
break
print(cars)
Если вы объедините один из вариантов с какой-либо структурой (например NamedTuple
, или Dataclasses
, у вас может быть более структурированный список с именованными свойствами
Ответ №2:
Если вы введете одну и ту же модель несколько раз, предыдущий цвет для этой модели будет перезаписан в словаре. Это связано с тем, что словарь сохранит только одно значение для данного ключа.
Попробуйте использовать разные модели, и у вас будет несколько пар ключ/значение.
Please enter car model name: ford
Please enter car color: blue
Do you want to register another car? (y/n): y
Please enter car model name: chevy
Please enter car color: red
Do you want to register another car? (y/n): n
{'ford': 'blue', 'chevy': 'red'}
Ответ №3:
cars = {}
def inputcars():
models = input('Please enter car model name: ')
colors = input('Please enter car color: ')
cars[models] = colors
another = input('Do you want to register another car? (y/n): ')
if another == 'y':
inputcars()
inputcars()
print(cars)
Please enter car model name: ford
Please enter car color: red
Do you want to register another car? (y/n): y
Please enter car model name: subaru
Please enter car color: blue
Do you want to register another car? (y/n): n
{'ford': 'red', 'subaru': 'blue'}
Комментарии:
1. как это отвечает на вопрос?
2. исходный код был нарушен из-за отступа за пределами цикла while, я предоставил альтернативу