Python の面接の質問 [質問 + 回答]

最近、Python の面接の質問に遭遇しました。質問は比較的単純で、時間は 1 時間以内に制御されます。以下はインタビューでの質問と回答ですが、最適解を示すものではなく、その時に思いついたアイデアをいくつかご紹介します。

目次

1. 次のような印刷結果が表示されます。

2. 辞書内のキーを削除する方法と 2 つの辞書を結合する方法

3. 次の正規表現のうち、www.tencent-inc.com に一致するものはどれですか。

4. いくつかのファイルがあります。パスは次のとおりです。

 module_x.pyはmodule_y.pyのメソッドを参照したいのですが、どう書くか

 module_z.pyはmodule_y.pyのメソッドを参照したいのですが、どう書くか

5. 次のプログラムがエラーを報告するかどうかを示してください

6. リスト内の重複要素を削除する Python コードを作成します。

7. 小さい値から大きい値までの一連の数値 0、1、2...、n が与えられた場合、欠落している数値を見つけます。

8. 「()」および「{}」括弧が含まれる可能性のある文字列を指定して、文字列の括弧がペアで出現するかどうかを確認するプログラムを作成してください。

9. [シングルトン] クラス MoreFun を実装するコードを作成してください。このクラスの __init__ 関数は 1 回だけ呼び出すことができる必要があります。

10. get_time_in_range メソッドを実装するコードを作成します。

 11. 整数の配列 nums とターゲット値 target を指定すると、配列内の合計がターゲット値となる 2 つの証明書を見つけて、それらの配列の添字を返します。各入力に対して答えが 1 つだけあると想定できます。ただし、配列の同じ要素を 2 回使用することはできません。編集


1. 次のような印刷結果が表示されます。

答え:

12.0 

6.0

この質問は非常に単純で、2 つの関数が定義されており、x をパラメーターとして使用して 2 つの関数を呼び出し、結果を出力します。

どちらの関数も受信リストが空かどうかを判断し、funcA 関数は float() メソッドを使用してリスト内の各要素を浮動小数点数に変換し、リスト内の最大値を返します。したがって、12.0が出力されます。

funcB は、リスト内の各要素を float を使用して浮動小数点数に変換し、返すときに、最初に sum() メソッドでリストを合計し、次にリストの長さで割ります。したがって、出力は 6.0 になります。

2. 辞書内のキーを削除する方法と 2 つの辞書を結合する方法

答え:

       キーの削除: 1. del キーワードを使用して、指定したキーを辞書から削除できます。

       たとえば、dictA からキー「a」を削除するには、del dictA['a'] を使用できます。

2. Pop() メソッドを使用して、指定したキーを削除できます。このメソッドは、キーに対応する値を返すことができます。キーが存在しない場合は、pop() メソッドの 2 番目のパラメータとしてデフォルト値を指定できます。 。

如,結果 = dictA.pop('a',None)

      

       辞書の結合: 1. update() メソッドを使用して辞書を結合できます。

       たとえば、dictA.update(dictB). 現時点では、dictA は dictB とマージされています。

2. dict() コンストラクターを使用する

如,dictA(dictA,**dictB)

3. 次の正規表現のうち、www.tencent-inc.com に一致するものはどれですか。

     ^\w+\.\w+\-\w+\.\w+$

     [w]{0,3}.[az\-]*.[az]+

     [CW.]{3,10}[.][CW.][.][a]

     [w][w][w][テンセント株式会社]+[com]+

     ^\w.*com$

     [w]{3}.[az\-]{11}.[az]{3}

一つずつ分析してみましょう:

  1. ^\w+\.\w+\-\w+\.\w+$

    • word1.word2-word3.word4形式の文字列と一致します。各文字列はword1 つ以上\w(文字、数字、またはアンダースコア) で構成されます。
    • 「www.tencent-inc.com」と一致しません。
  2. [w]{0,3}.[a-z\-]*.[a-z]+

    • 任意の長さw(小文字の「w」) とそれに続く任意の文字、小文字の文字列、その後にハイフン (「-」)、その後に続く小文字の文字列と一致します。
    • 「www.tencent-inc.com」と一致しません。
  3. [c-w.]{3,10}[.][c-w.][.][a]

    • cから の範囲の文字w、ピリオド (「.」)、から の範囲の文字cwピリオド (「.」)、文字 の順に一致しますa
    • 「www.tencent-inc.com」と一致しません。
  4. [w][w][w][tencent-inc]+[com]+

    • 3 つの連続する小文字w、1 つ以上の連続する「tencent-inc」、1 つ以上の連続する「com」で構成される文字列と一致しますが、「.」とは一致しません。
    • 「www.tencent-inc.com」と一致しません。
  5. ^\w.*com$

    • 文字、数字、またはアンダースコアで始まり「com」で終わる文字列と一致します。^文字列の始まりと$終わりを示します。
    • 「www.tencent-inc.com」と一致します。
  6. [w]{3}.[a-z\-]{11}.[a-z]{3}

    • 連続する 3 つの小文字w、小文字とハイフン (「-」) の 11 文字の文字列、その後に続く小文字の 3 文字の文字列に一致します。
    • 「www.tencent-inc.com」と一致しません。

したがって、「www.tencent-inc.com」に一致する正規表現は次のとおりです。

  • [w][w][w][tencent-inc]+[com]+
  • ^\w.*com$

4. いくつかのファイルがあります。パスは次のとおりです。

  •  module_x.pyはmodule_y.pyのメソッドを参照したいのですが、どう書くか

 回答:モジュール_yをインポートします

  •  module_z.pyはmodule_y.pyのメソッドを参照したいのですが、どう書くか

回答: 相対インポート: パッケージ内に空の __init__.py ファイルを作成します。

from..subpackage1 import module_y を使用して module_y のメソッドをインポートできます。

絶対パスインポート: from my_package.subpackage1 import y

5. 次のプログラムがエラーを報告するかどうかを示してください

url='http://www.qq.com'

def func():

    印刷(URL)

    URL = url.split(".")[1]

    印刷(URL)

__name__=='__main__' の場合:

    関数()

 回答: プログラムはエラーを報告します。url はグローバル変数であるため、func() 関数内のグローバル スコープ内の変数を変更しようとするとエラーが発生します。関数内で global キーワードを使用して、url がグローバル変数であることを宣言し、次のようなエラー報告を回避します。

url='http://www.qq.com'

def func():

    global url

    print(url)

    url = url.split(".")[1]

    print(url)

if __name__=='__main__':

    func()

6.リスト内の重複要素を削除するPythonコードを作成します。

回答: Python の組み込み関数 set() を使用して実装できます。set() はコレクションであり、コレクション内で重複する要素は許可されません。好き:

def func(リスト):

       リストを返す(セット(リスト))

7. 小さい値から大きい値までの一連の数値 0、1、2...、n が与えられた場合、欠落している数値を見つけます。

たとえば、nums = [0, 0, 1, 3, 4] と指定すると、2 が返されます。

回答: 最初に最大の数値を取得し、次に小さい数値から大きい数値までシーケンスを生成し、2 つを比較して欠落している数値を取得します。
def func(nums):
    num_range = list(range(nums[-1])) # 小さいものから大きいものまでシーケンスを生成します
    return set(num_range)-set(nums)

8. 「()」および「{}」括弧が含まれる可能性のある文字列を指定して、文字列の括弧がペアで出現するかどうかを確認するプログラムを作成してください。

出力:

true: かっこがペアで表示され、正しくネストされているか、文字列にかっこがないことを示します。

false: 括弧文字が正しく使用されていません。

答え: count は文字列内の文字の出現数をカウントできます。

def func(str):
    if (str.count('(') != str.count(')')) または (str.count('{') != str.count('}')):
        returnそれ以外の場合はFalse
    :
        True を返します

9. [シングルトン] クラス MoreFun を実装するコードを作成してください。このクラスの __init__ 関数は 1 回だけ呼び出すことができる必要があります。

答え:

class MoreFun:

    _instance = None  # 类变量,用于保存类的唯一实例

    def __new__(cls, *args, **kwargs):

        if cls._instance is None:

            cls._instance = super().__new__(cls)

        return cls._instance

    def __init__(self):

        if not hasattr(self, '_initialized'):

            self._initialized = True

            # 在这里进行初始化操作,确保__init__函数只被调用一次

10. get_time_in_range メソッドを実装するコードを作成します。

入力: 文字列形式の時刻開始/終了ノード

出力: 2 つの時間ノード間のすべての整数時間ノード (左が閉じ、右が開いた状態)

>>get_time_in_range( “2018/11/12 21:01:01”, “2018/11/13 01:01:01”)

>>[「2018/11/12/21/」、「2018/11/12/22/」、「2018/11/12/23/」、「2018/11/13/00/」、「2018/ 11/13/01/”]

答え:

def get_time_in_range(start_time, end_time):

    time_format = "%Y/%m/%d %H:%M:%S"

    start_datetime = datetime.strptime(start_time, time_format)

    end_datetime = datetime.strptime(end_time, time_format)



    time_in_range = []

    current_datetime = start_datetime

    while current_datetime < end_datetime:

        time_in_range.append(current_datetime.strftime("%Y/%m/%d/%H/"))

        current_datetime += timedelta(hours=1)



    return time_in_range

 11. 整数の配列 nums とターゲット値 target を指定すると、配列内の合計がターゲット値となる 2 つの証明書を見つけて、それらの配列の添字を返します。各入力に対して答えが 1 つだけあると想定できます。ただし、配列の同じ要素を 2 回使用することはできません。

答え:

def func(nums , target):
    n = [] #定义已使用过的元素容器
    for i in range(len(nums)):
        #如果该元素使用过则跳过此次循环
        if nums[i] in n:
            continue
        for j in range(len(nums)):
            if nums[i]+nums[j] == target:
                print(nums[i],nums[j])
                n.append(nums[i])
                n.append(nums[j])
#验证
nums = [2,4,6,8,10,12]
target = 12
func(nums,target)

面接の質問に対処するとき、私たちはまずこの質問のテストポイントが何かを推測し、面接官が望んでいる答えに答えることができます。

以上が今日の面接の質問です、学生の皆さんが一日も早く自分に合った仕事を見つけて、成功することを祈っています~

このブログの反響が良ければ、子供靴の疑問に答えるPythonインタビューコラムの掲載も検討しますので、一緒に前進していきましょう!

おすすめ

転載: blog.csdn.net/m0_62814033/article/details/132047256