Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 1
Регистрация: 26.03.2017
Сообщений: 83

Не работает вложенное условие

14.04.2017, 21:16. Показов 1548. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, дорогие форумчане! Нужна Ваша помощь. Столкнулся с проблемой вложенного условия. Не работает вложенный if. Счётчик всегда равен 0.

Код:

Python
1
2
3
4
5
6
7
8
9
10
11
12
  def count_ones(self, filename):
        """Count the number of ones on the tape."""
        count = 0
        file_open = open(filename,'r')
        file_open.seek(0)
 
        for elements in file_open:
            if elements == '1':
                print elements
                count = count + 1
        print count
        return count
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.04.2017, 21:16
Ответы с готовыми решениями:

Как здесь работает условие? Одно вложенное в другое
Мне непонятно почему независимо от ответа(true/false) срабатывает всегда этот вызов функции handler(isYes) Подскажите? Буду очень...

Как сделать вложенное условие?
Доброго утра! Что-то не могу разобраться, как сделать условие для цикла. Теоритически все понятно, а практически как-то не выходит ...

Вложенное условие, при группировке значений
привет форумчане, такой вопрос, есть след. лямбда выражение: ListBestandansicht = ListBestaende.GroupBy(x =>...

12
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
14.04.2017, 21:58
А вы настолько уверены, что у вас в файле есть '1', что даже файл не прикрепили?
0
0 / 0 / 1
Регистрация: 26.03.2017
Сообщений: 83
14.04.2017, 22:00  [ТС]
Да, настолько уверен. Собственно, проблему решил:

Исправленный код:

Python
1
2
3
4
5
6
7
8
9
10
11
    def count_ones(self, filename):
        """Count the number of ones on the tape."""
        count = 0
        file_open = open(filename,'r')
        file_open.seek(0)
        for elements in file_open:
            for elements in elements:
                if elements == "1":
                    count = count + 1
        print count
        return count
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
14.04.2017, 22:15
Цитата Сообщение от alex9816 Посмотреть сообщение
Да, настолько уверен.
То есть я был все-таки прав - строки в виде '1' у вас таки не было.

А зачем столько лишних манипуляций вокруг файла: seek(0), 'r' - это и так по умолчанию. И во 2-м python разве контекстных менеджеров для открытия файлов нет?
0
0 / 0 / 1
Регистрация: 26.03.2017
Сообщений: 83
14.04.2017, 22:28  [ТС]
Строка в виде "1" есть, и не одна. По поводу манипуляций - да, установку каретки в "0" можно опустить. Написал для того, чтобы проверить не связана ли проблема с этим. Насчёт контекстных менеджеров - я не в курсе на данный момент. Язык изучать начал недавно.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
14.04.2017, 22:33
Цитата Сообщение от alex9816 Посмотреть сообщение
Строка в виде "1" есть, и не одна
Вы явно путаете "строку как единое целое" и "значение в строке".
В вашем случае - если значения в строке разделены пробелом - все решается так:
Python
1
2
3
for elements in open(filename):
    if '1' in elements.split():
        count += 1
0
0 / 0 / 1
Регистрация: 26.03.2017
Сообщений: 83
14.04.2017, 22:42  [ТС]
Спасибо, попробую, учту на будущее)

Добавлено через 5 минут
А если файл выглядит вот так: ['1 L 1 1 L 0\n', '1 R 2 1 R 1\n', '1 L 0 1 R 3\n', '1 L 0 1 R 4\n', '1 R -1 0 R 2\n']. То использовать цикл со вложенным циклом как я писал выше? Одним никак не обойтись?

Добавлено через 2 минуты
И есть ли возможность не учитывать 1, перед которой стоит "-"?
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
14.04.2017, 22:46
Цитата Сообщение от alex9816 Посмотреть сообщение
А если файл выглядит вот так: ['1 L 1 1 L 0\n', '1 R 2 1 R 1\n', '1 L 0 1 R 3\n', '1 L 0 1 R 4\n', '1 R -1 0 R 2\n']
Даже еще проще:
Python
1
2
for elements in open(filename):
    count += elements.count('1')
>> 12

Цитата Сообщение от alex9816 Посмотреть сообщение
И есть ли возможность не учитывать 1, перед которой стоит "-"?
Можно (по мне так проще всего) регулярками. Хотя можно и проверками в цикле.
0
0 / 0 / 1
Регистрация: 26.03.2017
Сообщений: 83
14.04.2017, 23:06  [ТС]
А как условие проверки в таком случае будет выглядеть?

Python
1
if(elements - 1 == "-" and elements =="1")
Добавлено через 17 минут
Заинтересовали регулярки. Прочитал про них. Вот что получилось:

Python
1
2
3
4
5
6
7
    def count_ones(self, filename):
        """Count the number of ones on the tape."""
        count = 0
        for elements in open(filename):
            count += elements.count('1') - len(re.findall('-1', elements))
        print count
        return count
Или можно проще?
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
14.04.2017, 23:08
Python
1
2
3
import re
 
print(len(re.findall(r'(?<!-)1',open(filename).read())))
>>11

Добавлено через 1 минуту
Никаких циклов в данном случае не требуется - регулярка ищет всему файлу сразу.
0
0 / 0 / 1
Регистрация: 26.03.2017
Сообщений: 83
14.04.2017, 23:43  [ТС]
Хмм, интересно, запомню) А что по поводу проверок условиями?
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
15.04.2017, 13:54
Цитата Сообщение от alex9816 Посмотреть сообщение
А что по поводу проверок условиями?
Да просто запоминаем предыдущий символ:

Python
1
2
3
4
5
6
7
prev = '' 
count = 0
for elements in open(filename):
    for element in elements:
        if element == '1' and prev != '-':
            count += 1
        prev = element
0
0 / 0 / 1
Регистрация: 26.03.2017
Сообщений: 83
15.04.2017, 14:57  [ТС]
Спасибо!)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.04.2017, 14:57
Помогаю со студенческими работами здесь

Не работает вложенное ЕСЛИ
Добрый день, не могли подсказать почему не работает вложенное ЕСЛИ?

Не полностью работает вложенное меню
Здравствуйте! Подскажите пожалуйста как сделать, чтобы на сайте http://globusrostov.ru/ при наведение обучение за рубежом все пункты...

Вложенное условие "если"
Не понимаю, делаю такие условия: if x&lt;1 then begin ... ... ... end; else // РУГАЕТСЯ ТУТ if x&gt;1...

Условие if (условие1 || условие 2) не работает а по отдельности работатет
Добрый день Наверняка я туплю но тем не менее задачу не могу решить))) if (file.type!= &quot;image/jpeg&quot; || file.type!=...

Проверка на число: Одно и то же условие работает в случае numchar, но не работает с xchar и ychar
Помогите ламеру с ламерской программкой. В тестирующей функции запрашиваются три строки numchar, xchar, ychar (число для вывода и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru