簡體   English   中英

Python要求用戶輸入沒有換行符?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM