Условный оператор производит непреднамеренный вывод - PullRequest
1 голос
/ 06 апреля 2019

В настоящее время я экспериментирую со списками в python и пытаюсь создать программу, которая будет имитировать игру с именем (нажмите здесь для справки) .

Программа запрашивает ввод пользователя и генерирует список с каждой буквой имени пользователя. Затем он должен сгенерировать 3 новых имени, каждое из которых начинается с "b", "f", "m".

Итак, Роберт стал бы:

[['b', 'o', 'b', 'e', 'r', 't'], ['f', 'o', 'b', 'e', 'r', 't'], 
['m', 'o', 'b', 'e', 'r', 't']]

Однако в тех случаях, когда имя начинается с той же буквы, первая буква просто удаляется, поэтому Билли становится

[['i', 'l', 'l', 'y'], ['f', 'i', 'l', 'l', 'y'], ['m', 'i', 'l', 
'l', 'y']]

Однако, когда я запускаю свой код, вместо этого получается:

[['b', 'i', 'l', 'l', 'y'], ['f', 'i', 'l', 'l', 'y'], ['m', 'i', 
'l', 'l', 'y']]

Кто-нибудь может помочь? Есть ли ошибка в моем условии? Вот мой код:

# Asks for user name
user_name = input("Enter name here: ")
name = list(user_name)

# Create an empty list that will contain a subsets of lists.
master_list = []

# List containing the first letter of each new name
beginning_of_word = ["b", "f", "m"]

# Creates 3 new names and appends them to master_list
for var in beginning_of_word:
    new_list = list(name)
    # if new_list[0] != 'B' or new_list[0] != 'F' or new_list[0] != 'M':
    if 'B' not in new_list or 'F' not in new_list or 'M' not in new_list:
        new_list.pop(0)
        new_list.insert(0, var)
        master_list.append(new_list)
    else:
        new_list.pop(0)
        master_list.append(new_list)

print(master_list)

1 Ответ

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

Я внес небольшую поправку в ваше заявление о состоянии.В вашей исходной программе блок else пропускался.При таком подходе мы сначала проверяем значения, которые необходимо удалить, а затем выполняем замену в блоке else кода.Во-вторых, программа чувствительна к регистру.У вас есть символы в верхнем регистре в условии условия, но в ваших списках они строчные.В подходе ниже они все строчные.Если вы хотите, чтобы он был надежным, вы можете добавить or или преобразовать ввод в нижний регистр перед выполнением любой операции.

user_name = input("Enter name here: ")
name = list(user_name)

# Create an empty list that will contain a subsets of lists.
master_list = []

# List containing the first letter of each new name
beginning_of_word = ["b", "f", "m"]

# Creates 3 new names and appends them to master_list
for var in beginning_of_word:
    new_list = list(name)

    if (("b" in new_list) or ("f" in new_list) or ("m" in new_list)):
        new_list.pop(0)
        #new_list.insert(0,)
        master_list.append(new_list)

    else:
        new_list.pop(0)
        new_list.insert(0,var)
        master_list.append(new_list)

print(master_list)

Выход

Enter name here: john
[['b', 'o', 'h', 'n'], ['f', 'o', 'h', 'n'], ['m', 'o', 'h', 'n']]

Enter name here: billy
[['i', 'l', 'l', 'y'], ['i', 'l', 'l', 'y'], ['i', 'l', 'l', 'y']]
...