Выход из цикла while с определенным вводом - PullRequest
1 голос
/ 03 апреля 2019

В настоящее время я пытаюсь принять пользовательский ввод, а затем выйти из него при выполнении условия (в этом случае будет 0).Я получил цикл, работающий, когда для оператора if установлено значение inp == ''.Когда вводится пустая строка, она вспыхивает.Но если я изменю критерии на что-либо, кроме '', скажем 0, код не выйдет из цикла.

while True:
    inp = input("Would you like to add a student name: ")
    if inp == 0:
        break
    student_name = input("Student name: ")
    student_id = input("Studend ID: ")
    add_student(student_name, student_id)

Я попытался привести 0 к типу int, но возникает та же проблема...

РЕДАКТИРОВАТЬ: вышеуказанный код повторяется без прерывания.

FIX: input принимает строку, и я сравнивал ее с int.Мне нужно было привести 0 в качестве строки, чтобы типы соответствовали.

Ответы [ 5 ]

0 голосов
/ 03 апреля 2019

В духе «если вы дадите кому-нибудь рыбу, у нее будет еда в течение дня», есть причина, по которой мы просим предоставить минимальный, полный, проверяемый пример. Вы назвали свой вопрос «вырваться из цикла», но это не совсем так. Оператор break не выполняется, что должно привести к пониманию того, что условие if оценивается как False, поэтому минимальным примером будет «Почему inp == 0 оценивается в False?», а не немалый "Почему весь цикл while не делает то, что я ожидал?" Для решения проблемы может быть достаточно простого анализа проблемы до наименьшего компонента: если вы посмотрели на значение inp == 0 и увидели, что это False, это должно привести к проверке значения inp и посмотреть что это '0', а не 0.

0 голосов
/ 03 апреля 2019
while True:
    inp = input("Would you like to add a student name: ")
    if len(inp) == 0 or inp =="": #checking the if the the length of the input is equal to 0 or is an empty string 
        break
    student_name = input("Student name: ")
    student_id = input("Studend ID: ")
    add_student = (student_name, student_id)

print ("The file list-{}.csv is created!".format("something"))

дай мне знать, если ты этого хочешь.вы не можете использовать int, потому что он будет ожидать целое число, если длина не равна 0, и это потому, что объект типа 'int' не имеет len.

0 голосов
/ 03 апреля 2019

Как вы сказали, input всегда дает вам строку.Два способа

inp = int(input("Would you like to add a student name: "))
if inp == 0:

или

inp = input("Would you like to add a student name: ")
if inp == '0':
0 голосов
/ 03 апреля 2019

Вам нужно inp для хранения целочисленного ввода, но input() по умолчанию сохраняет строку

while True:
    inp = int(input("Would you like to add a student name: "))
    if inp == 0:
        break
    student_name = input("Student name: ")
    student_id = input("Studend ID: ")
    add_student(student_name, student_id)

Хотя, если вы просите их указать что-то, вам, вероятно, следует использовать distutils.util.strtobool(), который принимает различные входные данные, такие как 0 или n или no, чтобы указать нет.

0 голосов
/ 03 апреля 2019

input() возвращает string и никогда не будет == до 0, что является int.
. Вы можете либо разыграть (также известный как Преобразование типов) inp в intили значение для сопоставления (0) с string ('0') перед сравнением, например:

if inp == str(0): # or simply inp == "0"
   ...

приведение inp к int:

if int(inp) == 0:
    ...
...