Форум сайта python.su
def search(arr, symb0, symb1 = ""):
BefArr = arr[:(arr.index(symb0) + 1)] #symbols before symb0
AftArr = arr[(arr.index(symb0)+1):] #symdols after symb0 #symbols between symb0 and symb1
if symb1 != "": #BetArr symbols between symb0 and symb1
if symb1 in AftArr: BetArr = AftArr[:arr.index(symb1)]
else: BetArr = arr[:]
else: BetArr = None
А вот как применить здесь кодНет, не ошибаетесь. А вам был нужен модуль или работающая программа? Я думал, что и то и другое. Вот я и показал, как сделать из вашего модуля работающую программу.я не совсем понял, а вернее, совсем не понял. Насколько я знаю, такие конструкции применяют в случае, если нужно сделать модуль скриптом. Я ошибаюсь?def main(argv):
....
if __name__ == '__main__':
sys.exit(main(sys.argv))
Офлайн
from random import choice, randrange
from string import letters
from copy import copy
def generate(KolSymb):
arr = [choice(letters) for i in xrange(0,KolSymb)]
for i in xrange(randrange(2,3)):
arr[randrange(0,KolSymb)] = ":"
return arr
def search(arr, symb0, symb1 = ""):
BefArr = arr[:(arr.index(symb0) + 1)] #symbols before symb0
AftArr = arr[(arr.index(symb0)+1):] #symdols after symb0 #symbols between symb0 and symb1
if symb1 != "": #BetArr symbols between symb0 and symb1
if symb1 in AftArr: BetArr = AftArr[:arr.index(symb1)]
else: BetArr = arr[:]
else: BetArr = None
return BefArr, AftArr, BetArr
if __name__ == '__main__':
print search(generate(10), ":", ":")
Офлайн
Это правильный ход мыслей, если вы насчет if __name__ == ‘__main__’.
Во-первых я не вижу тут исправлений в соответствии с моими предыдущими замечаниями (http://www.python.su/forum/viewtopic.php?pid=36297#p36297).
Во-вторых - generate(10) есть плохо. Количество символов нужно сделать параметром командной строки. 10 можно сделать значением этого параметра по умолчанию, если оно вам так нравится.
Офлайн
# -*- coding: cp1251 -*-
from random import choice, randrange
from string import letters
from copy import copy
import sys
def generate(KolSymb):
arr = [choice(letters) for i in xrange(0,KolSymb)]
for i in xrange(randrange(2,3)):
arr[randrange(0,KolSymb)] = ":"
return arr
def search(arr, symb0, symb1 = ""):
temp = arr.index(symb0)
BefArr = arr[:(temp + 1)] #symbols before symb0
AftArr = arr[(temp + 1):] #symdols after symb0 #symbols between symb0 and symb1
if symb1: #BetArr symbols between symb0 and symb1
if symb1 in AftArr:
BetArr = AftArr[:arr.index(symb1)]
else:
BetArr = arr[:]
else:
BetArr = []
return BefArr, AftArr, BetArr
if __name__ == '__main__':
if len(sys.argv) == 1:
print search(generate(10), ":", ":")
if (len(sys.argv) != 4) and (len(sys.argv) != 1):
print("Ошибка ввода!")
else:
Name, Kol, Symb1, Symb2 = sys.argv
print search(generate(int(Kol)), Symb1, Symb2)
if __name__ == '__main__':
if len(sys.argv) == 1:
print search(generate(10), ":", ":")
if (len(sys.argv) != 4) and (len(sys.argv) != 1):
print("Ошибка ввода!")
else:
Name, Kol, Symb1, Symb2 = sys.argv
print search(generate(int(Kol)), Symb1, Symb2)
EdЭто на случай, если условие задачи изменится и речь пойдёт о разных символах.
А зачем вам этот symb1? Вроде в задаче у нас только один символ фигурирует.
Отредактировано (Дек. 4, 2009 13:12:55)
Офлайн
Оч хорошо. Выглядит как настоящий питоновый скрипт :)
При проверке параметров используйте elif вместо второго if, тогда проверку len(sys.argv) != 1 можно убрать.
Можно также проверить случай, когда передано 2 параметра - Kol и symb1.
При ошибке в параметрах принято выдавать usage - пояснение по использованию программы. А то получается, что юзеру нужно лезть в исходник, чтобы понять что же вашему скрипту нужно.
Насчет запутанности. Более pythonic код использовал бы принцип EAFP: Easier to ask for forgiveness than permission (проще попросить прощения, чем разрешения).
Тогда ваш код мог бы выглядеть как-нибудь так:
try:
_, Kol, Symb1, Symb2 = sys.argv
except ValueError:
if len(sys.argv) == 1:
Kol = "10"
Symb1 = Symb2 = ":"
else:
print("Ошибка ввода")
print("Usage: %s <number of symbols> <symbol 1> <symbol 2>" % os.path.basename(sys.argv[0]))
sys.exit(1)
print(search(generate(int(Kol)), Symb1, Symb2))
sys.exit(0)
Отредактировано (Дек. 4, 2009 14:20:30)
Офлайн