2013-12-09 2 views
-2

У меня все еще есть некоторые проблемы, связанные с редактированием некоторых значений в списке. Мой список состоит из следующих действий:Получение int из строки в списке

listInfo = [["Appel",3,"Pitvrucht"], ["Peer",6,"Pitvrucht"], ["Banaan",3,"Exotisch]=, ["Xbanaan",4,"Exotisch"], ["Xpeer",6,"Pitvrucht"]] 

Это код ГНФАР.

Edit_item = input ("Welk groente of fruit wilt u wijzigen?\n") 
      Edit_value = int(input("Welke voorraad komt erbij ?\nIndien een verhoging  toets + (vb:+20)\nIndien een verlaging toets - (vb:-20)\n")) 
      for i, nested in enumerate(listVoorraad): 
       if Edit_item in nested: 
        if Edit_value < 0: 
         extract_value =listVoorraad.pop(i) 
         print(extract_value) 
         import re 
         int(re.match(r'\d+', extract_value).group()) 
         print ("De huidige voorraad van",Edit_item,"bedraagt",) 

Проблема в том, что у меня есть список, содержащий строки и поплавки. Всякий раз, когда кто-то хочет изменить часть веса, например, у равнины 6 кг. Допустим, кто-то хочет вычесть эту сумму на 20 кг. Затем ему нужно найти, как peer вытащит часть строки отверстия (list.pop), а затем вычислить, сколько осталось. Когда значение достигает нуля или меньше, оно должно вызвать ошибку. После этого его необходимо снова установить в строке, а затем добавить обратно в список.

В любом случае, чтобы помочь мне здесь?

+1

Боже мой! Почему бы вам не использовать другие типы контейнеров данных, такие как словари или классы ?! –

+0

Из-за того, что я еще не продвинулся. Был бы рад узнать любой другой способ;) – user3084175

+0

Так что я действительно предлагаю вам следовать этой книге: http://learnpythonthehardway.org/book/ Это научит вас python 'right way' –

ответ

0

Вам не нужно постить элементы из списка и снова добавить их в конец - его можно сделать на месте с помощью оператора -=.

Edit_item = input ("Welk groente of fruit wilt u wijzigen?\n") 
Edit_value = int(input("Welke voorraad komt erbij ?\nIndien een verhoging  toets + (vb:+20)\nIndien een verlaging toets - (vb:-20)\n")) 

for el in listVoorraad: 
    if el[0] == Edit_item: 
     if el[1] <= Edit_value: 
      # Raise an error, the value in the list too small. 
      raise ValueError 
     else: 
      el[1] -= Edit_value 
+0

проблема есть что мне все равно нужно разбить int из строки, чтобы я мог рассчитать с этими числами. – user3084175

+0

@ user3084175, 'el [1]' указывает на int. –

0

Я думаю, что вы пытаетесь сделать что-то вроде этого:

list_info = [["Appel",3,"Pitvrucht"], ["Peer",6,"Pitvrucht"], ["Banaan",3,"Exotisch"], ["Xbanaan",4,"Exotisch"], ["Xpeer",6,"Pitvrucht"]] 
dict_info = {k:v for k, *v in list_info} 

edit_item = input ("Welk groente of fruit wilt u wijzigen?\n") 
edit_value = int(input("Welke voorraad komt erbij ?\nIndien een verhoging  toets + (vb:+20)\nIndien een verlaging toets - (vb:-20)\n")) 

extract_item = dict_info[edit_item] 
if edit_value > extract_item[0]: 
    extract_item[0] -= edit_value 
    ... 
0

Преобразовать ваш listVoorraad в структуру данных, которая более удобна для редактирования:

from types import SimpleNamespace 

listVoorraad = [["Appel",3,"Pitvrucht"], ["Peer",6,"Pitvrucht"], 
       ["Banaan",3,"Exotisch"]] 
supply = {name: SimpleNamespace(name=name, quantity=quantity, kind=kind) 
      for name, quantity, kind for listVoorraad} 

Отредактируйте supply:

item = input("Welk groente of fruit wilt u wijzigen?\n") 
value = int(input("Welke voorraad komt erbij ?\n" 
        "Indien een verhoging  toets + (vb:+20)\n" 
        "Indien een verlaging toets - (vb:-20)\n")) 
if item not in supply: 
    exit("unknown item {}, available items: {}".format(
     item, ", ".join(supply.keys()))) 

current_value = supply[item].quantity 
if current_value > value: 
    supply[item].quantity -= value 
else: 
    exit("not enough {item} got {current_value} requested {value}".format_map(
     vars())) 
Смежные вопросы