0

我知道这个网站之前已经问过这个问题,但我无法理解给出的答案(我还是很新),所以我要再试一次。我的任务是编写代码,该代码采用 10 位电话号码 (XXX-XXX-XXXX) 并将任何字母(即 800-FLO-WERS)转换为数字。我已经为此绞尽脑汁,并且真的可以使用一些帮助/解释。在我正在上课的课程中(使用出色的“从 Python 开始,第 4 版,Tony Gaddis),我不能使用我们尚未涵盖的概念(如字典),但我可以使用列表/元组。我的代码我想出了以下几点:

def main():
    try:
        user_number = str(input('Enter a phone number (XXX-XXX-XXXX): ')).upper()
        converted_number = check_number(user_number)
        print('The phone number is:',converted_number
    except Exception as err:
        print(err)
def check_number(user_number):
    try:
        for char in user_number:
            if char.isalpha():
                result = convert_to_num(char)
                return result
            else:
                return char
        return converted_number
    except Exception as err:
        print(err)
def convert_to_num(char):
    if char in ['A','B','C']:
        char = 2
    elif char in ['D','E','F']:
        char = 3
    elif char in ['G','H','I']:
        char = 4
    elif char in ['J','K','L']:
        char = 5
    elif char in ['M','N','O']:
        char = 6
    elif char in ['P','Q','R','S']:
        char = 7
    elif char in ['T','U','V']:
        char = 8
    elif char in ['W','X','Y','Z']:
        char = 9
    return char
main()

显然,我不确定如何存储转换后的字母到数字(考虑通过索引来完成,但也不能完全做到这一点)。我不是在寻找任何人为我做我的工作,但我做错了什么的详细解释会很可爱。

4

2 回答 2

0

的目的return是返回调用它的函数。这里因为return在循环内。它将在第一次迭代中退出该函数。

for char in user_number:
     if char.isalpha():
           result = convert_to_num(char)
           return result
     else:
           return char
     return converted_number

只需使用列表来存储转换后的值,然后使用该join()方法在循环后返回它们。

def main():
    try:
        user_number = str(input('Enter a phone number (XXX-XXX-XXXX): ')).upper()
        converted_number = check_number(user_number)
        print('The phone number is:',converted_number)
    except Exception as err:
        print(err)

def check_number(user_number):
    try:
        r = []
        for char in user_number:
            if char.isalpha():
                result = convert_to_num(char)
                r.append(str(result))
            else:
                r.append(char)
        return "".join(r)
    except Exception as err:
        print(err)

def convert_to_num(char):
    if char in ['A','B','C']:
        char = 2
    elif char in ['D','E','F']:
        char = 3
    elif char in ['G','H','I']:
        char = 4
    elif char in ['J','K','L']:
        char = 5
    elif char in ['M','N','O']:
        char = 6
    elif char in ['P','Q','R','S']:
        char = 7
    elif char in ['T','U','V']:
        char = 8
    elif char in ['W','X','Y','Z']:
        char = 9
    return char
main()

如果你不能使用join()

def check_number(user_number):
    try:
        r = ''
        for char in user_number:
            if char.isalpha():
                result = convert_to_num(char)
                r += str(result)
            else:
                r += char
        return r
    except Exception as err:
        print(err)
于 2018-11-11T18:10:46.883 回答
0

这段代码:

if char.isalpha():
    result = convert_to_num(char)
    return result
else:
    return char

立即返回一个数字作为结果。您想要返回所有数字的字符串,而不仅仅是第一个数字,因此您需要存储输出数字并最终将所有数字(在 for 循环完成后)作为单个字符串返回。

在 for 循环的每次迭代之后初始化一个空列表output = []并将输出数字附加到它,然后返回连接的列表(使用"".join())是实现此目的的好方法。

如果不允许使用"".join(),也可以只构建一个字符串(output = ""output += char)并直接返回,但这会慢一些。

于 2018-11-11T18:16:21.163 回答