2013-01-21 92 views
0

是否有任何類型的變量允許我增加它的值,而不會覆蓋記憶的值?例如:沒有重置的Python變量添加

def main(): 
var = 0 

    inc = input("Want to increase your variable?") 
    if inc == "yes": 
     var = var + 1 
     main() 
     #restart the script from the top 
    if inc == "no": 
     exit() 

當代碼重新啓動時,VAR將返回到它的「0」值,而不必記住的是,「VAR = VAR + 1」我們做了位,是否有任何變量類型,將自動更新到匹配腳本中所做的更改?

+0

Python 2或3?在Python 2中,您必須使用'raw_input'而不是'input'。而你**必須**正確地縮進你的代碼!它在Python中不是可選的。 – ThiefMaster

+1

你是什麼意思「當代碼重新啓動?」你的意思是什麼時候該計劃關閉並重新開放?或者當'main'函數被遞歸調用? –

回答

0

當你運行你的函數main(),你將var重置爲0.注意它是如何在函數內部的,所以函數內部的任何東西都會運行。

其中var不會每次都改爲0:

var = 0 
def main(number): 
    print number 
    inc = raw_input("Want to increase your variable?") # Or input() if python 3.x 
    if inc == "yes": 
     number += 1 
     return main(number) 
    if inc == "no": 
     return number 

var = main(var) 
print var 

VAR在這種情況下是一個全局變量。它可以在整個代碼中訪問。

上面的代碼,運行時:

python file.py 
0 
Want to increase your variable?yes 
1 
Want to increase your variable?yes 
2 
Want to increase your variable?no 
2 #result of printing var at the end 

我希望這回答了你的問題。如果您有任何其他問題,我會盡力回答;)。我對python有點新手。

+0

當從另一個定義引用主(數字)時,它會給我「NameError:全局名稱」編號「未定義」。 這就要提到它是這樣的: '高清secondmain(): ANS的raw_input =( 「?又主代碼要轉到」) 如果ANS == 「是」: 主(人數) 如果答==「否」: 退出()' 對不起,我不知道必須把代碼標籤周圍。 –

+0

數字是參數。當你調用一個函數時,你用參數填充參數。所以當你做main()時,你必須放置一個參數/參數:例如main(4)。 – TerryA

+0

如果您仍然遇到問題,請參閱docs.python中的基本功能幫助鏈接:http://docs.python.org/release/1.5.1p1/tut/functions.html – TerryA

0

否 - 如果您按照預期更改變量,則會更改該變量的值,但某些使用後綴增量除外,即使該變量僅在該行上保留其「舊」狀態以進行評估。

聽起來像你需要使用「溫度」變量。雖然顯示的代碼並沒有真正告訴我什麼,tbh。

UPDATE:

隨着編輯你的問題......我想你的意思是你想要的功能中一個全局變量,但這函數調用之間記憶狀態。

這是一個很好的來源如何製造和使用這些全局變量:

http://www.python-course.eu/global_vs_local_variables.php

DOUBLE UPDATE:

你可能意味着你想要的變量要記住即使你關閉了其狀態該程序!在這種情況下,使用pickle作爲另一個答案的詳細信息。

1

如果您的意思是var的值在迭代中未保留,這與您在main()中使用遞歸有關。這是完全沒有必要的,並與迭代更好的替代:

var = 0 

while True: 
    inc = input("Want to increase your variable?") 
    if inc == "yes": 
     var = var + 1 
    else: 
     break 
    print(var) 

如果你的意思是要保留的在您的整個腳本調用var值,可以使用pickle

import os, pickle 

PERSIST_FILE = "persist.dat" 
if os.path.exists(PERSIST_FILE): 
    var = pickle.load(open(PERSIST_FILE, "rb")) 
else: 
    var = 0 

while True: 
    print(var) 
    inc = input("Want to increase your variable?") 
    if inc == "yes": 
     var = var + 1 
    else: 
     break 

pickle.dump(var, open(PERSIST_FILE, "wb")) 
+0

更好地使用'with'而不是依靠引用GC來關閉文件。該文件將被立即關閉的事實是CPython特有的,不應該被依賴。 – ThiefMaster