#python #pandas
#python #pandas
Вопрос:
Я пишу код для приложения на Python. До сих пор я писал это. Я получаю сообщение об ошибке в строке 68, т.е. shopping_list = shopping_list.append(temp_df, ignore_index=True). Сообщение об ошибке выдается сразу после кода. Мне нужно составить список, в который я добавляю все товары, добавленные в корзину.
import sys
class Shopping:
def add_item(self):
items = int(input('Enter the number of items you want to send'))
for i in range(0, items):
print('Enter the details for the item')
type_pack = input('Enter the type(letter or parcel):')
weight = input('Enter the weight of the product: ')
destination = input('Enter the destination of the product: ')
zone = countries_zones.loc[countries_zones['Destination'] == destination.capitalize(), 'Zones'].iloc[0]
zone1 = int(zone[-1])
cost = 0
if type_pack.lower() == 'parcel':
if float(weight) < 3:
cost = parcel_by_sea_dataset[zone][parcel_by_sea_dataset.Weight == 'Over 2.5 kg up to 3kg'].iloc[0]
if cost == '-':
print("Sorry, no parcel services available for ", destination)
print('The cost of your stamp is', cost)
elif 3 <= float(weight) < 5:
cost = parcel_by_sea_dataset[zone][parcel_by_sea_dataset.Weight == 'Up to 5kg'].iloc[0]
if cost == '-':
print("Sorry, no parcel services available for ", destination)
print('The cost of your stamp is', cost)
elif 5 <= float(weight) < 10:
cost = parcel_by_sea_dataset[zone][parcel_by_sea_dataset.Weight == 'Up to 10kg'].iloc[0]
if cost == '-':
print("Sorry, no parcel services available for ", destination)
print('The cost of your stamp is', cost)
elif 10 <= float(weight) < 15:
cost = parcel_by_sea_dataset[zone][parcel_by_sea_dataset.Weight == 'Up to 15kg'].iloc[0]
if cost == '-':
print("Sorry, no parcel services available for ", destination)
print('The cost of your stamp is', cost)
elif 15 <= float(weight) < 20:
cost = parcel_by_sea_dataset[zone][parcel_by_sea_dataset.Weight == 'Up to 20kg'].iloc[0]
if cost == '-':
print("Sorry, no parcel services available for ", destination)
print('The cost of your stamp is', cost)
else:
print("please enter a number between 0-20")
print('Please chose the option below')
print('1. Add to cart')
print('2. Go back')
selection = input('Enter your choice: ')
if selection == '1':
temp_df = pd.DataFrame({'Item Type': [type_pack],
'Weight': [weight],
'Destination': [destination],
'Cost': [cost]})
shopping_list = shopping_list.append(temp_df, ignore_index=True)
print(shopping_list)
def delete_item(self):
pass
def amend_item(self):
pass
def print_list(self):
pass
def print_receipt(self):
pass
Traceback (most recent call last):
File "C:/Divyam Projects/oops1/stamp.py", line 114, in <module>
mainMenu()
File "C:/Divyam Projects/oops1/stamp.py", line 99, in mainMenu
shopping.add_item()
File "C:/Divyam Projects/oops1/stamp.py", line 68, in add_item
shopping_list = shopping_list.append(temp_df, ignore_index=True)
UnboundLocalError: local variable 'shopping_list' referenced before assignment
Заранее благодарю вас за помощь. 🙂
Ответ №1:
Вы пытаетесь использовать список покупок и добавить к нему что-то, но он так и не был создан. попробуйте это:
shopping_list = []
shopping_list.append(something,ignore_index=true)
вы можете объявить shopping_list над своим классом
Ответ №2:
Ошибка гласит:
UnboundLocalError: local variable 'shopping_list' referenced before assignment
Это означает, что вы пытаетесь что-то сделать с переменной, которая еще не существует. Решение состоит в том, чтобы объявить его перед попыткой его использования, вероятно, непосредственно под строкой, в которой вы объявляете items
в этой функции.
Возникнет другая проблема: .append()
не имеет возвращаемого значения, поэтому shopping_list
станет None
, если вы присвоите ему возвращаемое значение .append()
. Фактически, .append()
изменяет список на месте; нет необходимости назначать что-либо при добавлении.
Разъяснение:
# Incorrect
foo = []
foo.append('bar')
# foo is now None
# Correct
foo = []
foo.append('bar')
# foo is now ['bar']