3

現在、私は Python 2 の本の一連の演習に取り組んでおり、問題の 1 つに行き詰まっています。問題は次のとおりです。

「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

タプルを変更することはできませんが、2 つのタプルをマージして新しいタプルを作成できます。

>>> tup = ()
>>> tup += (1,)
>>> tup
(1,)
>>> tup += (2,)
>>> tup
(1, 2)
于 2013-10-14T20:05:18.497 に答える
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()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 に答える