2016-04-09 2 views
-1

Он не хочет распечатывать список, введенный пользователем. Я думаю, что проблема находится в списке = []Печать ввода от пользователя

from HeapClass import Heap 

def minHeap(list): 
     heap = Heap() # 

     lst = eval(input("Enter list of numbers: ")) 

     for v in lst: 
       heap.add(v) 

     for i in range(len(list)): 
       list[len(list) - 1 - i] = heap.remove() 

def main(): 
     list = [] This think the problem is here because it doesn't return a list but when I write list = lst... It does not work either 
     minHeap(list) 
     for v in list: 
       print(str(v)+ " ", end = " ") 

main() 
+0

Вы ничего не возвращаете, и вы часто забываете спасать вещи. – TigerhawkT3

+0

попробуйте преобразовать ваш 'input' в список, потому что' input' всегда принимает его в форме 'string'. Итак, попробуйте 'list (lst)'. и вы ничего не возвращаете, включая ввод, так что сделайте это. –

+0

Вы должны переименовать переменную 'list' в нечто другое, поскольку это ключевое слово datatype/reserved в python. Например, если вы используете его как имя переменной, вы не сможете писать такие вещи, как 'list ((1,2,3))', чтобы превратить кортеж в список. Это может вызвать некоторые странные ошибки. – jDo

ответ

1

Вы используете list в качестве имени переменной. Переименуйте его на что-то еще здесь def minHeap(list):, здесь def main(): list = [] и везде. Вам это не нужно.

Кроме того, вам не нужно зло eval() :)

Если вы хотите ввод данных пользователем в формате «1,2,3» (разделенных запятыми чисел), чтобы быть приведен к списку целых чисел, вы могли бы вместо этого сделать:

lst = list(input("Enter list of numbers: ")) в python2.7

или

lst = [int(x) for x in input("Enter list of numbers: ").split(",")] в Python3.

Чтобы понять, почему с помощью list как имя переменной плохо/запутанным, попробуйте следующее:

Тип list((1,2,3)) в интерпретатора. Он должен преобразовать tuple(1,2,3) в list и вернуться [1, 2, 3]. Все хорошо.

Теперь попробуйте ввести list = [] и повторите list((1,2,3)).

Теперь вы должны получить сообщение TypeError: 'list' object is not callable и вы больше ничего не можете сделать, чтобы добавить list; он эффективно отменяет тип данных, поэтому прежний <type 'type'> теперь является единственным списком <type 'list'>. Переполнение встроенного материала становится странным; лучше избегать этого, если вы намеренно не выполняете метапрограммирование.

+0

Посмотрите, что я получаю: builtins.ValueError: недействительный литерал для int() с базой 10: '1 5 6 4 9 45 12' – talala

+0

@talala * "номера, разделенные запятой" *. Если вы хотите разделенные пробелами числа, вместо этого разделите на пробел. – jDo

+0

Да, я это понял. Я просто затрудняюсь распечатать результат.Он печатает "[]" – talala

Смежные вопросы