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