Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 5, 2013 13:35:21

Florenzo
Зарегистрирован: 2013-06-05
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Сегодня на манеже кортеж в кортеже

Проблема: Существует кортеж в кортеже. Если перебирать кортеж через “for i in a…..”
то он перебирает только те буквы в кортеже, которые не вложенные.
Вопрос: как сделать, чтобы он (for i in a….) перебирал и буквы во внутреннем кортеже тоже.

Конечно, я могу сделать отдельные кортежи, и отдельно их перебирать, но это же “не наш метод”

Пример вот:

# -*- coding: utf-8 -*-
                                                                    #
cortege1 = (('а','я'),'б','в','г','д',('е','э','ё'),'з',('и','й'))
                                                                    #
###   "внутренние"  а,я // е,э,ё // и, й   - не перебираются, а "внешние"  б,в,г,д,з - перебираются
                                                                    #
s = input('введите слово --> ') 
                                                                   # 
                                                                   #
### буквы слов только из этого кортежа!!!!
### тестовые слова - где, дай, бай, вай, айяйяй, идея
###  вместо  "где" будет "г, д"  // вместо "идея" будет только "д"
                                                                   #
                                                                   #
for a in s:
    if a in cortege1:
           print('cortege1 = ', a)
                                                                    #
                                                                    #

Отредактировано Florenzo (Июнь 5, 2013 13:38:40)

Офлайн

#2 Июнь 5, 2013 14:13:20

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Сегодня на манеже кортеж в кортеже

Внимательно прочитайте статью в Википедии, посвещенную рекурсии



Офлайн

#3 Июнь 5, 2013 15:34:58

Florenzo
Зарегистрирован: 2013-06-05
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Сегодня на манеже кортеж в кортеже


что такое рекурсия я понимаю, и даже смогу сделать процедуру,
а вот чего я не понимаю, так это как я могу сказать программе, что мне надо пройти именно вовнутрь.
Если бы это “вовнутрь” было в каждом элементе, я бы сделал перебор. А тут - не в каждом.

Офлайн

#4 Июнь 5, 2013 15:38:05

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Сегодня на манеже кортеж в кортеже

for i in cortege1:
    print(isinstance(i, str))

Офлайн

#5 Июнь 5, 2013 16:01:31

alexbadaloff
От: Иваново
Зарегистрирован: 2013-04-11
Сообщения: 198
Репутация: +  16  -
Профиль   Отправить e-mail  

Сегодня на манеже кортеж в кортеже

Florenzo
а вот чего я не понимаю, так это как я могу сказать программе, что мне надо пройти именно вовнутрь.
Проверяй элемент в кортеже на то, что он кортеж (tuple):
isinstance(i, tuple)



————————–
Истина где-то рядом

Офлайн

#6 Июнь 5, 2013 16:28:46

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

Сегодня на манеже кортеж в кортеже

для чего используются внутренние кортежи?

Офлайн

#7 Июнь 5, 2013 16:43:28

Florenzo
Зарегистрирован: 2013-06-05
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Сегодня на манеже кортеж в кортеже


Похоже, что проверка на instanse тоже только первый слой снимает, вот:

# -*- coding: utf-8 -*-
cortege1 = (('а','я'),'б','в','г','д',('е','э','ё'),'з',('и','й'))
s = input('введите слово --> ') 
### буквы только из этого кортежа!!!!
### тестовые слова - где, дай, бай, вай, айяйяй, идея
for a in s:
    if a in cortege1:
        #  print('cortege1 = ', a)
        print (isinstance (a, str), a)

или же последняя строка -
 print (isinstance(cortege1, tuple), a)

результат одинаковый:

>>>
введите слово –> идея
True д

===================

если же я вместо
print (isinstance (a, str), a)

ставлю
        print (isinstance (a, cortege1), a)

то вообще бред получается:

>>>
введите слово –> идея
Traceback (most recent call last):
File “…….py”, line 13, in <module>
print (isinstance (a, cortege1), a)
TypeError: isinstance() arg 2 must be a type or tuple of types




Офлайн

#8 Июнь 5, 2013 16:49:20

alexbadaloff
От: Иваново
Зарегистрирован: 2013-04-11
Сообщения: 198
Репутация: +  16  -
Профиль   Отправить e-mail  

Сегодня на манеже кортеж в кортеже

Florenzo
Похоже, что проверка на instanse тоже только первый слой снимает, вот:
Почитай про обход в глубину.



————————–
Истина где-то рядом

Офлайн

#9 Июнь 5, 2013 16:51:17

Florenzo
Зарегистрирован: 2013-06-05
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Сегодня на манеже кортеж в кортеже

bismigalis
для чего используются внутренние кортежи?

в-общем там в кортеже хитрый перебор букв, мне надо чтобы именно на определенном месте
в кортеже/списке была или нужная буква, или несколько букв сразу, чтобы потом по порядковому номеру
в кортеже с ними делать операции. Ну, грубо говоря, буква “и”, она же по смыслу и “й”, и старорусское/украинское “i”, и номер у них в кортеже (мне так нужно), должен быть одинаковый. Потом, если я нахожу это “и” или “i” то я с ними работаю отдельно. Но хотелось бы через конструкцию “for a in b” их находить, а не делать несколько отдельных кортежей. И, если несколько отдельных кортежей, то вероятность ошибки намного больше будет. Если не найду решения, то, конечно придется несколько делать…

Офлайн

#10 Июнь 5, 2013 16:54:18

alexbadaloff
От: Иваново
Зарегистрирован: 2013-04-11
Сообщения: 198
Репутация: +  16  -
Профиль   Отправить e-mail  

Сегодня на манеже кортеж в кортеже

Мне кажется для этой задачи больше подходит словарь (dict) нежели кортеж.



————————–
Истина где-то рядом

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version