2012-08-10 53 views
-1

我有蟒蛇以下代碼:在Python中布爾變量是否可變?

def update(request, id): 
    success = 0 

    try: 
    product = Mattress.objects.get(id=id) 
    success = 1 
    except Mattress.DoesNotExist: 
    pass 

    if success == 1: 
    return render_to_response("success.html") 
    else: 
    return render_to_response('failure.html') 

這段代碼檢查「成功」布爾值的有效方法。如果代碼通過try語句,將「成功」更改爲1還是保持0?

+1

if if == 1: – VoronoiPotato 2012-08-10 20:29:45

+7

你的代碼中沒有布爾值,你也不會改變任何東西。 – BrenBarn 2012-08-10 20:30:47

+0

這段代碼有很多問題。 – Wug 2012-08-10 20:31:03

回答

7

回答你的問題:

都是布爾可變的蟒蛇?

是和否。被賦值爲布爾值的變量是(可能總是,在這種情況下絕對是可變的),是的。它們也不限於分配布爾值,因爲變量不是靜態類型的。

但布爾人TrueFalse本身並不可變。他們是不能修改的單身人士。在您的實際代碼

展望:

if success = 1: 

是無效的語法,你想有一個==那裏。此外,您應該使用01來獲得成功和失敗值,您應該使用TrueFalse。所以你應該重構這樣的東西:

def update(request): 
    success = False 

    try: 
     product = Mattress.objects.get(id=id) 
     success = True 
    except Mattress.DoesNotExist: 
     pass 

    if success: 
     return render_to_response("success.html") 
    else: 
     return render_to_response('failure.html') 
+0

感謝您的幫助!爲澄清/學習的快速問題,是否需要包含「成功=錯誤」? – goelv 2012-08-10 20:38:32

+1

*是*(儘管以大寫字母F爲例)。在檢查其值之前,每個變量都必須分配給它。 – 2012-08-10 20:39:18

+1

@goelv是的,否則你會因爲失敗而得到一個NameError,因爲你試圖檢查一個尚未分配的變量的值 – 2012-08-10 20:39:27

1

是的。 success將成功更改爲1。

+1

我的不好,那是一個錯字。我糾正了它。現在怎麼樣? – goelv 2012-08-10 20:30:46

1

這段代碼有一些錯誤。

  1. 首先,你沒有使用布爾類型。 Python的布爾值是TrueFalse
  2. 其次,你沒有比較你的if語句。該行在Python 3中無效。您要查找的是:if success == 1:if success == True:
  3. 無論布爾型不變,您仍然可以爲變量分配布爾值。我相信它們是以原始類型存儲的,所以它們和其他原始類型一樣不可變。
1

你應該考慮使用實際的布爾值而不是整數。您可以將success設置爲truefalse,Python會將它們解釋爲1和0值的關鍵字。使用數字可能有點棘手,因爲某些語言會解釋不同的事物。在某些語言中,0是false,但除0之外的任何值都被認爲是true。但是,你的問題的答案是肯定的,它會工作得很好。