Я новичок в программировании и пытаюсь создать список магазинов с товарами и ценами. То есть после ввода всех элементов функция должна вычислить сумму и остановиться, как только вы превысите бюджет. Итак, я написал что-то вроде:
def shoplist():
list = {"apple":30, "orange":20, "milk":60......}
buy=str(input("What do you want to purchase?")
If buy in list:
While sum<=budget:
sum=sum+??
shoplist ()
Я действительно не знаю, как сопоставить ввод товара с ценой в списке ... Моя первая мысль - использовать «если», но это непрактично, когда у вас более 10 элементов в списке и случайные входы. Я отчаянно нуждаюсь в помощи .... Так что любые предложения были бы хороши !! (или если у вас есть лучшее решение и вы думаете, что я пишу его таким образом, это полный мусор ... ПОЖАЛУЙСТА, дайте мне знать, что это за лучшие решения???






Код, который вы публикуете, не будет работать на Python. list является встроенным модулем, и его не следует использовать для имени переменной, и он вдвойне сбивает с толку, поскольку здесь ссылается на объект dict. input() уже возвращает str, поэтому приведение не имеет никакого эффекта. if и while должны быть в нижнем регистре, без отступов, поэтому у нас нет возможности узнать пределы этих операторов.
Так много всего не так, взгляните на это:
def shoplist(budget):
prices = {"apple":30, "orange":20, "milk":60}
# Initialise sum
sum = 0
while sum <= budget:
buy = input("What do you want to purchase?")
# Break out of the loop if the user hts <RETURN>
if not buy: break
if buy in prices:
sum += prices[buy] # This gets the price
else:
print("Invalid item", buy)
shoplist(142)
Так что же я изменил? Бюджет должен быть откуда-то, поэтому я передаю его как параметр (142, это я придумал). Я инициализирую сумму до нуля и перемещаю цикл while наружу.
Обратите внимание на большое количество пробелов - это упрощает чтение кода и не влияет на производительность.
Нужно внести множество улучшений. Пользователю должен быть показан список возможных товаров и цен, а также оставшийся бюджет для каждой покупки. Также обратите внимание, что можно использовать сверх бюджета, так как у нас может быть только 30 в бюджете, но мы все еще можем покупать молоко (а это 60) - нам нужен еще один чек (выписка if) там!
Я оставлю вам улучшения. Повеселись!
Взгляните на это как на пример:
# this is a dictionary not a list
# be careful not using python reserved names as variable names
groceries = {
"apple":30,
"orange":20,
"milk":60
}
expenses = 0
budget = 100
cart = []
# while statements, as well as if statements are in lower letter
while expenses < budget:
# input always returns str, no need to cast
user_input = input("What do you want to purchase?")
if user_input not in groceries.keys():
print(f'{user_input} is not available!')
continue
if groceries[user_input] > budget - expenses:
print('You do not have enough budget to buy this')
user_input = input("Are you done shopping?Type 'y' if you are.")
if user_input == 'y':
break
continue
cart.append(user_input)
# this is how you add a number to anotherone
expenses += groceries[user_input]
print("Shopping cart full. You bought {} items and have {} left in your budget.".format(len(cart), budget-expenses))
Я внес некоторые изменения в ваш код, чтобы он работал, с объяснением, включая использование комментариев, обозначенных символом #.
Две самые важные вещи - это то, что все круглые скобки должны быть закрыты:
fun((x, y) # broken
fun((x, y)) # not broken
а ключевые слова в Python все в нижнем регистре:
if, while, for, not # will work
If, While, For, Not # won't work
Вас могут смутить True и False, которые, вероятно, должны быть в нижнем регистре. Они так долго были такими, что менять их уже поздно.
budget = 100 # You need to initialize variables before using them.
def shoplist():
prices = { # I re-named the price list from list to prices
'apple' : 30, # because list is a reserved keyword. You should only
'orange' : 20, # use the list keyword to initialize list objects.
'milk' : 60, # This type of object is called a dictionary.
} # The dots .... would have caused an error.
# In most programming languages, you need to close all braces ().
# I've renamed buy to item to make it clearer what that variable represents.
item = input('What do you want to purchase? ')
# Also, you don't need to cast the value of input to str;
# it's already a str.
if item in prices:
# If you need an int, you do have to cast from string to int.
count = int(input('How many? '))
cost = count*prices[item] # Access dictionary items using [].
if cost > budget:
print('You can\'t afford that many!')
else:
# You can put data into strings using the % symbol like so:
print('That\'ll be %i.' % cost) # Here %i indicates an int.
else:
print('We don\'t have %s in stock.' % item) # Here %s means str.
shoplist()
Многие новички публикуют неработающий код в StackOverflow, не сообщая, что у них возникают ошибки или что это за ошибки. Всегда полезно публиковать сообщения об ошибках. Дайте мне знать, если у вас возникнут вопросы.