我试图反转字典,当你输入 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.
我对其进行了排序,我的问题是我没有对字典进行索引,因此使用了枚举和映射,请参阅我的代码以获取更新版本。原始代码输出了 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))}')