0

こんにちは、最初にこれは宿題だと言いたいので、ストレートに答えたくありません。問題は:

このタスクは、コンマで区切られた数字を含む文字列からリストを作成する機能を実装します (数字の間に空白がある場合もあります)。たとえば、文字列 "1,2,3, 4.5, 6.7, 8" はリスト [1, 2, 3, 4.5, 6.7, 8] になります。

次の関数を記述します。

is_numeric() - この関数には文字列パラメーターがあり、文字列内のすべての文字が数字、コンマ、スペース、またはドットの場合に True を返します。他の文字がある場合、関数は False を返す必要があります。

string_to_list() - この関数は文字列パラメーターを受け取り、文字列内の数値のリストを返します。最初に is_numeric() 関数を呼び出して、文字列に不正な文字 (文字など) がないことを確認する必要があります。不適切な文字がある場合は、空のリストを返す必要があります。不正な文字がない場合は、文字列内のデータからリストを構築しようとする必要があります。このためには、2 つの連続するコンマの間のすべての部分文字列を調べる必要があります。その部分文字列にドットがない場合は、部分文字列を整数に変換する必要があります。ドットが 1 つだけ (それ以上でもそれ以下でもない) ある場合は、float に変換する必要があります。2 つの連続するコンマの間の部分文字列のいずれかが int または float に変換できない場合 (たとえば、"4.5.8" はドットが多すぎるため)、関数は空のリストを返す必要があります。ヒント:

main() - ユーザーから文字列を取得する main() 関数。次に string_to_list() 関数を呼び出してユーザー文字列からリストを作成し、結果のリストを出力します。次に、続行するかどうかをユーザーに尋ねます。続行する場合は、「y」と入力する必要があります。その場合、関数 (メイン) は前の手順を繰り返す必要があります。ユーザーに入力を求め、それをリストに変換し、続行するかどうかをもう一度ユーザーに尋ねます。ユーザーが続行を希望しない場合は、'n' を入力する必要があります。

私が持っている唯一のコードは、文字列の最初の文字だけをチェックして、それが数字か文字かを確認します。文字、数字、コンマ、ピリオド、またはスペースがあるかどうかを確認する必要があります。私はこのプログラムを読んで本当に迷いました。ユーザーから文字列を取得する必要があることはわかっています。すべての文字列が許容可能な入力 (文字、数字、コンマ、ピリオド、スペース) の 1 つであれば、その文字列をリストにします。私のコードはシェルで読み取られます。

s = input("Enter a set of numbers (integers or floats) separated by comma:")

def is_numeric(s):
    for char in list(s):
        if char.isdigit():
            return True
        if char.isalpha():
            return False
            break


if is_numeric(s) == True:
    print(s)
else:
    print('Error')

================================ 再スタート ================= ===============

コンマで区切られた一連の数値 (整数または浮動小数) を入力してください:1,2,3,4
1,2,3,4

================================ 再スタート ================= ===============

コンマで区切られた一連の数値 (整数または浮動小数) を入力してください:1,2,3,a
1,2,3,a

================================ 再スタート ================= ===============

コンマで区切られた一連の数値 (整数または浮動小数) を入力してください:a,1,2,3
エラー

================================ 再スタート ================= ===============

一連の数値 (整数または浮動小数点数) をコンマで区切って入力してください:1234a
1234a

================================ 再スタート ================= ===============

コンマで区切られた一連の数値 (整数または浮動小数) を入力してください:asdf3
エラー

前もって感謝します!

4

2 に答える 2

1

まず、ループをTrue最後まで返さないでFalse、テストが false の場合にループを返してブレークする必要があります。ループは最初の繰り返しで戻るTrueか、False右になるため、ループ内に 2 つの return ステートメントは必要ありません。次に、文字のリストまたは文字列を作成し、それを使用して各文字がそのリスト内にあるかどうかを確認できます。",. "この場合、またはのようなものになります[",", ".", " "]

次のように書く必要があります。

def is_numeric(s):

    for char in s:
        if not char.isdigit() and char not in [" ", ".", ","]:
            return False

    return True

ここで、文字が数字でない場合、または文字がリストにない[" ", ".", ","]場合、関数は を返しFalse、自動的にループを終了します。値を返さずにループが完了すると、すべての文字が基準を満たし、関数は次の行に進み、 を返しますTrue

編集:

プレースホルダー変数を使用する場合は、それを設定し、条件が満たされない場合Trueに設定するループを記述します。Falseループがそれを変更しない場合、条件は文字列全体に対して true であるため、残りTrueます。

def is_numeric(s):
    is_digit = True

    for char in s:
        if not char.isdigit() and char not in [" ", ".", ","]:
            is_digit = False
            break

    return is_digit
于 2013-10-16T01:54:22.640 に答える