Python одна строка для ввода цикла - PullRequest
0 голосов
/ 02 марта 2019

Я не знаю, как получить ввод в зависимости от выбора пользователя.Т.е. «Сколько цифр вы хотите ввести?»если ответ 5, то мой массив имеет 5 пробелов для 5 целых чисел в одной строке, разделенных пробелом.

num = []
x = int(input())
for i in range(1, x+1):
    num.append(input())

Верхний код работает, однако ввод делится на ввод (следующая строка).Т.е.:

2
145
1278

Я хочу получить:

2
145 1278

Я был бы признателен за помощь.

РЕДАКТИРОВАТЬ:

x = int(input())
while True:
    attempt = input()
    try:
        num = [int(val) for val in attempt.split(" ")]
        if len(num)== x:
            break
        else:
            print('Error')
    except:
        print('Error')

Это похоже на работу.Но почему я получаю сообщение об ошибке «Превышен лимит памяти»?

РЕДАКТИРОВАТЬ: какой бы метод я ни использовал, я получаю ту же проблему.

x = int(input())
y = input()
numbers_list = y.split(" ")[:x]
array = list(map(int, numbers_list))
print(max(array)-min(array)-x+1)

или

x = int(input())
while True:
    attempt = input()
    try:
        num = [int(val) for val in attempt.split(" ")]
        if len(num)== x:
            break
        else:
            print('Error')
    except:
        print('Error')

array = list(map(int, num))
print(max(array)-min(array)-x+1)

или

z = int(input())
array = list(map(int, input().split()))
print(max(array)-min(array)-z+1)

Ответы [ 5 ]

0 голосов
/ 02 марта 2019

Попробуйте это.

x = int(input())
num = [] # List declared here
while True:
    try:
        # attempt moved inside while
        # in case input is in next line, the next line
        # will be read in next iteration of loop.
        attempt = input() 

        # get values in current line
        temp = [int(val) for val in attempt.split(" ")]

        num = num + temp
        if len(num) == x:
            break
    except:
        print('Error2')

Возможно, бот передавал целые числа с символом новой строки вместо пробелов, и в этом случае цикл while никогда не завершится (при условии, что ваш бот непрерывно отправляет данные), потому что каждый раз он будетпросто переписать num.

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

0 голосов
/ 02 марта 2019

Если вы хотите, чтобы числа вводились в одну строку с пробелами, вы можете сделать следующее:

x = int(input("How many numbers do you want to store? "))
y = input(f"Please enter numbers seperated by a space: ")
numbers_list = y.split(" ")[:x]
print(f"We have a list of {len(numbers_list)} numbers: {numbers_list}")

Даже если кто-то вводит больше, чем обещанное число, он возвращает обещанноесумма.

Вывод:

How many numbers do you want to store? 4
Please enter numbers seperated by a space: 1 4 6 7
We have a list of 4 numbers: ['1', '4', '6', '7']
0 голосов
/ 02 марта 2019

Предполагая, что вы хотите ввести числа в одну строку, вот возможное решение.Пользователь должен разделить числа так же, как вы делали это в своем примере.Если формат ввода неправильный (например, «21 asd 1234») или число не соответствует заданной длине, пользователь должен вводить значения снова, пока не будет сделан правильный ввод.

x = int(input("How many numbers you want to enter?"))
while True:
    attempt = input("Input the numbers seperated with one space")
    try:
        num = [int(val) for val in attempt.split(" ")]
        if len(num)==x:
            print(num)
            break
        else:
            print("You have to enter exactly %s numbers! Try again"%x)
    except:
        print("The given input does not match the format! Try again")
0 голосов
/ 02 марта 2019

Вы можете использовать это без необходимости x:

num = [int(x) for x in input().split()]
0 голосов
/ 02 марта 2019

Самый простой способ сделать это было бы примерно так:

input_list = []

x = int(input("How many numbers do you want to store? "))

for inputs in range(x):
    input_number = inputs + 1
    input_list.append(int(input(f"Please enter number {input_number}: ")))

print(f"Your numbers are {input_list}")

Есть ли причина, по которой вы хотите, чтобы ввод был только в одной строке?Потому что вы можете ограничить только количество номеров, которые вы храните (или распечатываете) таким образом, а не количество вводимых пользователем данных.Пользователь может просто продолжать печатать.

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