У меня есть школьное задание, где он запрашивает ряд пользовательских данных, определяющих, хочет ли пользователь молоко, сок, его размер. Например, молоко стоит 4,00 доллара, а обновление до большого стоит 0,40 доллара. В конце вывод должен быть таким, как например.
Большое молоко, стоимость: $ 4.55
Моя проблема в том, как мне присвоить значение каждому соответствующему строковому вводу? В конце следующего кода стоимость просто выплевывается для суммы строк, в отличие от фактического суммирования стоимости каждой строки и вывода общего числового значения. Я просто не могу понять, что мне здесь делать.
Разбейте проблему на отдельные шаги, а затем займитесь поиском в Google и написанием кода. Ваш компьютер не взорвется, если вы сделаете ошибку. Я понимаю, что это пугает, но вы действительно не научитесь, не облажавшись в 99% случаев вначале. Знание того, почему 10 подходов к проблеме не работают, научит вас большему, чем получение единственного подходящего подхода.
Вы должны прочитать это, прежде чем спрашивать, нужна ли вам реальная помощь. Пожалуйста, разместите свой код.
Вы, вероятно, можете использовать для этого dict
. Трудно дать более конкретный совет, не видя своего кода.
@ Mureinik @ PM2Ring @ AlanGarrido С тех пор я добавил свой код
Ваши askSize, askBeverage, askFlav являются строками, поэтому вы не можете складывать их, не превращаясь в числа. Самое простое решение - заменить их на float.
subtotal=float(askSize) + float(askBeverage) + float(askFlav)
print("For {}, a {} {}, with {:.2f} flavoring, cost: {}".format(askName,askSize,askBeverage,askFlav, subtotal))
Похоже, вы только начали изучать программирование. Python - хороший язык для начала. Пожалуйста, наслаждайтесь!
Вам нужна переменная subtotal
, которую вы никогда не объявляли, а затем после каждого выбора параметра вы хотите, чтобы +=
увеличивал ее:
subtotal = 0
askName = str(input("What is your name?")).title()
askBeverage = str(input("What type of beverage would you like?")).title()
if askBeverage.lower() in ("t", "tea"): #ensures any variation of upper/lowercase will work
subtotal += 1.50
askSize = str(input("Would you like a small, medium, or large Tea?")).title() # SIZE
if askSize.lower() in ("small", "s"):
subtotal += 0
elif askSize.lower() in ('medium', 'm'):
subtotal += .75
elif askSize.lower() in ('large', 'l'):
subtotal += 1.75
else:
print("Invalid size specified.")
sys.exit()
askFlav =str(input("Any flavourings for your Tea? Your options are mint, lemon, or none")).title() # FLAVOURING
if askFlav.lower() in ("m", "mint"):
subtotal += .50
elif askFlav.lower() in ("l", "lemon"):
subtotal += .25
elif askFlav.lower() in ('none', 'n'):
subtotal += 0
else:
print("Invalid flavour specified.")
sys.exit()
Сопоставьте askSize.lower()[0]
в словаре со значениями
@roganjosh, вы хотите, чтобы я реализовал словари, кому-то, кто изо всех сил пытается сохранить текущий промежуточный итог после выбора параметров O.o
@roganjosh он заявил о своей школьной работе, и я сужу по заданию, если бы он подошел к своему учителю со словарем, сортируя призы и размеры предметов, что вызвало бы некоторые опасения
Достаточно честно, я тебя отпущу :)
В последней строке для расчета стоимости:
subtotal=(askSize + askBeverage + askFlav)
Вы не суммируете переменные, которые вы определили в верхней части файла (с затратами), а объединяете строки, введенные пользователем. Например, askSize
может быть строкой "small". Итак, то, что вы здесь делаете, можно записать как:
subtotal=("small" + "tee" + "lemon")
В Python использование +
между строками объединяет их. Это означает, что он будет добавлять строки одну за другой, чтобы сделать более крупную. Пример: "foo" + "bar" = "foobar"
.
Если вы хотите сослаться на стоимость каждого варианта, одно решение (но есть и другие) заключалось бы в использовании словаря для хранения затрат вместо нескольких переменных, как вы:
# Dictionary of costs
costs = {"tea": 1.50,
"coffee": 1.50,
"small": 0,
"medium": 0.75,
"large": 1.75,
"mint": 0.50,
"lemon": 0.25,
"chocolate": 0.75,
"vanilla": 0.25,
"none": 0
}
Затем, чтобы получить число, соответствующее строке, вы получаете элементы из словаря:
tea_cost = costs["tea"] # tea_cost will be equal to 1.50
ask_size_cost = costs[askSize] # ask_size_cost will be equal to the cost of the asked size
Теперь легко узнать общую стоимость:
total_cost = costs[askSize] + costs[askBeverage] + costs[askFlav]
Конечно, позаботьтесь о строковых регистрах, в моем примере все должно быть в нижнем регистре.
Надеюсь, это поможет !
NB: вы можете внести множество улучшений в остальную часть вашего кода, не стесняйтесь читать некоторый код Python в Интернете, чтобы улучшить его.
Хороший совет, но код расчета цены будет работать только в том случае, если вводимые пользователем данные точно соответствуют ключам словаря.
Я думаю, что "тройник" - это опечатка, в отношении комментария от PM 2Ring выше. Но для целей этого упражнения я думаю, что этого подхода достаточно, чтобы проиллюстрировать путь вперед. Вы можете вызвать .lower()
при вводе пользователя, чтобы получить лучшую скорость попадания, и использовать costs.get()
, который вернет None
, если ключ не найден, чтобы сделать его более надежным.
Помогите нам помочь вам и поделитесь кодом, который у вас есть.