[英]Python ask for user input without a newline?
我幾天前才剛開始使用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
您的問題是,您在沒有指定所需內容的情況下要求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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.