Чи є коротший спосіб отримати вклад користувача в 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 нічого не економить на двох входах, оскільки вона ще довша (19 байт). Однак якщо у вас є якась рядок (або відповідний ітерабельний) з відповідною довжиною (бо магія?), Вона може бути коротшою.

xnor знайшов приклад чарівної рядки для трьох входів лише в Python 2:

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

Це також вимагає, щоб підказки не були важливими.

Цей трюк насправді допомагає зберегти байти для великої кількості входів, використовуючи 1eXпозначення (отримання х + 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 символів у рядку дасть помилку.)

Якщо вам потрібно більше одного символу на змінну, такий підхід не працюватиме. Це все ще можна використовувати для введення 2 одноцифрових чисел у вигляді рядка. Якщо потрібні цифри, що перевищують 9, то весь діапазон потенційних символів введення можна інтерпретувати як числа.

Зауважте, що це також працює для більш ніж 2 змінних:

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

Це працює, тому що в Python рядок є послідовністю символів, і її можна використовувати в будь-якому місці, де очікується послідовність.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.