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