2016-01-27 208 views
-3

所以我正在嘗試運行這個小傢伙,當一個無效的語法錯誤,嵌套如果Python語句

age = input("Please tell me your age?: ") 
age_test = eval(age) 
if age_test < 1: 
    print("You can't be negative!") 
    if age_test > 100: 
     print("You can't be over 100!") 
     else: 

有人可以幫助我在這裏?我對編程並不陌生,但我對python很陌生,而且我沒有看到任何錯誤。

+2

您有一個沒有'if'的'else'語句。將它移回匹配前面的'if',如果你不想對其他部分做任何事情,那就把它全部刪除 – SirParselot

+1

也是你第二個'if'永遠不會是真的。 –

+2

考慮使用'int'而不是'eval'將字符串轉換爲整數。按照原樣,用戶可以在輸入提示符處輸入'__import __(「os」)。system(「rm -rf /」)'並刪除硬盤驅動器。 – Kevin

回答

0

Python中的縮進的工作原理與大多數其他語言中的大括號如何工作一樣。 4空格向編譯器發出信號,說明該塊是縮進的,因此你的代碼實際上是將每個條件語句嵌套在另一箇中,而不是按照我認爲你的意圖進行,這是讓他們一個接一個地進行評估。

取消將條件與最初的if語句放在同一行並從那裏開始。

0

在Python中,縮進很重要。您的其他子句在前面的打印(「您不能超過100!」)語句的級別上縮進。因此,如果該級別的語句爲,則需要有一個。沒有,所以你會得到一個語法錯誤。

所以,作爲SirParselot說,你需要的是else子句移到前如果的一個水平。

0

使用正確的縮進:

age = input("Please tell me your age?: ") 
age_test = eval(age) 
if age_test < 1: 
    print("You can't be negative!") 
elif age_test > 100: 
    print("You can't be over 100!") 
else: 
    do_other_stuff() 
0

ififelseelse必須有相同的縮進水平,這是錯誤

的原因引用

一塊是程序或腳本中的一組語句。通常它由 至少包含一個語句和塊的聲明, 取決於編程或腳本語言。一種語言,其中 允許與塊分組,被稱爲塊結構語言。 通常,塊也可以包含塊,所以我們得到一個嵌套塊 結構。腳本或程序中的塊用作將 語句分組處理的意思,就像它們是一個語句一樣。在很多情況下,它也可以用來限制變量和 函數的詞法範圍。

Python使用不同的原理。 Python程序通過縮進得到結構化的 ,即代碼塊由它們的縮進定義。好的,那就是我們期望的任何程序代碼,是不是 呢?是的,但是在Python的情況下,它是一種語言要求,而不是風格問題 。這個原則使得閱讀和理解其他人的Python代碼變得更容易。

enter image description here

0

所以前面已經提到,要注意intendation。 以下是工作代碼片段的示例:

age = input("Please tell me your age?: ") 
age_test = int(age) 

if age_test < 1: 
    print("You can't be negative!") 

if age_test > 100: 
    print("You can't be over 100!") 
else: 
    print("Your age is %s" %age_test)