3

目前,我正在研究我的 Python 2 书中的一组练习,并被困在其中一个问题上。以下是问题:

“5.1 - 编写一个程序,从用户那里读取数字列表;当用户输入 0 时,列表终止。在所有输入之后,程序应该打印列表。”

我对 5.1 的回答如下:

def main():
    L = []
    done = False
    while not done:
        num = input( "Enter a number: " )
        if num == 0:
            for i in L:
            print i
            done = True
        else:
            L.append(num)

main()

问题在于练习 5.2,它要求:

“5.2 - 更改程序(5.1)以使用元组而不是列表。”

这甚至可能吗?我的印象是元组是不可变的,所以它们真的不能用来代替这里的列表。我对吗?我疯了吗?我的 Python 书疯了吗?我在这里完全错过了关于元组的东西吗?帮助...

4

3 回答 3

5

你不能修改一个元组,但是你可以通过合并两个元组来创建一个新的元组:

>>> tup = ()
>>> tup += (1,)
>>> tup
(1,)
>>> tup += (2,)
>>> tup
(1, 2)
于 2013-10-14T20:05:18.497 回答
1

可能是练习认为你不应该通过一次添加一个元素来构建元组,事实上,你可以通过一些隐式循环来完成这一切:

def get_some_input():
    return input("Enter a number: ")

def main():
    T = tuple(iter(get_some_input, 0))

    for i in T:
        print i

注意我们没有写

T = tuple(iter(get_some_input(), 0))
#                            ^^

我们希望将get_some_input函数传递给iter,而不是调用它的结果。 iter将为我们重复调用该函数,直到它得到一个0.

我们也可以这样写:

def main():
    T = iter(get_some_input, 0)

    for i in T:
        print i

没有tuple(). 不同之处在于我们不会iter(...)在开始 for 循环之前消耗所有内容。

于 2013-10-14T20:29:33.977 回答
0

您可以简单地将+运算符用于元组。

>>> t = ()
>>> t += (9,)
>>> t
(9,)
>>> t += (3,)
>>> t
(9, 3)

你可以用不同的方式初始化一个元组:

a = () # 0-tuple (empty tuple)
b = (item,) # 1-tuple (note the trailing comma)
c = item, # 1-tuple (note the trailing comma)

这就是我编写函数的方式:

def main():
    l = ()
    num = None
    while num != 0:
        num = input("Enter a number: ")
        if num == 0:
            for i in l:
                print i
        else:
            l += (num,)

main()
于 2013-10-14T20:10:41.807 回答