Python: для циклов и входов происходит сбой при использовании списка из классов - PullRequest
0 голосов
/ 16 апреля 2020
class products:
    def __init__(self, id, size, color, price, is_sold):
        self.id = id
        self.size = size
        self.color = color
        self.price = price
        self.is_sold = is_sold
total = 0
product_102 = products(102, 34, 'red', 160, False)
product_104 = products(104, 32, 'blue', 140, False)
all_products = [product_102.id, product_104.id]
print(all_products)
x = input('Enter product id: ')
for each in all_products:
    if each == x:
        all_products.remove(each) 
print(all_products)

Прежде всего, я очень плохо знаком с python и программирую в целом, и я не собираю здесь что-то огромное, просто какую-то базовую c вещь, поэтому я попытался создать программу, которая содержит список всех моих продуктов, когда что-то продано, я могу дать идентификатор проданного продукта для ввода (x) и начинаю для l oop, если входное значение равно одному из идентификаторов продукта, оно должно быть удалено но этого не происходит, оно полностью игнорируется и ничего не удаляется

Ответы [ 3 ]

1 голос
/ 16 апреля 2020

Ваш x является строкой. Таким образом, ваше условие if становится чем-то вроде "102" == 102, которое оценивается как False. Это должно сработать, если вы измените строку на:

x = int(input('Enter product id: ')) 

Пожалуйста, рассмотрите возможность проверки вашего ввода заранее, так как это преобразование может привести к исключению, если будет введено что-либо кроме десятичной строки.

0 голосов
/ 16 апреля 2020

Вам лучше использовать эту простую конструкцию и убедитесь, что вы используете явное преобразование типов в int , как в Python raw_input из 2.x является поведением ввода по умолчанию в 3.x.

x = int(input('Enter product id: '))
if x in all_products:
    all_products.remove(x) 
    print('removed product:',x)
print(all_products)

Или еще проще

if x in all_products: all_products.remove(x) 
0 голосов
/ 16 апреля 2020

Все пользовательские данные в python имеют строковый тип.

Скажем, пользователь ввел 104, это на самом деле '104'.

>>> 104 == '104'
False

Просто измените его на целое число.

for each in all_products:
if each == int(x):
    all_products.remove(each)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...