Python 从右到左获取输入

Python 从右到左获取输入,python,input,Python,Input,我正在编写一个简单的程序,计算一个随机加法数学问题,并要求用户输入答案 当用户输入答案时,计算机从左到右输入输入的键。我希望输入做相反的事情:从右到左 当然,加法的工作方式是先在最右边加上一列——一位数,然后是十位数和百位数,等等 例如,如果我在上面(635)键入这个加法问题的答案,然后按顺序键入(6然后3然后5),我希望6显示在9+6下,然后当我键入3时,我希望它将6(向左)移动到5+7下,3将显示在9+6下,然后当我输入5时,它将6移动到3+2下,将3移动到5+7下方,然后将5放置在9+

我正在编写一个简单的程序,计算一个随机加法数学问题,并要求用户输入答案

当用户输入答案时,计算机从左到右输入输入的键。我希望输入做相反的事情:从右到左

当然,加法的工作方式是先在最右边加上一列——一位数,然后是十位数和百位数,等等

例如,如果我在上面(635)键入这个加法问题的答案,然后按顺序键入(6然后3然后5),我希望6显示在9+6下,然后当我键入3时,我希望它将6(向左)移动到5+7下,3将显示在9+6下,然后当我输入5时,它将6移动到3+2下,将3移动到5+7下方,然后将5放置在9+6下方

是否有其他输入功能或模块可供我使用?还是你拥有的超秘密技术?谢谢

这是我的密码:

# MAIN
def main():

    keepGoing = "Y"
    while keepGoing == "Y":
        keepGoing = "N"
        entranceMessage()
        number1, number2 = calculateProblem()
        userInput = getInput(number1, number2)
        calculateResults(userInput, number1, number2)
        keepGoing = input("Would you like to try another problem? \
(Enter \"Y\" for \"Yes\", or any other key for \"No\".): ")
    exitMessage()

# DISPLAY OPENING MESSAGE
def entranceMessage():

    print()
    print("2. Math Quiz (Page 235)")
    print("This program will prompt you to answer a series of random mathematical problems.")

# INPUT
def getInput(number1, number2):

        print("Answer the following math problem: ")
        print("")
        if (number1 < 10):
            print("  ", number1)
        else:
            print(" ", number1)
        if (number2 < 10):
            print("+ ", number2)
        else:
            print("+", number2)
        print("_____")
        print("          ")
        result = (number1 + number2)
        if (result >= 100):
            userInput = float(input(" "))
        elif ((result >= 10) and (result < 100)):
            userInput = float(input("  "))
        elif ((result >= 0) and (result < 10)):
            userInput = float(input("   "))
        return userInput


# PROCESS
def calculateProblem():

    import random
    number1 = random.randint(1, 100)
    number2 = random.randint(1, 100)
    return number1, number2

# OUTPUT
def calculateResults(userInput, number1, number2):

    result = (number1 + number2)
    if (userInput == result):
        print()
        print("Correct!")
    else:
        print()
        print("Sorry, the answer is:", result)


# DISPLAY CLOSING MESSAGE
def exitMessage():

    print("Thank you. Exiting the program..")

# CALL THE MAIN FUNCTION    
main()
#主
def main():
keepGoing=“Y”
当keepGoing==“Y”:
keepGoing=“N”
消息()
number1,number2=calculateProblem()
userInput=getInput(number1,number2)
计算结果(用户输入,数字1,数字2)
keepGoing=input(“您想尝试另一个问题吗\
(输入“Y”表示“是”,或输入任何其他键表示“否”))
exitMessage()
#显示开场白
定义消息():
打印()
打印(“2.数学测验(第235页)”)
打印(“此程序将提示您回答一系列随机数学问题。”)
#输入
def getInput(编号1、编号2):
打印(“回答以下数学问题:”)
打印(“”)
如果(数字1<10):
打印(“”,编号1)
其他:
打印(“”,编号1)
如果(数字2<10):
打印(“+”,数字2)
其他:
打印(“+”,数字2)
打印(“打印”)
打印(“”)
结果=(数字1+数字2)
如果(结果>=100):
userInput=float(输入(“”)
elif((结果>=10)和(结果<100)):
userInput=float(输入(“”)
elif((结果>=0)和(结果<10)):
userInput=float(输入(“”)
返回用户输入
#过程
def calculateProblem():
随机输入
number1=random.randint(1100)
number2=random.randint(1100)
返回编号1,编号2
#输出
def计算结果(用户输入,编号1,编号2):
结果=(数字1+数字2)
如果(userInput==结果):
打印()
打印(“正确!”)
其他:
打印()
打印(“对不起,答案是:”,结果)
#显示关闭消息
def exitMessage():
打印(“谢谢。退出程序…”)
#调用MAIN函数
main()

如果您注意到,在我的函数“getInput”(最后一个If-elif)的代码中,在最后,我有一个方法将初始光标放置在与答案相关的正确对齐位置,但是(a)这种方法给出了答案是什么的线索,(B)这不是我想要的。

这在UNIX系统上对我很有效,使用getch from从输入读取单个字符

import sys

def cursor_left():
    """Print control characters to move the cursor left one column."""
    sys.stdout.write(chr(27) + '[D')  # 27 is ESC

def print_blank(number):
    """Print blank character a given number of times."""
    for i in range(0, number):
    sys.stdout.write(" ")

def right_to_left_input(number_of_digits):
    """Have user input a number from right to left, digit by digit."""
    print_blank(number_of_digits)
    digits = ""
    while (1):
    cursor_left()
        userInput = getch()
    sys.stdout.write(userInput)
    digits = userInput + digits  # string concatenation, not addition
        if (len(digits) >= number_of_digits):
        break
    cursor_left()
    return(digits)
有关在xterm上移动光标的控制序列,请参见

或者,根据您使用的操作系统或shell,您可以对最后几个字符进行退格,并每次重新打印它们

另见。尝试ASCII 8(退格);ASCII 127(删除);或ASCII 10(换行符;如果您换行但没有换行符,则可能允许您在某些系统上再次在同一行上重新键入。)

您可以打印
chr(8)
,例如,打印ASCII字符8(退格)

有关如何一次从用户处读取单个字符的信息,请参阅

如果您在尝试运行getch时遇到错误,那么以下代码可能仍然有效;它在UNIX系统上为我工作;但它要求用户在每个数字后按enter键。它假定用户一次只输入一个数字

def cursor_up():
    """Print control characters to move the cursor up one line."""
    sys.stdout.write(chr(27))  # ESC
    sys.stdout.write(chr(91))  # [
    sys.stdout.write(chr(65))  # A

def backspace(number):
    """Print backspace character a given number of times."""
    for i in range(0, number):
        sys.stdout.write(chr(8))  

def print_blank(number):
    """Print blank character a given number of times."""
    for i in range(0, number):
        sys.stdout.write(" ")

def print_cursor():
    sys.stdout.write("_")  # use as cursor

def right_to_left_input(number_of_digits):
    digits = ""
    print ""
    cursor_up()
    while(1):
        have_digits = len(digits)
        if(have_digits >= number_of_digits):
            break
        print_blank(number_of_digits - have_digits)
        print_cursor()
        sys.stdout.write(digits)
        print_blank(1)   # overwrite the user's previous input
        backspace(have_digits + 2)   # move back to cursor position
        userInput = sys.stdin.readline()
        cursor_up()  # undo the carriage-return entered by the user.
        digit = userInput[0]    # first character in string
        digits = digit + digits  # string concatenation, not addition
    return(digits)

如果您使用的是基于Unix的系统,一种方法是使用curses库。Curses通常用于高级终端操作,可以在终端中的任何位置写入文本、更改字体颜色等,并且Python以外的语言(包括C)也可以使用变体。它也常用于基于文本的游戏,如Rogue


.

为了清楚起见。你是分别读出一个整数还是每个数字?如果您有wohle编号,问题只是反转数字并正确对齐输出文本。不,我要求用户输入,我希望它实时执行我想要的操作。如果您注意到我在函数“getInput”(最后一个If elif)中的代码,最后,我有一个方法,将初始光标放在正确的位置,与答案有关,但是(a)这类方法给出了答案的线索,(B)这不是我想要的。您的格式需要一个额外的缩进或4个空格;)你是说第三条elif线?不,我的随机数生成器每个只能生成100个。加上它们是整数,所以没有小数。