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])

あなたは正しい始まりを手に入れました。重要な点は、変数indexがリストに追加する必要がある次の奇数を指していることですx


ただし、提供されたテンプレートはひどいものであることに注意してください。Pythonの精神に完全に反しています。Pythonに強制されたCコードのように見えます。PythonはCよりもはるかに強力なデータ構造を提供するため、これは良い習慣ではありません。Pythonのバージョンは次のとおりです。

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リストは C配列xのように強制されました。文字列内の奇数桁の可変数は、配列(固定サイズ)ではなく、リスト(可変サイズ)を呼び出します。

また、コードが短いという事実は、読み取りと書き込みが速くなります!


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 に答える