Синтаксическая ошибка, которую я не могу найти - PullRequest
2 голосов
/ 23 февраля 2011

Я дергаю себя за волосы ...

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 CRAP, забыл показать, что это за ошибка ..

Файл "macchanger.py", строка 12 a + = 1 ^ SyntaxError: неверный синтаксис

Ответы [ 4 ]

4 голосов
/ 23 февраля 2011

Вы ищете логическое или (or), а не побитовое или (|).

Chars - это не функция, а массив. Используйте индексы массива, чтобы получить значения. (т.е. chars[rand], а не chars(rand).

Вам не хватает скобок после добавления строки случайного символа.

Вы также не можете добавлять к кортежам, нужно составить MAC список.

Модуль random также не имеет функции randomint. Вы ищете randint.


edit : Это также может заменить всю вашу функцию, если вы хотите использовать генераторы Python:

MAC = ':'.join(['%02x'%c for c in [0, 0]+[random.randint(0,255) for d in range(4)]])
2 голосов
/ 23 февраля 2011

Попробуйте

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
1 голос
/ 23 февраля 2011

Есть несколько вопросов:

  • Тот, о котором вам говорит компилятор - не соответствует паренсу в строке выше (как всегда, точное сообщение об ошибке помогло бы)
  • Вы используете | (побитовое или), когда хотите or (логическое или). Обратите внимание, что вы можете сделать эту проверку лучше, используя a in <tuple of values>.
  • Вы не можете .append записать в кортеж (или иным образом изменить его), использовать список.
  • Вы должны просто использовать for a in range(5, 18) вместо ручного подсчета в цикле while.
  • Вы вызываете кортежи chars - при индексации используются квадратные отступы (chars[...]). Обратите внимание, что вы просто используете random.choice.
1 голос
/ 23 февраля 2011
  1. отсутствует закрывающая скобка в

    MAC.append (символы (random.randomint (0,15))

  2. MAC должен быть в списке, так как вы добавляете, кортежи неизменны

  3. random.randint (а не random.randomint)

...