条件语句产生意外的输出

时间:2019-04-06 08:11:00

标签: python loops conditional

我目前正在尝试使用python中的列表,并试图创建一个程序来模拟名称游戏(click here for reference)

程序要求用户输入并生成一个列表,其中包含用户名的每个字母。然后,它必须生成3个新名称,每个名称都以"b", "f", "m"开头。

罗伯特将成为:

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

但是,在名称以相同字母开头的情况下,只需删除第一个字母,这样Billy就可以成为

[['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 :(得分:0)

我在您的条件声明中做了一个小更正。在您的原始程序中,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']]