1

我正在上 Python 入门课程。我正在参加练习期末考试,但我不知道该怎么回答一个问题。它问:

完成以下方法,将在字符串 s 中找到的奇数放入列表 x 的连续元素中。

def assign(s):
    length = _____
    x = _____*[0]
    index = 0
    for j in range(_____):
        digit = int(s[j])  #convert to int digit
        if _____: #test for odd number
            x[_____] = digit
            __________
    print("The odd numbers are")
    for j in range(index):
        print(x[j])

我不知道这是否是它的措辞方式,但我不知道如何回答这个问题。我最好的猜测是:

def assign(s):
    length = len(s)
    x = length*[0]
    index = 0
    for j in range(s):
        digit = int(s[j])  #convert to int digit
        if _____: #test for odd number
            x[_____] = digit
            __________
    print("The odd numbers are")
    for j in range(index):
        print(x[j])

我不知道如何继续,或者我什至是否正确地开始它。我无法更改已经存在的任何内容,我只能填写空白,而且它们都必须填写。有人知道该怎么做吗?

4

1 回答 1

4

这是解决方案:

def assign(s):
    length = len(s)
    x = length*[0]
    index = 0
    for j in range(length):
        digit = int(s[j])  #convert to int digit
        if digit % 2: #test for odd number
            x[index] = digit
            index += 1

    print("The odd numbers are")
    for j in range(index):
        print(x[j])

你的开头是对的。一个关键点是 variableindex指向下一个应该添加到 list 的奇数x


但是请注意,提供给您的模板很糟糕:它完全违背了 Python 的精神。看起来像 C 代码被迫进入 Python;这不是一个好的做法,因为 Python 提供了比 C 更强大的数据结构。这是一个 Pythonic 版本

def assign(input_string):
    odd_digits = []
    for char in input_string:
        digit = int(char)  # Convert to integer
        if digit % 2:  # If the digit is odd
            odd_digits.append(digit)
    print("The odd digits are", *odd_digits, sep='\n')  # or: ("The odd digits are", odd_digits)

主要区别在于您的变量更少:代码更清晰,阅读代码时必须记住更少的变量。消失的变量本质上是索引:它们通常是不需要的(索引在 C 中很重要,因为 C “接近金属”:它接近于需要索引的机器语言)。因此,不再需要跟踪length输入字符串。

你也有更少的麻烦:在原始版本中,列表x包含许多0本质上无用的(更慢的代码,也更难理解)。本质上,Python 列表 x被迫类似于C 数组:字符串中奇数位的可变数量调用列表(可变大小),而不是数组(固定大小)。

此外,代码更短的事实使得阅读和编写更快!


正如 Jon 所建议的,一个更加 Pythonic 的版本包括使用列表推导:

def assign(input_string):
    odd_digits = [char for char in input_string if int(char) % 2]  # or: if char in '13579'
    print("The odd digits are", *odd_digits, sep='\n')  # or: ("The odd digits are", odd_digits)

这是一个很好的例子,说明为什么 Python 代码的读写速度比 C 代码快得多。

于 2012-12-17T02:58:04.743 回答