Python在没有换行符的情况下请求用户输入?

Python在没有换行符的情况下请求用户输入?,python,python-3.x,Python,Python 3.x,几天前我刚开始使用python,一直在使用计算器(不是非常基本,但也不是很高级)。这个问题并没有阻止代码运行或其他任何事情,它只是一个可视化的东西。 控制台中的输出如下所示(括号中的内容解释了正在发生的事情,实际上并不是输出的一部分): 基本上,当我将它输入控制台时,我希望它看起来是这样的: 4+5 9.00000 我不希望它在我输入一个数字或运算符或其他什么后开始换行,当它沿着一行打印时,它看起来更像一个实际的计算器。这是否可行?如果可行,如何实现?顺便说一句,我知道end=”“与print

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

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

4+5
9.00000
我不希望它在我输入一个数字或运算符或其他什么后开始换行,当它沿着一行打印时,它看起来更像一个实际的计算器。这是否可行?如果可行,如何实现?顺便说一句,我知道
end=”“
print
一起工作,但与
input
不一起工作,因为它不接受参数。另外,我知道整个计算器的事情是多余的,考虑到你可以在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

您的问题是,您请求的是
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
使用您的方法:

Please enter a number...   5

Enter a valid operator...   +

Please enter a number...   6
11.00000
额外的换行符,我假设您指的是。

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

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

按Enter键将生成一条新行;为什么不使用空格作为分隔符,然后将字符串拆分为多个部分并从中开始呢。例如,您输入
4+5
。也不需要空格,只需让用户输入整个内容,例如
4+5
,然后通过解析和计算结果一次处理整个表达式。@alfasin,当然,但实际上这比在
'
@Cyphase上拆分要高级一些,我要做的第一件事是删除所有空格:)@alfasin如果这真的很简单,很抱歉,但我对Python非常陌生,它是我的第一种编程语言。。。。但是我怎么才能一下子解释整个事情呢?两个数字是int(或float)和+或-或用户输入的任何字符串?另外,我如何检查输入的特定部分,以查看是否匹配了有效的运算符?我想您误解了这个问题。我可能已经这样做了,我会等待评论,然后根据需要进行修改。否,以第一个while循环为例:用户输入被转换为浮点,并存储在变量firstNumber中。仅当用户输入的值返回错误时,才会使用文本字符串,这表明他们没有输入正确的输入类型。谢谢!虽然我不太清楚
reduce()
函数的作用是什么。。。但我想这就是学习的整个过程。@modernwar24关于什么是reduce以及它是如何工作和工作的,有很好的解释
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