Python没有换行符就要求用户输入?

2024-10-04 07:32:20 发布

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

几天前我刚开始使用python,一直在研究计算器(不是非常基础,但也不是很高级)。这个问题并不妨碍代码的运行或其他任何事情,它只是一个可视化的东西。 控制台中的输出如下所示(括号中的内容解释了正在发生的事情,实际上并不是输出的一部分):

4 (user prompted for first number, press enter afterwards)
+ (user prompted for an operator, press enter afterwards
5 (user prompted for second number, press enter afterwards)
9.00000 (answer is printed)

Process finished with exit code 0

基本上,当我把它输入控制台时,我希望它看起来像这样:

^{pr2}$

我不希望它在我输入一个数字或运算符或其他任何东西之后开始换行,它看起来更像一个实际的计算器,当它沿着一行打印时。这有可能吗?如果可以,怎么做?顺便说一句,我知道end=""print一起工作,但不能与{}一起工作,因为它不接受参数。我也知道整个计算器的事情有点多余,考虑到你可以很容易地在python空闲时进行计算,但我认为这是一个很好的学习方式。以下是完整的代码,如果您需要的话:

import math

while True:
    try:
        firstNumber = float(input())
        break
    except ValueError:
        print("Please enter a number...   ", end="")
while True:
    operators = ['+', '-', '*', '/', '!', '^']
    userOperator = str(input())
    if userOperator in operators:
        break
    else:
        print("Enter a valid operator...   ", end="")
if userOperator == operators[4]:
    answer = math.factorial(firstNumber)
    print(answer)
    pause = input()
    raise SystemExit
while True:
    try:
        secondNumber = float(input())
        break
    except ValueError:
        print("Please enter a number...   ", end="")
if userOperator == operators[0]:
        answer = firstNumber + secondNumber
        print('%.5f' % round(answer, 5))
elif userOperator == operators[1]:
        answer = firstNumber - secondNumber
        print('%.5f' % round(answer, 5))
elif userOperator == operators[2]:
        answer = firstNumber * secondNumber
        print('%.5f' % round(answer, 5))
elif userOperator == operators[3]:
        answer = firstNumber / secondNumber
        print('%.5f' % round(answer, 5))
elif userOperator == operators[5]:
        answer = firstNumber ** secondNumber
        print('%.5f' % round(answer, 5))
pause = input()
raise SystemExit

Tags: answernumberinput事情计算器endprintenter
2条回答

您的问题是您请求input()而没有指定您想要的。所以如果你看第一个:firstNumber = float(input())它执行得很好,但是你点击了enter,它会给出一个错误,只有在你指定你想要的时候才会出现。在

尝试替换为以下内容:

...
try
    firstNumber = float(input("Please enter a number...   "))
...
    userOperator = str(input("Enter a valid operator...   "))
...
    secondNumber = float(input("Please enter a number...   "))

这就是你要找的吗?在

我用我的方法建议:

^{pr2}$

使用您的方法:

Please enter a number...   5

Enter a valid operator...   +

Please enter a number...   6
11.00000

我想你指的是额外的新行。在

这是一个nice exercise,正如我在评论中所写的,我将忽略空白,从用户那里获得一个完整的表达式,然后解析它并计算结果。下面是一个小演示:

def is_number(s):
    try:
        float(s)
        return True
    except ValueError:
        return False


def calc(expr):
    if is_number(expr):
        return float(expr)    
    arr = expr.split('+')
    if len(arr) > 1:
        return sum(map(calc, arr))
    arr = expr.split('-')
    if len(arr) > 1:
        return reduce(lambda x,y: x-y, map(calc, arr))
    arr = expr.split('*')
    if len(arr) > 1:
        return reduce(lambda x,y: x*y, map(calc, arr), 1)
    arr = expr.split('/')
    if len(arr) > 1:
        return reduce(lambda x,y: x/y, map(calc, arr))


print calc("3+4-2 *2/ 2")    # 5

相关问题 更多 >