我正在尝试编写代码,以允许用户输入字母并返回数字,就像我们的电话键盘一样。我的工作是:
phone_letters = [" ", "", "ABC", "DEF", "GHI", "JKL", "MNO", "PQRS", "TUV", "WXYZ"]
def let_to_num():
letter =input("Enter: ")
key = 0
while key < 10:
if letter.upper() in phone_letters[key]:
return key
else:
return "Not found"
print(let_to_num())
但是它不起作用,正确的答案应该是:
while key < 10:
if letter.upper() in phone_letters[key]:
return key
else:
key += 1
return "Not found"
我的理解是“ IF”输入不在phone_letter中,然后我们跳转到其他并返回“未找到”。可以在phone_letter中找到“ IF”输入,然后返回“ key”并结束。
我不明白为什么else语句中的(返回“未找到”)对于每个输入都会返回“未找到”?而“键+ = 1”的功能是什么
答案 0 :(得分:0)
您遇到的问题是由于将key
的值设置为0。这会影响您的if
语句;
if letter.upper() in phone_letters[key]:
这说明in phone_letters[0]:
是" "
,因此您对字母的检查永远不会返回true
,因为不在" "
中。
下面的代码解决了这些问题,请查看底部的学习链接和代码功能注释,学习愉快!
phone_letters = [" ", "", "ABC", "DEF", "GHI", "JKL", "MNO", "PQRS", "TUV", "WXYZ"]
def let_to_num():
letter =input("Enter: ")
while letter.isalpha(): # Only runs if the input is a alphabetical char
# index of the item in list, if the letter is found within the value
# of the list item. This loops over every element in the list.
number = [idx for idx, value in enumerate(phone_letters) if letter.upper() in value]
return number[0] if number else 'Not Found'
print(let_to_num())
在这里阅读列表理解; List Comprehension in Python
答案 1 :(得分:0)
尝试下面的代码,
def let_to_num():
letter = input("Enter: ")
for i in range(len(phone_letters)):
if letter.upper() in phone_letters[i]:
return i
return 'Not found'
print(let_to_num())
答案 2 :(得分:0)
因此,这里的想法是将while
从key = 0迭代到key = 9(这是phone_letters
列表的索引)。在if块中,检查条件,如果输入的letter
是key
当前迭代的字母之一。
例如,用户输入字母“ P”,则while循环开始-
仅当用户输入您的phone_letters索引的 any 中不存在的字符时,结果才为“未找到”。
希望一切都清楚!