Python: как получить ввод пользователя в середине предложения (стиль заполнения пробелов) с помощью функции ввода?

Я пытаюсь создать программу для расчета налога с продаж. Сначала я спрашиваю пользователя, какова общая стоимость его еды. Затем я спрашиваю их, каков налог с продаж в их районе, в форме:

y = input('What is the sales tax of your area? ')

Я хочу иметь знак процента "%" в конце вопроса, чтобы пользователи видели вопрос как:

Каков налог с продаж в вашем регионе? _%, Где пользователь может ввести число между вопросом и знаком процента (обозначается подчеркиванием).

Вот что я пробовал:

x = float(input("What is the cost of your meal? "))
y = input("What is the sales tax in your area? "+"%")

float(y)
y = y/100
cost = (x+(x*y))

print("The cost of your food is " + cost)

person 55 Cancri    schedule 07.07.2016    source источник
comment
А что произойдет, если вы попробуете это сделать? Чем это отличается от того, что вы ожидаете?   -  person Daniel Roseman    schedule 07.07.2016
comment
@DanielRoseman Затем ввод идет после знака %. Он хочет получить это раньше.   -  person Ma0    schedule 07.07.2016
comment
Вероятно, это можно было бы сделать, но для меня это слишком сложно для уровня приложений на основе интерфейса командной строки.   -  person    schedule 07.07.2016


Ответы (4)


ты можешь сделать что-то вроде этого

x=input("What is the sales tax in your area?    % \x1B[5D")

сначала он выводит строку, а затем escape-последовательность \x1B[5D перемещает курсор на 5 позиций назад. Но что говорит 1-й ответ, вы не можете сделать это, не зная заранее, как долго будет ввод. Если он длиннее, он перезапишет знак процента. здесь вы можете найти дополнительные escape-последовательности

Также, если вы не хотите этого очень срочно, я бы посоветовал вам попросить пользователя ввести процентную форму вместо того, чтобы ставить знак % в конце inpur.

person Eular    schedule 07.07.2016
comment
Проблема с вашим последним предложением заключается в том, что ввод пользователя больше не может быть преобразован в число с плавающей запятой, потому что знак% не является целым числом ... Если вы не знаете функцию, которая может удалить последний символ ввода пользователя? Поэтому, если они вводят 6% в качестве своего ответа, символ процента можно убрать, и тогда код, который у меня выше, может продолжать работать должным образом. - person 55 Cancri; 07.07.2016
comment
нет, я спрашиваю вот так y = input("What is the sales tax in your area? (in percentage)"), и если вы хотите сделать то, что сказали, положите y=y[:-1] - person Eular; 07.07.2016
comment
О, вы имеете в виду в десятичном формате? Я полагаю, что это одно из решений, но я хотел, чтобы программа была максимально простой для конечного пользователя, и я не уверен, что Python не может дать запрошенные мной результаты. - person 55 Cancri; 07.07.2016
comment
Итак, решение с escape-последовательностью выполняет вашу работу? - person Eular; 07.07.2016
comment
Это не так. После [5D. Есть ли определенная библиотека, которую мне нужно импортировать, чтобы использовать escape-последовательности? Я также не видел этой escape-последовательности в предоставленной вами ссылке. - person 55 Cancri; 07.07.2016
comment
что вы имеете в виду, вы запрашивали ввод данных пользователем после [5D? это escape-последовательность, которая вообще не будет напечатана - person Eular; 07.07.2016
comment
Как вы указали в своем ответе,% \ x1B [5D печатается после вопроса, тогда это позволяет мне дать ответ. - person 55 Cancri; 07.07.2016
comment
Я не понимаю, в моей системе он работает правильно. Вы работаете в Windows 8.1 или ниже? - person Eular; 07.07.2016
comment
Нет, я использую Mac с режимом ожидания 3 - person 55 Cancri; 07.07.2016
comment
ну, я не знаю о Mac, потому что у меня его нет, но похоже, что вы используете, не понимает escape-последовательности ANSI, а также Idle не поддерживает escape-коды. Попробуйте использовать его в терминале с соответствующими escape-кодами для терминала os x. - person Eular; 07.07.2016

У меня есть решение для тебя. Просто уловка, прямого решения не нашел даже после долгих поисков. Но одно можно сказать наверняка: вам нужно знать длину ввода, иначе при очень длинном вводе ! будет перезаписан. Код ниже:

x = float(input("What is the cost of your meal? "))
y = input("What is the sales tax in your area?  %\rWhat is the sales tax in your area?")

y = float(y)/100
cost = (x+(x*y))

print("The cost of your food is ", cost)
person Deca    schedule 07.07.2016
comment
К сожалению, ваше решение дает такой результат: Какой налог с продаж в вашем регионе? % Каков налог с продаж в вашем регионе ?, где пользовательский ввод запрашивается после того, как вопрос задается второй раз. - person 55 Cancri; 07.07.2016
comment
аааа ... вы можете использовать какой-то редактор .... в редакторе это не сработает ... вы можете попробовать в любом блокноте и запустить из командной строки, потому что в редакторе, таком как eclise, курсор даже много раз мигает в месте обряда ! Я считаю, что некоторые затмения также принимают \ r как новую строку - person Deca; 07.07.2016
comment
похоже, что это ошибка с несколькими редакторами, связанными со специальными символами, такими как возврат каретки и все такое .... Eclipse: - stackoverflow.com/questions/14792478/ IDLE: - stackoverflow.com/questions/35768165/ - person Deca; 07.07.2016

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

person randomdude999    schedule 07.07.2016

Недавно у меня была такая же проблема, и я обнаружил способ отображать то, что вы ищете! Если вы импортируете getpass, вы сможете использовать приведенный ниже код для получения желаемого результата.

import getpass

salesTax = getpass.getpass("The sales tax in my area is " + getpass.getpass() + " percent."

Если вы запустите это, то первое, что отобразится, должно быть «Пароль:». Если вы введете, например, 5, то вывод будет «Налог с продаж в моем районе составляет 5 процентов». Я не умею объяснять, поэтому, если вы хотите увидеть, как это работает в действии, я написал ответ, который делает это. https://repl.it/@ERokos_tcsyl/tester

person kanji.katsudo    schedule 19.02.2020
comment
Хорошая попытка. Где пользователь может ввести число между вопросом и знаком процента. Я вашу ссылку проверил. Не повезло. - person qräbnö; 20.02.2020