Инициализирующий список целых. Интерпретатор возвращает «ValueError: недопустимый литерал для int ()» - PullRequest
0 голосов
/ 07 октября 2019

Попытка составить список целых пользовательских вводов. Inerpreter возвращает «ValueError: недопустимый литерал для int () с основанием 10:«

Я немного новичок в python и занимаюсь на веб-сайте под названием «geeks for geeks». Ссылка на проблему, над которой я работаю здесь Цель упражнения - вывести первое отрицательное целое число в подмассиве указанного пользователем размера. Когда я пытаюсь добавить пользовательские данные в список, интерпретатор выдает мне ошибку значения. Это, очевидно, не ошибка типа, но я не могу понять, какой тип ввода может быть дан программе, чтобы вызвать эту ошибку. Входные данные находятся в файле geeks для geek-серверов, поэтому я могу проверять только те входные данные, которые я сделал.

# This file is for a programing practice exercise of geeksforgeerks.org
# The exercise is first negative int in window of size k

# selecting number of test cases
T = int(input())
for t in range(T):
    # initializing array
    n = int(input())
    arr = []
    while n > 0:
        arr.append(int(input().strip()))
        n-=1
    k = int(input())
    win = 0 # index of first element in widow subarray
    # terminate loop when the window can't extend further
    while win < len(array) - k -1:
        # boolean for no negatives found
        noNeg = True
        for i in range(win, k):
            if arr[i] < 0:
                print(arr[i])
                noNeg = False
                break
            elif i == k-1 and noNeg:
                # 0 if last sub arr index reached and found no negs
                print(0)
        win+=1

В строке 11 интерпретатор выдает следующую ошибку:

print(int(input().strip()))
ValueError: invalid literal for int() with base 10: '-8 2 3 -6 10'

Ответы [ 3 ]

1 голос
/ 07 октября 2019

Входные данные содержат несколько чисел в одной строке. input() возвращает целую строку ввода, и когда вы звоните int(input().strip()), вы пытаетесь разобрать всю эту строку как одно число.

Вам необходимо разбить ее на пробел. Таким образом, вместо цикла while вы можете использовать:

arr = map(int, input().strip().split())
0 голосов
/ 07 октября 2019

вы вводите ввод с несколькими целыми числами, вы можете расширить свой массив в строке 11, указав желаемые значения:

arr = []
arr.extend(map(int, input().strip().split()))
# input: -8 2 3 -6 10

вывод:

[-8, 2, 3, -6, 10]
0 голосов
/ 07 октября 2019

Похоже, вы вводите несколько целых чисел, int() не будет знать, как их преобразовать - он ожидает, что в строке будет содержаться одно целое число. Вы захотите разделить строку и затем преобразовать:

Ts = [int(word) for word in input().strip().split(" ")]

Обратите внимание, что это даст вам список вместо одного целого числа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...