2017-03-25 91 views
0

我需要再次幫助。問題是,當我調用一個應該添加到變量的函數時,變量保持其原始值。變量保持其值

代碼:

import random 

def christncombat(x,y,z): 
    x += 1 
    if x > 26: 
     x = 1 
     y += 1 
    if y > 26: 
     y = 1 
     z += 1 
    if z > 26: 
     z = 1 
     x = 1 
     y = 1 

encrypt = {65:90, 66:90, 67:72, 68:78, 69:77, 70:83, 71:87, 72:67, 73:73, 74:89, 75:84, 
      76:81, 77:69, 78:68, 79:79, 80:66, 81:76, 82:82, 83:70, 84:75, 85:85, 86:86, 
      87:71, 88:88, 89:74, 90:65} 
encrypted = [] 

r1 = random.randint(1,26) 
r2 = random.randint(1,26) 
r3 = random.randint(1,26) 
security = str(r1) + "a" + "-" + str(r2) + "b" + "-" + str(r3) + "c" 

input_en = input("Zadejte text, ktery chcete zasifrovat (pouzivejte velka pismena): ") 

for i in range(0,len(input_en)): 
    coded = input_en[i] 
    coded = ord(coded) 
    coded = encrypt[coded] 
    full = r1 + r2 + r3 
    coded += full 
    while(coded > 90): 
    rekt = coded - 90 
    coded = 65 + rekt 
    christncombat(r1,r2,r3) 
    full1 = r1 + r2 + r3 
    coded += full1 
    while(coded > 90): 
     rekt = coded - 90 
     coded = 65 + rekt 
    done = chr(coded) 
    encrypted.append(done) 
print(encrypted) 
print("Bezpecnostni kod je",security) 

雖然這個問題可能是這一部分:

def christncombat(x,y,z): 
    x += 1 
    if x > 26: 
     x = 1 
     y += 1 
    if y > 26: 
     y = 1 
     z += 1 
    if z > 26: 
     z = 1 
     x = 1 
     y = 1 
+0

逗留你的意思是「可變停留在其原始價值」。什麼變量?有什麼價值? – Carcigenicate

+0

你能具體描述你的問題嗎? – pvg

+0

你的'christncombat'函數只修改本地'x,y,z',它對你傳遞給它的任何東西都沒有影響。 –

回答

1

你需要從函數返回修改後的值,如:

def christncombat(x,y,z): 
    x += 1 
    if x > 26: 
     x = 1 
     y += 1 
    if y > 26: 
     y = 1 
     z += 1 
    if z > 26: 
     z = 1 
     x = 1 
     y = 1 
    return x, y, z 

然後調用代碼,你可以捕捉這樣的返回值:

r1, r2, r3 = christncombat(r1, r2, r3) 
+0

我讀過關於這個問題的消息,並且我找到了一個「全局」的解決方案,但是我不能讓它工作。我如何在代碼中實現它?現在嘗試你的解決方案。 –

+0

@JáProstěJá是的,它可以通過'global'指令修改全局變量,但這通常不是一個好主意。理解和修改不使用全局變量傳遞數據的代碼會更容易。 –

+0

我讀過這是一個不好的習慣。這是真的,它只是不好?就像「goto」命令一樣,這是不好的做法嗎? –

1

也許你想從你的函數返回值?你可以把這些值的列表,並返回名單:

def christncombat(x,y,z): 
     x += 1 
     if x > 26: 
     x = 1 
     y += 1 
     if y > 26: 
      y = 1 
      z += 1 
     if z > 26: 
      z = 1 
      x = 1 
      y = 1 

     value_list = [x, y, z] 
     return value_list 

現在,你可以調用函數在你的代碼的主要部分:

new_value_list = christncombat(r1,r2,r3) 

現在,在你new_value_list,你有r1,r2和r3都變成了你想要的東西。現在,您可以訪問所有的變量:

new_r1 = new_value_list[0] 
new_r2 = new_value_list[1] 
new_r3 = new_value_list[2] 
+2

我會在你的最後一個例子中使用解構,而不是手動抓取元素。這將是顯着更整潔。另外,由於它是一個固定大小的集合,所以元組比列表更合適。 – Carcigenicate

+0

解構是一個好主意 – Ajax1234

+0

這些列表有什麼意義?只需從函數返回一個元組,並在函數調用中使用元組賦值。 –