Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/21: Рейтинг темы: голосов - 21, средняя оценка - 4.76
 Аватар для Семён(NFL)
-2 / 0 / 0
Регистрация: 22.04.2011
Сообщений: 26

Организация бесконечного цикла посредством оператора while

29.12.2015, 08:49. Показов 4155. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток.
Обращаюсь к вам с небольшой просьбой разобраться с проблемой, с которой я столкнулся при изучении могучего языка программирования python.
В общем проблема заключается в бесконечном циклировании при условии, что блок с инструкцией else указан в данном цикле. Интерпритатор не выполняет данную инструкцию. Возможно проблема в неправильном написании кода.
код программы прилагается.
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
30
31
32
33
34
35
36
37
38
39
40
# -*- coding: utf-8 -*-
os = input("Введите число соответствующее вашей теме: ")
while os != int():
    print ("Вы не выбрали тему")
    os = input("Введите число соответствующее вашей теме: ")
else:
 if os == "1":
    print ("""Вы выбрали тему:<Батареи типа ФУЛ>
По окончании работ с документацией, незабудьте сохранить проделанные работы""")
    import generator_pass
    print ("")
    print ("Используйте эти данные для входа\nв систему на сегодняшний день")
 elif os == "2":
    print ("""Вы выбрали тему:<Литий-ионные аккумуляторы>
По окончании работ с документацией, незабудьте сохранить проделанные работы""")
    import generator_pass
    print ("")
    print ("Используйте эти данные для входа\nв систему на сегодняшний день")
 elif os == "3":
    print ("""Вы выбрали тему:<Авиационные аккумуляторы>
По окончании работ с документацией, незабудьте сохранить проделанные работы""")
    import generator_pass
    print ("")
    print ("Используйте эти данные для входа\nв систему на сегодняшний день")
 elif os == "4":
    print ("""Вы выбрали тему:<Литий гель полимерные аккумуляторы>
По окончании работ с документацией, незабудьте сохранить проделанные работы""")
    import generator_pass
    print ("")
    print ("Используйте эти данные для входа\nв систему на сегодняшний день")
 elif os == "5":
    print ("""Вы выбрали тему:<Технологическая документация>
По окончании работ с документацией, незабудьте сохранить проделанные работы""")
    import generator_pass
    print ("")
    print ("Используйте эти данные для входа\nв систему на сегодняшний день")
 elif os == "exit":
    print ("""Вы действительно хотите закончить работу программы?""")
    print ("")
    input ("Введите y/n :")
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.12.2015, 08:49
Ответы с готовыми решениями:

Организация цикла без использования оператора цикла
Вычислить значение функции:F=система из 3-х уравнений...1 ур-ие:2*a*Y, при Y&gt;0..2 ур-ие:0,3*10^1.5*(a*sinY/1+a^2), при Y&lt;=-2..третье...

Организация бесконечного цикла с минимальной загрузкой UI потока
Файл MainActivity.java имеет следующую структуру class MainActivity extends Activity { .... mt = new MyTask(); // создается и...

Правильная организация бесконечного цикла на стороне клиента в WinApi
День добрый, собственно код: void SendReciveDta(HWND hListRD) { char *sendbuf = &quot;1&quot;; iResult = send(s, sendbuf,...

16
174 / 174 / 57
Регистрация: 08.01.2013
Сообщений: 335
29.12.2015, 09:12
В этой строке, вы сравниваете тип int и тип string:
Python
1
if os == "1":
Нужно добавить преобразование строки к числу:
Python
1
 if os == int("1"):
Либо наоборот, число преобразовывать в строку чтобы пользователь смог ввести "exit"
1
 Аватар для Семён(NFL)
-2 / 0 / 0
Регистрация: 22.04.2011
Сообщений: 26
29.12.2015, 09:30  [ТС]
без оператора while программа работает, но мне нужно чтобы программа при вводе некорректных данных снова запрашивала ввод и при той или иной ситуации выводила определённое сообщение! цель программы, идентификация пользователя в определённой среде деятельности. после проверки на подлинность программа выдаёт некоторое количество тем для работ. и пользователь который входит в систему должен выбрать ту или иную тему! при пустом вводе программа также выводит сообщение с ошибкой и просит повторить ввод!
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
29.12.2015, 09:30
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
30
31
32
33
34
35
36
37
38
39
40
41
import generator_pass
 
os = input("Введите число соответствующее вашей теме: ")
while not os.isdigit():
    print("Вы не выбрали тему")
    os = input("Введите число соответствующее вашей теме: ")
else:
    if os == "1":
        print("""Вы выбрали тему:<Батареи типа ФУЛ>
По окончании работ с документацией, незабудьте сохранить проделанные работы""")
        print("")
        print(
            "Используйте эти данные для входа\nв систему на сегодняшний день")
    elif os == "2":
        print("""Вы выбрали тему:<Литий-ионные аккумуляторы>
По окончании работ с документацией, незабудьте сохранить проделанные работы""")
        print("")
        print(
            "Используйте эти данные для входа\nв систему на сегодняшний день")
    elif os == "3":
        print("""Вы выбрали тему:<Авиационные аккумуляторы>
По окончании работ с документацией, незабудьте сохранить проделанные работы""")
        print("")
        print(
            "Используйте эти данные для входа\nв систему на сегодняшний день")
    elif os == "4":
        print("""Вы выбрали тему:<Литий гель полимерные аккумуляторы>
По окончании работ с документацией, незабудьте сохранить проделанные работы""")
        print("")
        print(
            "Используйте эти данные для входа\nв систему на сегодняшний день")
    elif os == "5":
        print("""Вы выбрали тему:<Технологическая документация>
По окончании работ с документацией, незабудьте сохранить проделанные работы""")
        print("")
        print(
            "Используйте эти данные для входа\nв систему на сегодняшний день")
    elif os == "exit":
        print("""Вы действительно хотите закончить работу программы?""")
        print("")
        input("Введите y/n :")
1
 Аватар для Семён(NFL)
-2 / 0 / 0
Регистрация: 22.04.2011
Сообщений: 26
29.12.2015, 09:53  [ТС]
если убрать инструкцию else после while то программа тоже работает нормально но цикл прерывается после второго ввода данных.

Добавлено через 4 минуты
если импортировать генератор пароля один раз в начале программы, то потеряется смысл выполнения программы для каждой темы необходим свой пароль. для каждой темы будет функция регистрации того или иного пользователя в лог файле с определённым паролем.
поэтому необходимо использовать генератор для каждой темы.

Добавлено через 9 минут
я попробовал сделать вот так
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
30
31
32
33
34
35
36
37
38
39
os = input("Введите число соответствующее вашей теме: ")
while not os.isdigit():
    print("Вы не выбрали тему")
    os = input("Введите число соответствующее вашей теме: ")
else:
    if os == "1":
        print("""Вы выбрали тему:<Батареи типа ФУЛ>
По окончании работ с документацией, незабудьте сохранить проделанные работы""")
        import generator_pass
        print("")
        print("Используйте эти данные для входа\nв систему на сегодняшний день")
    elif os == "2":
        print("""Вы выбрали тему:<Литий-ионные аккумуляторы>
По окончании работ с документацией, незабудьте сохранить проделанные работы""")
        import generator_pass
        print("")
        print("Используйте эти данные для входа\nв систему на сегодняшний день")
    elif os == "3":
        print("""Вы выбрали тему:<Авиационные аккумуляторы>
По окончании работ с документацией, незабудьте сохранить проделанные работы""")
        import generator_pass
        print("")
        print("Используйте эти данные для входа\nв систему на сегодняшний день")
    elif os == "4":
        print("""Вы выбрали тему:<Литий гель полимерные аккумуляторы>
По окончании работ с документацией, незабудьте сохранить проделанные работы""")
        import generator_pass
        print("")
        print("Используйте эти данные для входа\nв систему на сегодняшний день")
    elif os == "5":
        print("""Вы выбрали тему:<Технологическая документация>
По окончании работ с документацией, незабудьте сохранить проделанные работы""")
        import generator_pass
        print("")
        print("Используйте эти данные для входа\nв систему на сегодняшний день")
    elif os == "exit":
        print("""Вы действительно хотите закончить работу программы?""")
        print("")
        input("Введите y/n :")
... и теперь всё работает. Спасибо огромное за помощь.

Добавлено через 5 минут
А что делать если при вводе цифры отличной от номера темы оператор прекращает циклировать?
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
29.12.2015, 10:05
Семён(NFL), Все импорты должны осуществляться строго в начале программы, а у тебя быдлокод написан.

Цитата Сообщение от Семён(NFL) Посмотреть сообщение
А что делать если при вводе цифры отличной от номера темы оператор прекращает циклировать?
Ну для начала, не "прекращает циклировать", а цикл прекращает выполнение, а что касается вопроса, то нужно всего лишь проверять введенное число.
0
 Аватар для Семён(NFL)
-2 / 0 / 0
Регистрация: 22.04.2011
Сообщений: 26
29.12.2015, 10:13  [ТС]
Всмысле "...быдлокод..."?! это считать оскорблением?

Добавлено через 6 минут
Вы меня извините пожалуйста, но вот правильность заключается в том, что в данном случае импортируется не библиотека а функция, во вторых я попросил помощи а не критики или осуждения. я благодарен вам за то что подсказали как сделать цикл более правильным. А вот оскорбления в мой адрес я не потерплю. я понимаю что вы знаете больше меня, и исправить это ваша обязанность, но в такой форме не желательно обращаться к людям. если так не охото было помогать, можно было просто проигнорить и всё.
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
29.12.2015, 10:19
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
30
31
32
33
34
35
36
import generator_pass
 
inp = input("Введите число соответствующее вашей теме: ")
while True:
    if (inp.isdigit() or inp == 'exit') and inp in ['1', '2', '3', '4', '5']:
        break
    else:
        print("Ошибка ввода")
        inp = input("Введите число соответствующее вашей теме: ")
 
if inp == "1":
    print("Вы выбрали тему:<Батареи типа ФУЛ>\n"
          "По окончании работ с документацией, незабудьте сохранить "
          "проделанные работы\nИспользуйте эти данные для входа\nв систему "
          "на сегодняшний день")
elif inp == "2":
    print("Вы выбрали тему:<Литий-ионные аккумуляторы>\nПо окончании работ с "
          "документацией, незабудьте сохранить проделанные работы\n"
          "Используйте эти данные для входа\nв систему на сегодняшний день")
elif inp == "3":
    print("Вы выбрали тему:<Авиационные аккумуляторы>\n"
          "По окончании работ с документацией, незабудьте сохранить "
          "проделанные работы\nИспользуйте эти данные для входа\nв "
          "систему на сегодняшний день")
elif inp == "4":
    print("Вы выбрали тему:<Литий гель полимерные аккумуляторы>\n"
          "По окончании работ с документацией, незабудьте сохранить "
          "проделанные работы")
    print("\nИспользуйте эти данные для входа\nв систему на сегодняшний день")
elif inp == "5":
    print("Вы выбрали тему:<Технологическая документация>\n"
          "По окончании работ с документацией, незабудьте сохранить "
          "проделанные работы\nИспользуйте эти данные для входа\nв систему на "
          "сегодняшний день")
elif inp == "exit":
    input("Вы действительно хотите закончить работу программы?\nВведите y/n :")
Цитата Сообщение от Семён(NFL) Посмотреть сообщение
Всмысле "...быдлокод..."?! это считать оскорблением?
В прямом смысле. Можешь считать это чем хочешь, но это указание на то, что ты плохо знаешь язык и пишешь на нем не так как полагается.

Цитата Сообщение от Семён(NFL) Посмотреть сообщение
в данном случае импортируется не библиотека а функция,
Импортируется модуль, содержащий функцию
Цитата Сообщение от Семён(NFL) Посмотреть сообщение
но в такой форме не желательно обращаться к людям
Я на личности не переходил, лично тебя я не оскорблял. Я просто назвал все своими именами, а именно твой код "быдлокодом", потому что именно так называется некачественный код.

P.S я конечно поправил код, под то, что ты хочешь получить, но вообще его надо полностью переписывать.
0
 Аватар для Семён(NFL)
-2 / 0 / 0
Регистрация: 22.04.2011
Сообщений: 26
29.12.2015, 10:21  [ТС]
я только начал изучать этот язык программирования. и это указанно в начале темы. наверное стоит вследующий раз писать "НЕ СУДИТЕ СТРОГО, ТОЛЬКО НАЧАЛ ИЗУЧАТЬ". По книге особо многого не поймёшь поэтому обратился сюда. я не быдло, и обращаюсь к людям по людски. Спасибо за помощь. но походу лучше сам разбираться буду.
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
29.12.2015, 10:31
Цитата Сообщение от Семён(NFL) Посмотреть сообщение
наверное стоит вследующий раз писать "НЕ СУДИТЕ СТРОГО, ТОЛЬКО НАЧАЛ ИЗУЧАТЬ".
Я тебе указал на ошибки не для того, чтобы обидеть, а чтобы ты принял к сведению и не делал их более.

Цитата Сообщение от Семён(NFL) Посмотреть сообщение
я не быдло
А я и не говорил, что ты быдло. Я сказал, что ты написал быдлокод.

Быдлокод это плохо написанный код, который не учитывает возможности и нюансы языка и который решает задачу топорно и не красиво.
0
 Аватар для Семён(NFL)
-2 / 0 / 0
Регистрация: 22.04.2011
Сообщений: 26
29.12.2015, 10:44  [ТС]
хочу про демонстроровать кое что. если не против
1) результат выполнения твоего кода.
2) результат выполнения моего кода.
Миниатюры
Организация бесконечного цикла посредством оператора while   Организация бесконечного цикла посредством оператора while  
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
29.12.2015, 10:50
Семён(NFL), ну это естественно. Ты ведь не выложил код модуля generator_pass, по этому я не могу его подправить, а его надо править.
0
 Аватар для Семён(NFL)
-2 / 0 / 0
Регистрация: 22.04.2011
Сообщений: 26
29.12.2015, 10:54  [ТС]
ну "моего" сильно сказанно, твоего но при вызове модуля функции генератора случайных паролей непосредственно в то или иное время. когда необходимо.

Добавлено через 2 минуты
Генератор случайных паролей
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# -*- coding: utf-8 -*-
import random
def passw_generator(count_char = 10):
    arr = ['1','2','3','4','5','6','7','8','9','0']
    passw = []
    for i in range(count_char):
        passw.append(random.choice(arr))
    return "".join(passw)
def passw1_generator(count_char = 4):
    arr = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q',
           'r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H',
           'I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y',
           'Z','1','2','3','4','5','6','7','8','9','0']
    passw1 = []
    for i in range(count_char):
        passw1.append(random.choice(arr))
    return "".join(passw1)
print("Ваш ID - ", passw_generator())
print("Ваш PASS - ", passw1_generator(6))
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
29.12.2015, 10:55
Семён(NFL), ты путаешь вызов функций и импортирование модуля. Отсюда непонимание того почему нехорошо и нельзя импортировать модули где-то, кроме начала скрипта.
1
 Аватар для Семён(NFL)
-2 / 0 / 0
Регистрация: 22.04.2011
Сообщений: 26
29.12.2015, 10:58  [ТС]
Предупреждаю сразу!!! Этот модуль написан непосредственно по Книге "Python 3 и PyQt" автор - Николай Прохоренок

Добавлено через 2 минуты
Прошу прощения
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
29.12.2015, 12:30
К вапросу про быдлокод:
Цитата Сообщение от alex925 Посмотреть сообщение
Python
1
2
3
4
5
elif inp == "5":
* * print("Вы выбрали тему:<Технологическая документация>\n"
* * * * * "По окончании работ с документацией, незабудьте сохранить "
* * * * * "проделанные работы\nИспользуйте эти данные для входа\nв систему на "
* * * * * "сегодняшний день")
— участок кода повторяется 5!! раз и меняется только название раздела. Куда логичнее создать словарь с названиями тем:
Python
1
2
3
4
5
topics = {'1': "<Батареи типа ФУЛ>", 
          '2': "<Литий-ионные аккумуляторы>",
          '3': "<Авиационные аккумуляторы>", 
          '4': "<Литий гель полимерные аккумуляторы>",
          '5': "<Технологическая документация>"}
Тогда вместо кошмарного if будет только
Python
1
2
3
print("Вы выбрали тему:{}".format(topics[inp]),
      "Закончив работу с документацией, не забудьте сохранить изменения",
      "Данные для входа в систему действительны на сегодняшний день", sep='\n')
Добавлено через 15 минут
Цитата Сообщение от Семён(NFL) Посмотреть сообщение
Генератор случайных паролей
Python
18
19
20
21
22
23
def output():
    print("Ваш ID - ", passw_generator())
    print("Ваш PASS - ", passw1_generator(6))
 
if __name__ == '__main__':
    output()
1
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
29.12.2015, 18:07
Цитата Сообщение от Marinero Посмотреть сообщение
участок кода повторяется 5!!
А я сразу и сказал, что нужно переписывать полностью
Цитата Сообщение от alex925 Посмотреть сообщение
P.S я конечно поправил код, под то, что ты хочешь получить, но вообще его надо полностью переписывать.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.12.2015, 18:07
Помогаю со студенческими работами здесь

Вычисление суммы членов бесконечного ряда с заданной точностью Е с использованием оператора цикла while
Вычислить значение суммы членов бесконечного ряда с заданной точностью Е с использованием оператора цикла while...do. На печать вывести...

Вычислить значение суммы членов бесконечного ряда с заданной точностью E с использованием оператора цикла с предусловием
Помогите пожалуйста. 1 Курс Задание: Вычислить значение суммы членов бесконечного ряда с заданной точностью E с использованием оператора...

С использованием оператора цикла c пред- или постусловием найти сумму элементов бесконечного заданного ряда
Вообще не пойму как написать программу к этому уравнению. Помогите решить эту проблему пожалуйста. С использованием оператора цикла c...

Выполните, пожалуйста, задание, при этом вместо оператора цикла while используйте оператора цикла do_while
Используя оператор цикла while, напишите программу для вычисления ниже следующей суммы. // fkdj.cpp: определяет точку входа...

C++ с использованием оператора цикла с предусловием и оператора цикла с постусловием
Составить схему программы и программу на языке C++ с использованием оператора цикла с предусловием и оператора цикла с постусловием для...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru