2017-01-13 104 views
-2

我已經通讀了一些全局變量的東西,但是我的代碼不起作用。 下面的代碼:Python中的全局變量3

global ta 
global tb 
global tc 
global td 

ta = 1 
tb = 1.25 
tc = 1.5 
td = 2 

def rating_system(t1, t2): 
    global ta 
    global tb 
    global tc 
    global td 

    if t1 < t2 and t2/t1 <= 4: 
     rating = (t2/t1) * 0.25 
     t1 += rating 
     t2 -= rating 
    else: 
     rating = (t2/t1) * 0.4 
     t1 += rating 
     t2 -= rating 
    print(str(t1) + " and " + str(t2)) 

rating_system(ta, td) 

我給所有變量global定義,但是當我運行rating_system(),它只是打印爲變量的權數,但如果我打印功能之外的變量它給我的默認數字。

+9

你沒有使用'ta','tb','tc',或'td'內功能。您只需修改't1'和't2'(它們是'ta'和'td'的本地*副本*)。 – chepner

+4

你讀過「通過一些全球變量的東西」?你閱讀的第一件事應該是:不要使用'global'! – Matthias

+1

爲什麼你使用全局變量? – jonrsharpe

回答

0

只顯示全局變量是如何工作的。你可以看到,價值爲全局變量設置函數本身內其變化的八條global

global ta 
global tb 
global tc 
global td 

ta = 1 
tb = 1.25 
tc = 1.5 
td = 2 

def rating_system(t1, t2): 
    global ta 
    global tb 
    global tc 
    global td 

    if t1 < t2 and t2/t1 <= 4: 
     rating = (t2/t1) * 0.25 
     t1 += rating 
     t2 -= rating 

    else: 
     rating = (t2/t1) * 0.4 
     t1 += rating 
     t2 -= rating 
    print "From Function" 
    print(str(t1) + " and " + str(t2)) 
    ta =t1 
    tb =t2 
print "Before" 
print ta,tb,tc,td  
rating_system(ta, td) 
print "After" 
print ta,tb,tc,td 

輸出

Before 
1 1.25 1.5 2 
From Function 
1.5 and 1.5 
After 
1.5 1.5 1.5 2 
5

都不是真正在做這個節目什麼。目前還不清楚,但我會猜測你要做的是將兩個數字傳入函數,並用函數的結果替換它們。在這種情況下,所有你需要做的是return結果並重新分配他們當你調用該函數:

def rating_system(t1, t2): 
    if t1 < t2 and t2/t1 <= 4: 
     rating = (t2/t1) * 0.25 
     t1 += rating 
     t2 -= rating 
    else: 
     rating = (t2/t1) * 0.4 
     t1 += rating 
     t2 -= rating 
    return (t1, t2) 

(ta, td) = rating_system(ta, td) 
+0

好的男人。這清除了很多東西,謝謝一噸。 – SamtheMan