Я не могу прервать цикл while с помощью пользовательского ввода

Я учусь использовать функции в циклах while. Моя цель — запросить у пользователя ввод данных внутри цикла while и использовать ввод в качестве аргумента в функции. Но если в любой момент ввод == 'q', цикл должен быть завершен.

Функция следующая:

def make_album(artist_name, album_name, tracks = None):
    if tracks:
        album = {
            'artist': artist_name,
            'album': album_name,
            'number of tracks': tracks
        }
        return album
    else:
        album = {
            'artist': artist_name,
            'album': album_name,
            
        }
        return album

Он помещается внутри цикла while:

create_album = True
while create_album:
    
    artist = input("Enter atrist's name: ").title()
    if artist == 'q'.lower():
        create_album = False
        
    album = input("Enter album's name: ").capitalize()
    if album == 'q'.lower():
        create_album = False
        
    number_of_tracks = input("(Optional) Enter number of tracks: ")
    if number_of_tracks =='q'.lower():
        create_album = False
    elif number_of_tracks:
        print(make_album(artist, album, number_of_tracks))
    else:
        print(make_album(artist, album))

Несмотря на то, что каждый ввод проверяется с помощью оператора if и должен изменить значение create_album на False, если ввод имеет значение «q», он работает правильно только в последней части кода:

number_of_tracks = input("(Optional) Enter number of tracks: ")
    if number_of_tracks =='q'.lower():
        create_album = False

Как исправить программу, чтобы она завершала цикл while в любой момент, если пользователь вводит «q»?

Я пытался изменить различные способы решения проблемы.

1)

    if artist == 'q'.lower():
        break

Результат: Enter album's name:

2)

    if artist == 'q'.title():
        create_album = False
    if artist == 'q':
        create_album = False
    if artist == 'Q':
        create_album = False

Результат:

Enter album's name:

Кстати, вместо того, чтобы требовать ручной ввод для каждого компакт-диска в вашей коллекции, вы можете изучить gnudb.org (у меня нет недавнего опыта, но раньше мне нравился FreeDB) или более современный MusicBrainz.

tripleee 22.06.2024 09:06

Вы вводите пользовательский ввод в заголовке или заглавными буквами, а затем сверяете его со значением в нижнем регистре…

deceze 22.06.2024 09:15
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
2
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как только вы определите, что пользователь ввел «q», вы устанавливаете create_album на False, но затем переходите к следующему вводу.

Вы можете добавить break или, в данном случае, даже continue к телу if тестов для 'q'. Кроме того, artist == 'q'.lower() не имеет смысла, поскольку 'q' уже в нижнем регистре. Вместо этого вы хотите artist.lower() == 'q':

    if artist.lower() == 'q':
        create_album = False
        break

Но для этого кода вообще нет смысла использовать create_album. Вместо этого вы можете заменить все это на:

while True:   
    artist = input("Enter atrist's name: ").title()
    if artist.lower() == 'q':
        break
        
    album = input("Enter album's name: ").capitalize()
    if album.lower() == 'q':
        break
        
    number_of_tracks = input("(Optional) Enter number of tracks: ")
    if number_of_tracks.lolwer()=='q':
        break
    elif number_of_tracks:
        print(make_album(artist, album, number_of_tracks))
    else:
        print(make_album(artist, album))

Другие вопросы по теме