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

Цикл while и return

11.08.2015, 22:57. Показов 13161. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть цикл while в функции main(), фокус в том что этот цикл не правильно работает при return:

Python
1
2
3
4
5
6
def main():
    path = input('Директория: ')
    while not os.path.isdir(path): #проверка пути
        print('Такого каталога нет')
        path = input('Директория: ')
        return
А от так правильно, без return, можна ли цикл оставлять без return, если он в принадлежит функции:

Python
1
2
3
4
5
def main():
    path = input('Директория: ')
    while not os.path.isdir(path): #проверка пути
        print('Такого каталога нет')
        path = input('Директория: ')
Весь код:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import os
from os.path import splitext
import fnmatch
 
print ('Производиться поиск ключевого \nслова во всех файлах заданой директории \nкроме расширений *.exe, *.zip, *.xls(x), \n*.dot(x), *.apk, *.dll, *.doc(x), *.ppt(x).')
print ('\n----------------------------------\n')
 
def main():
    path = input('Директория: ')
    while not os.path.isdir(path): #проверка пути
        print('Такого каталога нет')
        path = input('Директория: ')
    
    pattern = input('Искаемое слово: ')
 
    keyword = get_keyword(pattern)
 
    EXCL_EXTS = ('.exe', '.zip', '.xls(x)', '.dot(x)', '.apk', '.dll', '.doc(x)', '.ppt(x')
        
    for dirpath, dirs, files in os.walk(path):
        for file_name in files:
            fn, fext = splitext(file_name)
            if fext not in EXCL_EXTS:
                continue
            inp = open(os.path.join(path, file_name), 'r')
            print(os.path.join(path, file_name))
 
if __name__ == '__main__':
    main()
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.08.2015, 22:57
Ответы с готовыми решениями:

Бесконечный цикл с выходом при условии ,не выходит даже после return
private void start() { testboi(); } private void testboi() { ...

Что это isOk(int s),setAge(int g){if(isOk(g){age=g;return true;}else{.;return false;}}.getName(){return name;}?
package com.company; import java.io.Serializable; public class person implements Serializable { protected String name; ...

Что такое в jquery и java return false и return true
Если я правильно понимаю, то return false отменяет действие по умолчанию, например клик по ссылке, а return true это наоборот приводит в...

6
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
11.08.2015, 23:39
Лучший ответ Сообщение было отмечено Васи как решение

Решение

Цитата Сообщение от Васи Посмотреть сообщение
фокус в том что этот цикл не правильно работает при return:
Работает все правильно, это ты код не правильно написал.
Выполнение доходит до return и происходит выход из функции и соответственно завершения цикла, все логично и правильно.

Вот так все должно быть:
Python
1
2
3
4
5
6
7
def main():
    path = input('Директория: ')
    while not os.path.isdir(path):  # проверка пути
        print('Такого каталога нет')
        path = input('Директория: ')
 
    return path
1
0 / 0 / 0
Регистрация: 11.08.2015
Сообщений: 10
11.08.2015, 23:48
Автор топика не учел что return прерывает выполнение while и функция завершается.
0
 Аватар для akzo
71 / 67 / 6
Регистрация: 08.08.2013
Сообщений: 286
Записей в блоге: 8
12.08.2015, 09:52
admunix, правильно, с отступами намудрил

Добавлено через 2 часа 8 минут
Зачем вечно писать os.smth вы от этого не устаете? вместо import os впишите from os import * и радуйтесь краткости питона.
Потом вы проверяете присутствие директории так:
Python
1
while not os.path.isdir(path):
По мне так выглядит более читабельно:
Python
1
while not path.exists(path):
Принципи одно и тоже, но exists как то легче понять.
Потом я бы пробежался по файлам директории так:
Python
1
2
3
4
folder = listdir(folder_location)
files = [file for file in folder if file.endswith(necessary_format)]
for myfile in files:
    #do something
Добавлено через 3 минуты
Дело в том что читабельный код намного легче и быстрее потом редактировать, да и не стоит забывать что питон это язык ориентированный на скорость разработчика.
1
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
12.08.2015, 11:55
Цитата Сообщение от akzo Посмотреть сообщение
вместо import os впишите from os import *
Нельзя такой импорт использовать! Не надо людей учить плохому, он все правильно делает. А если тебе не хочется писать постоянно полный путь, то используй не звёздочку, а имя функций, которые тебе надо:
Python
1
from os.path import join
0
 Аватар для akzo
71 / 67 / 6
Регистрация: 08.08.2013
Сообщений: 286
Записей в блоге: 8
12.08.2015, 13:53
Цитата Сообщение от alex925 Посмотреть сообщение
Не надо людей учить плохому
Плохому? Максимум, что может быть это конфликт имен, но в данной ситуации об этом говорить глупо.

Добавлено через 2 минуты
Да и помнится импорт со звездочкой даже в codecademy показывался.
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
12.08.2015, 14:03
Цитата Сообщение от akzo Посмотреть сообщение
Да и помнится импорт со звездочкой даже в codecademy показывался.
Он есть и в примерах Лутца, но это ни о чем не говорит.

Цитата Сообщение от akzo Посмотреть сообщение
Максимум, что может быть это конфликт имен
Да, такая возможность есть, но я сейчас совсем не об этом. При таком импорте во 1 очень сильно засоряется текущее пространство имен, во 2 возникает путаница в коде и в большом проекте это будет очень печально. Раз ты вспомнил, о том, что python дружелюбен к разработчику, то вспомни ещё и его главную мантру: "Явное лучше, чем неявное".
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.08.2015, 14:03
Помогаю со студенческими работами здесь

Сокращение кода return console.log/warn/error и return elem.click()
Иногда хочется сократить код if (!element) { console.log('element not found') return } // code... до if (!element)...

Односвязный список - объясните, как работают return 0 и return 1
проверьте, пжлса, по комментариям правильно ли я поняла принцип работы программы. Объясните, как здесь работают return 0 и return 1. и...

В чем разница между return и return false/true
Привет всем. Вот подскажите плиз) return; return false; return true; расскажите пожалуйста об етих операторах.. чем они...

How can to return value (return value; ) of javascript function to ASP ?
How can to return value (return value; ) of javascript function to ASP ?

Как сделать так, что если файл существует return true, если нет - return false
Здравствуйте, я новичок в программировании. Мой вопрос очень прост: как сделать так, что если файл существует return true если нет return...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru