Есть ли более короткий способ получить пользовательский ввод в python?


17

Это не проблема. Мне интересно, возможно ли вообще получить пользовательский ввод в две отдельные переменные в python (2 или 3) с длиной менее 19 байтов. Это все самое короткое, что я могу получить:

a,b=input(),input()
a=input();b=input() (newline replaced with semicolon for readability)
i=input;a,b=i(),i()

Есть ли более короткий способ сделать это?


2
Третий, вероятно, будет лучшим, если вы принимаете более двух входов.
SuperJedi224

1
Я собирался сказать аргументы командной строки с a,b=sys.argv[1:2]или как угодно, но тогда вам нужно import sys(верно?)
Алекс А.

В python3 a,b=input().split()было бы еще одно 19-байтовое решение, но не улучшение. Обратите внимание, что это означает, что a и b являются строками, и ввод вводится за один раз, разделенный пробелом.
Мэтти

Не уверен, что это поможет, но в некоторых языках вы можете использовать вектор, чтобы получить два числа, а не 2 переменные. Для двух произвольных переменных может использоваться более сложный контейнер.
Деннис Джаэруддин

a,b=input()в Py2
Оливер Ни

Ответы:


11

Если запрос пользователя не имеет значения, это немного короче, чем evalдля 3 или более:

a,b,c=map(input,[1]*3)
a,b,c=map(input,'111')

Это также короче, даже если подсказка не в порядке:

a,b,c=map(input,['']*3)

К сожалению, идея xnor не сохраняет ничего для 2 входов, поскольку она все еще длиннее (19 байт). Однако, если у вас уже есть какая-то строка (или подходящая итерация) с соответствующей длиной (потому что волшебство?), Она может быть короче.

xnor нашел пример магической строки для 3 входов только в Python 2:

a,b,c=map(input,`.5`)

Это также требует, чтобы подсказки не были важны, хотя.

Этот трюк на самом деле помогает сохранить байты для большого количества входов, используя 1eXнотацию (получая x + 3 входов):

 a,b,c,d,e,f=map(input,`1e3`)

Объяснение:

mapФункция Python выполняет функцию, которую передают каждому элементу итерируемого, который также передается ему, и возвращает список (или объект карты), содержащий результаты этих вызовов. Для первого примера карта может быть разложена на:

[input(1), input(1), input(1)]

2
Выполнение map(input,'xxx')равной длины для 3 переменных, лучше для 2 и хуже для 4+.
xnor

3
Если по какой-то причине вам нужно взять ровно 22 входа, map(input,`id`)короче :-). Аналогично map(input,`.1`)для 19 входов.
xnor

3
На самом деле, a,b,c=map(input,`.5`)сохраняет символ для 3 входов, так .5как представляется как 0.5.
xnor

Да, это хорошо. Классный трюк!
DJMcMayhem


4

Обратите внимание, что если в вопросе не указан тип ввода или не требуется полная программа, вы можете принять входные данные в качестве аргументов функции , что исключает необходимость input() . Если это не вариант, в определенных случаях может помочь следующее.


Если вы хотите одиночные символы в переменных aи b, вы можете использовать

a,b=input()

Ввод двухсимвольной строки приведет к тому, что первый символ будет назначен, aа второй символ назначен b. (Менее 2 или более 2 символов в строке приведет к ошибке.)

Если вам требуется более одного символа для каждой переменной, этот подход не будет работать. Это можно использовать для ввода двухзначных чисел в виде строки. Если требуются числа, превышающие 9, тогда весь диапазон возможных входных символов можно интерпретировать как числа.

Обратите внимание, что это также работает для более чем 2 переменных:

a,b,c,d,e,f,g,h=input()

Это работает, потому что в Python строка представляет собой последовательность символов и может использоваться везде, где ожидается последовательность.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.