从右到左输入

2024-09-27 07:35:54 发布

您现在位置:Python中文网/ 问答频道 /正文

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

当用户输入答案时,计算机从左到右输入输入输入的键。我希望输入的结果正好相反:从右到左。在

img

http://euclidmagazine.com/2010/12/why-do-we-carry-in-addition/

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

例如,如果我在上面(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()

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


Tags: the答案youinputifdefrandomresult
2条回答

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

Here's a link to the official documentation。在

Here's a good tutorial。在

这对我在UNIX系统上有效,使用getch fromthis answer从输入中读取一个字符。在

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上移动光标的控制序列,请参见this page。在

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

另请参见this chart of control characters。尝试使用ASCII 8(退格)、ASCII 127(删除)或ASCII 10(换行;如果执行换行但没有换行,则可能允许您在某些系统上重新键入同一行。)

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

请参阅this answer,了解如何一次从用户读取单个字符。在

如果在运行getch时遇到错误,下面的代码可能仍然有效;在UNIX系统上,它对我很有用;但是它要求用户在每个数字后按enter键。它假设用户一次只输入一个数字。在

^{pr2}$

相关问题 更多 >

    热门问题