Usually, when raw_input
asks you to type something in and press Return, feedback is printed on a new line. How can I print over the prompt's line? Could a CR work in this case?
Demo:
prompt = "Question: "
answer = raw_input(prompt)
print answer
print("Correct!")
Simulated output after typing an answer and pressing Return:
>> Question: my answer
>> Correct!
Desired output:
>> Correct!
The new line character in Python is \n . It is used to indicate the end of a line of text. You can print strings without adding a new line with end = <character> , which <character> is the character that will be used to separate the lines.
Using end keyword # print each statement on a new line print("Python") print("is easy to learn.") # new line print() # print both the statements on a single line print("Python", end=" ") print("is easy to learn. ")
a = input() will take the user input and put it in the correct type. Eg: if user types 5 then the value in a is integer 5. a = raw_input() will take the user input and put it as a string. Eg: if user types 5 then the value in a is string '5' and not an integer.
Use blessings
:
from blessings import Terminal
term = Terminal()
raw_input("Question: ")
print(term.move_up() + "Correct!" + term.clear_eol())
Seriously, that's it.
Here's something fancier:
input(term.red("Question: ") + term.bold)
print(term.normal + term.move_up + term.green("Correct!") + term.clear_eol)
This shows that often calling term.thing
is optional because they act similarly to properties. This means you can do awesome stuff like
from blessings import Terminal
term = Terminal()
question = "{t.red}{}{t.normal}{t.bold}".format
answer = "{t.normal}{t.move_up}{t.green}{}{t.normal}{t.clear_eol}".format
input(question("Question: ", t=term))
print(answer("Correct!", t=term))
This is a solution using curses
(at the end it waits for the x
key to end the program):
#!/usr/bin/python
import time
import sys
import curses
def questionloop(stdscr):
stdscr.addstr("Question: ")
curses.echo()
while (1):
answer = stdscr.getstr()
curses.flushinp()
stdscr.clear()
stdscr.addstr("This is correct!")
doit = stdscr.getch()
if doit == ord('x'):
stdscr.addstr("Exiting!\n")
break
curses.wrapper(questionloop)
And this is an example using urwid
:
import urwid
def exit_on_q(key):
if key in ('q', 'Q'):
raise urwid.ExitMainLoop()
class QuestionBox(urwid.Filler):
def keypress(self, size, key):
if key != 'enter':
return super(QuestionBox, self).keypress(size, key)
self.original_widget = urwid.Text(
u"%s\n" %
edit.edit_text)
edit = urwid.Edit(u"Question: \n")
fill = QuestionBox(edit)
loop = urwid.MainLoop(fill, unhandled_input=exit_on_q)
loop.run()
Another (probably most concise) solution, from Veedrac's answer, would be to use blessings
:
from blessings import Terminal
term = Terminal()
question = "{t.red}{}{t.normal}{t.bold}".format
answer = "{t.normal}{t.move_up}{t.green}{}{t.normal}{t.clear_eol}".format
input(question("Question: ", t=term))
print(answer("Correct!", t=term))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With