Я новичок в Python 2. Я пытаюсь создать программу Python для покупок, но застрял в" проверке запасов до поместить в корзину»шаг.: TypeError: аргумент типа 'function' не является итерируемым ", но работает при индивидуальном тестировании
во-первых, я прочитал много потоков одних и тех же проблем здесь, но они, казалось бы, различных причин из шахты.
во-вторых, я уже отделилась каждую функцию и тест в другой Они работали хорошо по отдельности, но когда они подключились к функции check_stock(y)
, она выдала ошибку.
Я считаю, проблема возникает из команды «in».
def check_stock(y): #// Problem in this function //
if y in list:
print "%s is available" % y
add_to_cart(y)
else:
print "Sorry, but %s is not available." % y
def check_finish():
y = raw_input(">")
if y == "checkcart":
print cart #check inside shopping cart
elif y == " ":
check_finish() #loop back for blank
elif y == "list":
list() #present the list
else:
while y != "ok": #"ok" = finished shopping
check_stock(y)
else:
print "Checking out..."
sorted(cart)
print "Your item(s) are %s." % cart
exit(0)
Вот остальная часть кода, если это может помочь:
cart = []
list = ['apple', 'banana', 'cat', 'dog', 'elephant', 'flamingo', 'goofy', 'ham']
a = 0
def list():
print list #present the list
def representInt(s): #check if value is integer
try:
int(s)
return True
except ValueError:
return False
def annoyedAtError(a): #interaction for repeated mistakes
if a < 2:
print "Numbers only please"
elif 2 < a < 4:
print "Man, just do as I say, please. I have another shift tonight."
elif a == 5 :
print "Hey, seriously?"
else:
print "..."
def check_stock(y): #// PROBLEM HERE // cross-check with list if item is available
if y in list:
print "%s is available" % y
add_to_cart(y)
else:
print "Sorry, but %s is not available." % y
def add_to_cart(y):
amount = (raw_input("How many do you want to add? > "))
if representInt(amount) == False:
annoyedAtError(a)
global a
a = a + 1
add_to_cart(y)
else:
y = y + " " + amount
print "%s is added to cart" % (y)
cart.append(y)
check_finish()
def check_finish():
y = raw_input(">")
if y == "checkcart":
print cart #check inside shopping cart
elif y == " ":
check_finish() #loop back for blank
elif y == "list":
list() #present the list
else:
while y != "ok": #"ok" = finished shopping
check_stock(y)
else:
print "Checking out..."
sorted(cart)
print "Your item(s) are %s." % cart
exit(0)
def welcome():
print """\nWelcome to cyber shopping.\n
Please enter things you want to buy.
Check your cart by typing: checkcart
type "ok" when finished.
type "list" for things available for buying"""
def start():
welcome()
check_finish()
start()
Не называть переменную 'list' или определять другую функцию' list() ... это встроенная функция python –
Определенно не называйте функцию 'list'. Я бы предложил использовать 's_list' или' shopping_list' – GreenHawk1220
Также 'while y! =" Ok ":' выглядит как бесконечный цикл, потому что вы никогда не переназначаете 'y' –