翻查字典

问题描述 投票:0回答:1

我试图反转字典,当你输入 3 个字母或单词时,它会输出关联的值,例如,如果我输入 123,我应该得到 s、e、m 的输出。或者如果我输入 kat 我应该得到 711 的输出。它

我有点迷失,因为我才刚刚开始我的旅程。

# Major systems dictionaries
major_system = {
    0: "s, z",
    1: "t",
    2: "n",
    3: "m",
    4: "r",
    5: "l",
    6: "g j",
    7: "k",
    8: "f, th",
    9: "b",
}

major_system_2 = {
    0: "oo",
    1: "a",
    2: "e",
    3: "i",
    4: "o",
    5: "u",
    6: "A",
    7: "E",
    8: "I",
    9: "O",
}

major_system_3 = {
    0: "s, z",
    1: "t",
    2: "n",
    3: "m",
    4: "r",
    5: "l",
    6: "g j",
    7: "k",
    8: "f, th",
    9: "b",
}

# I am going to get user input of three numbers

reversed_major_system_1 = {value.strip(): key for key, values in major_system.items() for value in values.split(", ")}
reversed_major_system_2 = {value: key for key, value in major_system_2.items()}
reversed_major_system_3 = {value.strip(): key for key, values in major_system_3.items() for value in values.split(", ")}



user_input = input("Please enter 3 numbers or letter without spaces ")


if len(user_input) == 3:
    numbers_output = []
    letters_output = []
    valid_input = True

    for item in user_input:

        if item.isdigit():  # Checks if the character is a number
            number = int(item)

            letter1 = major_system.get(number, "Invalid")
            letter2 = major_system_2.get(number, "Invalid")
            letter3 = major_system_3.get(number, "Invalid")
            
            if letter1 != "Invalid" and letter2 != "Invalid" and letter3 != "Invalid":
                numbers_output.append(item)
                letters_output.append(letter1.split(", ")[0])
            else:
                valid_input = False

        elif item.isalpha():
            number1 = reversed_major_system_1.get(item, "Invalid")
            number2 = reversed_major_system_2.get(item, "Invalid")
            number3 = reversed_major_system_3.get(item, "Invalid")
            if number1 != "Invalid":
                numbers_output.append(str(number1))
            elif number2 != "Invalid":
                numbers_output.append(str(number2))
            elif number3 != "Invalid":
                numbers_output.append(str(number3))
           

        else:
            valid_input = False
        letters_output.append(item)

    if valid_input:
        print (f'Input {user_input}')
        if numbers_output:
            print(f'Numbers output: {", ".join(numbers_output)}')
        if len(letters_output) == 3:  # Ensure only three letters are shown
            print(f'Letters output: {", ".join(letters_output)}')
        elif letters_output:
            print("Error: More than three letters found.")
    else:
        print("Error: One or more inputs do not have a valid mapping.")
else:
    print("Error: please enter exactly 3 characters (numbers or letters) without spaces.")

当我输入 klm 时,我得到以下输出

type herePlease enter 3 numbers or letter without spaces klm
Input klm
Numbers output: 7, 5, 3
Letters output: k, l, m

输出123时得到这个

Please enter 3 numbers or letter without spaces 123
Input 123
Numbers output: 1, 2, 3
Error: More than three letters found.
dictionary
1个回答
0
投票

我对其进行了排序,我的问题是我没有对字典进行索引,因此使用了枚举和映射,请参阅我的代码以获取更新版本。原始代码输出了 9 个字母,而不是 3 个。我所做的是使用 enumerate 函数和 map 函数。

    # Major systems dictionaries
major_system = {
    0: "s",
    1: "t",
    2: "n",
    3: "m",
    4: "r",
    5: "l",
    6: "g",
    7: "k",
    8: "f",
    9: "b",
}

major_system_2 = {
    0: "oo",
    1: "a",
    2: "e",
    3: "i",
    4: "o",
    5: "u",
    6: "A",
    7: "E",
    8: "I",
    9: "O",
}

major_system_3 = {
    0: "s",
    1: "t",
    2: "n",
    3: "m",
    4: "r",
    5: "l",
    6: "g",
    7: "k",
    8: "f",
    9: "b",
}

# I am going to reverse the dictionary

reversed_dict1 = {value: key for key, value in major_system.items()}

# Reversed major_system_2 and major_system_3 dictionaries
reversed_dict2 = {value: key for key, value in major_system_2.items()}
reversed_dict3 = {value: key for key, value in major_system_3.items()}

# # Print the reversed dictionaries
# print("Reversed major_system:", reversed_dict1)
# print("Reversed major_system_2:", reversed_dict2)
# print("Reversed major_system_3:", reversed_dict3)

new_input = input("Please enter three letters and numbers or a mixture of them? ")
if len(new_input) != 3:
    print("Error: please enter 3 numbers, letters or a mixture")
else:
    numbers_output = []
    letters_output = []

    for idx, item in enumerate(new_input):
        if item.isdigit():
            number = int(item)
            if idx == 0:
                letters_output.append(major_system.get(number, "Invalid"))
            elif idx == 1:
                letters_output.append(major_system_2.get(number, "Invalid"))
            elif idx == 2:
                letters_output.append(major_system_3.get(number, "Invalid"))
        elif item.isalpha():
            if idx == 0:
                numbers_output.append(reversed_dict1.get(item, "Invalid"))
            elif idx == 1:
                numbers_output.append(reversed_dict2.get(item, "Invalid"))
            elif idx == 2:
                numbers_output.append(reversed_dict3.get(item, "Invalid"))

        else:
            print(f"Error: '{item}' is not a valid character.")
            break

    if letters_output:
        print(f'Letters output: {" ".join(letters_output)}')
    if numbers_output:
        print(f'Numbers output: {", ".join(map(str, numbers_output))}')
© www.soinside.com 2019 - 2024. All rights reserved.