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

时间:2015-08-05 04:05:42

标签: python python-3.x

我几天前刚开始使用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

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

4+5
9.00000

我输入数字或运算符之后我不希望它开始换行,当它沿着一行打印时,它看起来更像是一个实际的计算器。这可能吗?如果可以的话怎么办?顺便说一句,我知道end=""适用于print但不适用于input,因为它不接受参数。另外我知道整个计算器的东西是多余的,考虑到你可以在python IDLE中轻松进行计算,但我认为这是一个很好的学习方法。如果您需要,这是完整的代码:

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

2 个答案:

答案 0 :(得分:0)

您的问题是您在没有指定所需内容的情况下要求ob_end_clean(); $objWriter->save('php://output'); exit(); 。所以,如果你看一下第一个: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...   "))

使用您的方法:

Please enter a number...   5
Enter a valid operator...   +
Please enter a number...   6
11.00000

这是我假设你所指的额外换行符。

答案 1 :(得分:0)

那是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