目前我正在从我的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书是疯了吗?有关于元组的东西我在这里完全不见了吗?帮助...
答案 0 :(得分:5)
你不能修改元组,但你可以通过合并两个元组来创建一个新的元组:
>>> tup = ()
>>> tup += (1,)
>>> tup
(1,)
>>> tup += (2,)
>>> tup
(1, 2)
答案 1 :(得分: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()
。不同之处在于我们在开始for循环之前不会消耗所有iter(...)
。
答案 2 :(得分: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()