Python 从右到左获取输入
我正在编写一个简单的程序,计算一个随机加法数学问题,并要求用户输入答案 当用户输入答案时,计算机从左到右输入输入的键。我希望输入做相反的事情:从右到左 当然,加法的工作方式是先在最右边加上一列——一位数,然后是十位数和百位数,等等 例如,如果我在上面(635)键入这个加法问题的答案,然后按顺序键入(6然后3然后5),我希望6显示在9+6下,然后当我键入3时,我希望它将6(向左)移动到5+7下,3将显示在9+6下,然后当我输入5时,它将6移动到3+2下,将3移动到5+7下方,然后将5放置在9+6下方 是否有其他输入功能或模块可供我使用?还是你拥有的超秘密技术?谢谢 这是我的密码: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+
# 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个。加上它们是整数,所以没有小数。