2011-02-23 141 views
2

我在這裏拉我的頭髮...語法錯誤,我無法找到

import os 
import random 
MAC = (0,0,":",0,0,":") 
chars = ('0','1','2','3','4','5','6','7','8','9','a','b','c','d','e') 
a = 5 
while (a <= 17): 
    if a == 6 | a == 9 | a == 12 | a == 15: 
    MAC.append(":") 
    else: 
    MAC.append(chars(random.randomint(0,15)) 

    a += 1 
print MAC 

我在做什麼錯?正如示例所示,縮進是正確的。歡迎任何幫助。 編輯: OH廢話,忘顯示錯誤是什麼..

File "macchanger.py", line 12 a += 1 ^SyntaxError: invalid syntax

+0

你爲什麼排除''f''? – 2011-02-23 17:08:14

回答

4

您正在尋找的邏輯或(or),而不是按位或(|)。

字符不是一個函數,而是一個數組。使用數組下標來獲取值。 (即chars[rand]而不是chars(rand)

你錯過了追加隨機字符線後括號。

你也不能追加到元組,需要做出MAC列表。

random 。模塊還沒有 'randomint' 功能,您正在尋找randint


編輯::T他也可以代替你的整個功能,如果你正在尋找使用Python的發電機:

MAC = ':'.join(['%02x'%c for c in [0, 0]+[random.randint(0,255) for d in range(4)]]) 
+0

'||'甚至是有效的Python語法嗎?邏輯或是'或'。這裏的'chars'是一個元組。 – Ken 2011-02-23 17:07:17

+0

呃,你說得對。 – yan 2011-02-23 17:08:30

+0

你介意給我解釋一下你的一行功能是如何工作的嗎?我很難找出答案。 – marcoamorales 2011-02-23 17:18:26

2

嘗試

import os 
import random 

def makeMAC(pre=None): 
    pre = [int(i) for i in pre] if pre else [] 
    for byte in range(len(pre), 6): 
     pre.append(random.randint(0,255)) 
    return ':'.join('%02x'%(i) for i in pre) 

print makeMAC([0,0]) 

回報

00:00:cd:c1:7d:c0 
0
  1. 缺少的結束parenthese在

    MAC.append(字符(隨機。 randomint(0,15))

  2. MAC需要在列表中,因爲要追加,元組是不可改變的

  3. random.randint(而不是random.randomint)

1

有幾個問題:

  • 的一個編譯器告訴你 - 不匹配時的括號線之上(一如既往,確切的錯誤信息會幫助)
  • 當您想要or(邏輯或)時,您正在使用|(按位或)。請注意,您可以使用a in <tuple of values>更好地進行檢查。
  • 您不能將.append轉換爲元組(或以其他方式改變它),請使用列表。
  • 您應該簡單地使用for a in range(5, 18)而不是在while循環中手動計數。
  • 你是致電chars元組 - 索引使用方形背襯(chars[...])。請注意,您只需使用random.choice