15

そうですね、宿題をしていて、次のことをするように言われました。

名前 (文字列)、年齢 (整数)、学生番号 (文字列)、および CSCA08 に登録されているかどうか (ブール値) の 4 つのパラメーターを取り、その情報を含む文字列を返す、学生データと呼ばれる関数を作成します。 [学籍番号、名前、年齢、在籍] の形式で入力します。

コードは次のように動作するはずです。

>>> student_data("Brian",32,"1234567",False)
`[1234567,Brian,32,False]'
>>> student_data("Nick",97,"0000001",True)
`[0000001,Nick,97,True]'

私が思いついたのはこれでした:

def student_data(name, age, student_number):
    return  '[' + student_number + ',' + name + ',' + str(age) + ']'

そしてそれをPythonに入力するとき:

student_data("Jeremy", 19, "999923329")
'[999923329,Jeremy,19]'

(ブール値に関する最後の部分を省略したことに注意してください。これについてはすぐに説明します。)

私が理解していることから、「ジェレミー」と「999923329」は両方とも、2 行目の文字列の一部としてその後返された文字列です。「年齢」については、関数 student_data を呼び出したときに引用符がなかったので、Python によって int として解釈されました。次に、その int 値を文字列に変換したので、'[999923329,Jeremy,19]' になります。

技術的には、私が求めているのは次のとおりだと思います:パラメーター「年齢」は、戻り関数がそれを str 型に変更するまで、Python によって int と見なされますか? 割り当てには、4 つのパラメーター、2 つの文字列 (私が持っている)、1 つの int (実際に int として解釈されるかどうかはわかりません)、およびブール値が必要であることに注意してください。これにより、次のようになります。

ブール値がどのように機能するのか本当にわかりません。具体的には、割り当てのコンテキストで、正確に何をすることになっていますか? 例は何でしょうか?私は自分のコードを少しいじって、これを思いつきました:

def student_data(name, age, student_number, boolean):
    return  '[' + student_number + ',' + name + ',' + str(age) + "," + str(boolean) + ']'

そしてPythonで入力します:

student_data("Jeremy", 19, "999923329", True)
'[999923329,Jeremy,19,True]'

それは実際に課題が私に求めていたことに正確に従いますが、何が起こっているのかよくわからないので好きではありません. 同様に、「boolean」は関数 student_data が機能するために必要なパラメータです。しかし、パラメータとは正確には何ですか? 変数と同じですか?Python シェルで「True」と入力すると、正確に何が起こっていますか?

変数に値を代入するときと同じことが起こっていますか? その場合、変数に値を割り当てるとどうなりますか? 割り当てはパラメーターがブール値であることを要求していますが、コードにブール値を入力したとは思えませんね。

はい、まだ明らかでない場合は、コンピューター サイエンスのクラスを受講したことがありません。

4

4 に答える 4

8

Python には、オブジェクト名前があります。オブジェクトには型があり、名前はオブジェクトへの単なるポインターです。オブジェクトに名前がない場合、それにアクセスすることはできません (実際、オブジェクトを指す名前がない場合、Python はそれを完全に取り除きます)。

他の言語では、名前は通常変数と呼ばれ、特定の型で宣言されます。変数がボックスであるという本を読んだことがありますが、ボックスは特定の種類のもの、つまり値しか取ることができません。

Python の動作は少し異なります。 変数と同等の名前には型がありません。それらは任意のオブジェクト、より具体的には任意のタイプの任意のオブジェクトを指すことができます。

技術的には、私が求めているのは次のとおりだと思います:パラメーター「年齢」は、戻り関数がそれを str 型に変更するまで、Python によって int と見なされますか? 割り当てには、4 つのパラメーター、2 つの文字列 (私が持っている)、1 つの int (実際に int として解釈されるかどうかはわかりません)、およびブール値が必要であることに注意してください。

Python は型について厳密ではないため、あなたは通常、オブジェクトについて話します。したがって17、パラメーターを関数に渡すときは、整数型のオブジェクトを渡しています。 17

ただし、ageは単なる名前であり、名前は任意の型を指すことができます。関数には任意のオブジェクトを渡すことができる (つまり、age任意の有効な Python オブジェクトを指定できる) ため、パラメーター 'age' が int と見なされると言うのは正しくありません。関数に渡されるあらゆる種類のオブジェクトの単なるプレースホルダーです。

関数の本体では、他のオブジェクトを組み合わせて文字列オブジェクトを作成しています。

文字列オブジェクトは、別のオブジェクト (その他のオブジェクト) と結合するように要求されたときに何をすべきかを知っています。それはあなたが何を試してそれと組み合わせるかわからないので; いくつかの賢明なデフォルトがあり、ものを文字列に変換しようとします。

この組み合わせができない場合は、エラーが発生します。

>>> 'a' + 2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects

そのシナリオでやりたいことは、オブジェクト 2を文字列に変換することです。整数、または実際には - 任意のオブジェクトに対してこれを行うには、str()メソッドを使用します (正しく行ったように)。

オブジェクトを文字列に変換するとどうなるか、まったく新しいオブジェクトが作成されます。これは元のオブジェクトへのリンクがなく、その文字列表現です。これはまったく新しいオブジェクトです。まったく別物。

ブール値がどのように機能するのか本当にわかりません。具体的には、割り当てのコンテキストで、私は正確に何をすることになっていますか?

良いことは、1 つのオブジェクトがどのように機能するかがわかれば、すべてのオブジェクトが一般的に同じように動作することです。Python では、1 つのオブジェクトの文字列バージョンを取得する方法を ( を実行してstr()) 知っている場合、他のすべてのオブジェクトに対して同じ手法を使用します。それ自体を「変換」する方法を理解するのは、オブジェクト次第です。

つまりstr()、オブジェクトを取得して文字列表現に変換することがわかっているためです。Python の他のすべてのオブジェクトで動作するので安心できます。

Python では型は厳密ではないため、プログラマーはオブジェクトに依存して何を行う必要があるかを知ることができる柔軟性が得られます。

そのためstr()、ブール値、int、float、およびその他すべてのオブジェクトで機能します。学習の後半で、クラス (カスタム オブジェクトを作成する方法) について学習し始めると、誰かがオブジェクトに対して何かを行ったときにオブジェクトに何が起こるかを制御する方法を学習しますstr()

于 2013-09-22T12:57:55.917 に答える
6

Python の変数は、オブジェクトのラベルです。このコードは、メモリ内のオブジェクトに 7 を表すx = 7ラベルを付けます。これは、すべての変数がポインターであるようなものです。これは、数字 7 の代わりにxラベルを使用できることを意味します。x

>>> y = x + 8
>>> print(y)
15
>>> x = "hello world!"
>>> print(x)
hello world!

関数は数学の関数に似ており、いくつかの入力を受け取り、出力を返します。

例:

def f(x, y, z):
    return x + y * z

この例ではxyzがパラメーターです。次に、関数を次のように呼び出すことができます。

>>> print(f(1, 2, 3))
6

この例では、1、2、および 3 が引数です。

パラメーターは、関数定義内の変数です。

def f(x):
    print(x)
    return x + 7

>>> variable = f(5)
5
>>> print(variable)
12
>>> print(x)
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    print(x)
NameError: name 'x' is not defined

関数の外では、x定義されていません。これは、特定の場所でのみアクセスできる変数の概念であり、変数スコープと呼ばれます。

あなたの関数では、パラメータageには type の引数が与えられるはずintです。呼び出されると、変数がage指すオブジェクトを文字列に変換して返します。これはそのオブジェクトを変更しません。

関数を呼び出したときに、ブール値を引数としてコードに入力しました。

student_data("Jeremy", 19, "999923329", True)
                                          ^
                                     There is the Boolean!

Python には厳密な型指定システムがありません (ダック タイピングを使用します)。そのため、関数の引数の型を指定する必要はありません (実際には指定できません)。したがって、実際には、文字列、整数、またはパラメーター boolean に定義したクラスのインスタンスを使用して関数を呼び出すことができます。

于 2013-09-22T12:29:26.873 に答える