筆記試験-高徳ソフトウェア有限会社python問題と答え

8297 ワード

高徳ソフトウェア有限会社python問題と答え
本住所:http://blog.csdn.net/caroline_wendy/article/details/25230835
by Spike 2014.5.7
本テーマは学術交流のみに供し、その他の目的に使用することを厳禁し、答えは参考に供する.
1.pythonではlist,tuple,dict,setにどのような違いがあり、主にどのようなシーンに適用されますか?
回答:
定義:
List:チェーンテーブル、順序付けされたアイテム、インデックスで検索し、カッコ[]]を使用します.
tuple:メタグループ、メタグループは多様なオブジェクトを集めて、変えることができなくて、インデックスを通じて探して、括弧"()を使います;
dict:辞書、辞書はキー(key)と値(value)のセットで、キー(key)で検索し、順序がなく、括弧「{}」を使用します.
set:集合、無秩序、要素は一度しか現れず、自分で自発的にやり直し、「set([])」を使用する.
適用シーン:
listは、簡単なデータセットで、インデックスを使用することができます. 
tupleは、いくつかのデータを全体として使用し、変更できません.
dict、キー値と値を使用して関連付けられたデータ;
set、データは一度しか現れず、データが現れるかどうかだけに関心を持ち、その位置に関心を持たない.
コード:
mylist = [1, 2, 3, 4, 'Oh']
mytuple = (1, 2, 'Hello', (4, 5))
mydict = {'Wang' : 1, 'Hu' : 2, 'Liu' : 4}
myset = set(['Wang', 'Hu', 'Liu', 4, 'Wang'])

2.静的関数、クラス関数、メンバー関数の違い
回答:
定義:
静的関数(@staticmethod):すなわち静的メソッドであり、主にこのクラスとの論理的関連を処理する.
クラス関数(@classmethod):すなわちクラスメソッドは、インスタンスでメソッドを呼び出すのではなく、クラスからメソッドを呼び出すことに注目し、メソッドの再ロード、パラメータclsへの転送として使用することができる.
メンバー関数:インスタンスのみで呼び出せるインスタンスのメソッド.
詳細:
日付の方法は、インスタンス化(_init_)データ出力を行い、パラメータselfに入力する.
クラスの方法(@classmethod)でデータ変換を行い、パラメータclsに転送することができる.
静的メソッド(@staticmethod)によりデータ検証を行うことができる.
コード:
# -*- coding: utf-8 -*-


#eclipse pydev, python 3.3
#by C.L.Wang


class Date(object):


    day = 0
    month = 0
    year = 0


    def __init__(self, day=0, month=0, year=0):
        self.day = day
        self.month = month
        self.year = year
        
    def display(self):
        return "{0}*{1}*{2}".format(self.day, self.month, self.year)
    
    @classmethod
    def from_string(cls, date_as_string):
        day, month, year = map(int, date_as_string.split('-'))
        date1 = cls(day, month, year)
        return date1
    
    @staticmethod
    def is_date_valid(date_as_string):
        day, month, year = map(int, date_as_string.split('-'))
        return day <= 31 and month <= 12 and year <= 3999
    
date1 = Date('12', '11', '2014')
date2 = Date.from_string('11-13-2014')
print(date1.display())
print(date2.display())
print(date2.is_date_valid('11-13-2014'))
print(Date.is_date_valid('11-13-2014'))


3.a=1,b=2,中間変数を用いずにaとbの値を交換する
回答:
2つの形式:加算または異或
コード:
a = 1
b = 2


a = a + b
b = a - b
a = a - b
print ('a = {0}, b = {1}'.format(a, b))


a = a ^ b
b = a ^ b
a = a ^ b
print ('a = {0}, b = {1}'.format(a, b))

4.関数を書き、文字列を入力し、逆配列の結果を返します.たとえば、string_reverse(‘abcdef’)、戻り:‘fedcba’
(複数の方法で実装し、実装方法を比較してください)
回答:
5つの方法の比較:
1.簡単なステップ長は-1、すなわち文字列の反転である.
2.前後のアルファベットの位置を交換する.
3.再帰的な方式で、毎回1文字を出力する.
4.extendleft()関数を使用する両端キュー.
5.forループを使用して、左から右へ出力する.
コード:
string = 'abcdef'


def string_reverse1(string):
    return string[::-1]


def string_reverse2(string):
    t = list(string)
    l = len(t)
    for i,j in zip(range(l-1, 0, -1), range(l//2)):
        t[i], t[j] = t[j], t[i]
    return "".join(t)


def string_reverse3(string):
    if len(string) <= 1:
        return string
    return string_reverse3(string[1:]) + string[0]


from collections import deque
def string_reverse4(string):
    d = deque()
    d.extendleft(string)
    return ''.join(d)


def string_reverse5(string):
    #return ''.join(string[len(string) - i] for i in range(1, len(string)+1))
    return ''.join(string[i] for i in range(len(string)-1, -1, -1))


print(string_reverse1(string))
print(string_reverse2(string))
print(string_reverse3(string))
print(string_reverse4(string))
print(string_reverse5(string))

5.独自のアルゴリズムで、たとえば次の2つのリストを昇順に結合し、繰り返しの要素を除去してください.
list1 = [2, 3, 8, 4, 9, 5, 6]
list2 = [5, 6, 10, 17, 11, 2]
回答:
チェーンテーブルをマージし、再帰的な高速ソート、再リンクします.
コード:
import random


list1 = [2, 3, 8, 4, 9, 5, 6]
list2 = [5, 6, 10, 17, 11, 2]


def qsort(L):
   if len(L)<2: return L
   pivot_element = random.choice(L)
   small = [i for i in L if i< pivot_element]
   large = [i for i in L if i> pivot_element]
   return qsort(small) + [pivot_element] + qsort(large)


def merge(list1, list2):
    return qsort(list1 + list2)


print(merge(list1, list2))

注意:setメソッド、list(set(list 1+list 2))を使用すると仮定すればよい.
6.印刷結果を書いてください
x = [0, 1]
i = 0
i, x[i] = 1, 2
print(x)
印刷結果:[0,2],pythonは左から右へ連続付与を用いることができる.
g = lambda x, y=2, z : x + y**z
g(1, z=10) = ?
印刷結果:異常、パラメータテーブルの末尾にデフォルトパラメータが十分であり、zはデフォルトパラメータを提供する必要がある.
7.次のコードクリップの問題点を説明します.
from amodule import * # amodule is an exist module

class dummyclass(object):
    def __init__(self):
        self.is_d = True
        pass
    
class childdummyclass(dummyclass):
    def __init__(self, isman):
        self.isman = isman
        
    @classmethod
    def can_speak(self): return True
    
    @property
    def man(self): return self.isman
    
if __name__ == "__main__":
    object = new childdummyclass(True)
    print object.can_speak()
    print object.man()
    print object.is_d

回答:
1.警告:objectはpythonの新しい形式(new style)の基礎クラスであり、再び定義されるべきではない.
2.警告:クラスメソッド(classmethod)はクラスが所有するメソッドであり、入力されたパラメータはselfではなくclsであるべきである.
3.エラー:Pythonはnewkeywordがなく、もしnewを変更する必要があるならば、例えば単例モード、書き換えることができる(override)_new__;
4.エラー:@property、属性を表し、メソッドでない場合はカッコを付ける必要はありません()」とobjectを直接呼び出します.man、いいです.
5.エラー:ベースクラスのメンバーを使用する場合はdummyclass._などのベースクラスを初期化する必要があります.init__(self)、いいです.
6.追加:クラス名はできるだけ大文字で使用する.
コード:
class dummyclass(object):
    def __init__(self):
        self.is_d = True
        pass
    
class childdummyclass(dummyclass):
    def __init__(self, isman):
        dummyclass.__init__(self) #__init__
        self.isman = isman
        
    @classmethod
    def can_speak(cls): return True #cls
    
    @property
    def man(self): return self.isman
    
if __name__ == "__main__":
    o = childdummyclass(True) #new, object
    print o.can_speak()
    print o.man #property
print o.is_d

8.pythonの異常処理メカニズムと自己開発過程の体験を紹介する
回答:
Pythonの異常処理メカニズム:
try:異常を投げ出そうとする;
raise:異常を引き起こす;
Except:異常の処理;
finally:異常が発生するかどうかは、やるべきことです.
新しい例外タイプを作成するには、Exceptionクラスを継承する必要があり、クラスの属性を定義することができ、例外の処理が容易である.
開発体験:
異常は主に読取ファイルを処理し、withの方法でファイルを読み取ることもできる.ネットワーク接続にも用いることができ、異常は大量のエラー情報を含む、エラー処理を行うことができる.
コード:
class ShortInputException(Exception):
    def __init__(self, length, atleast):
        Exception.__init__(self)
        self.length = length
        self.atleast = atleast
        
while True:
    try:
        text = raw_input('Enter somthing-->')
        if len(text) < 3:
            raise ShortInputException(len(text), 3)
    except EOFError:
        print('Why did you do an EOF on me')
    except ShortInputException as ex:
        print('ShortInputException The input was {0} long, \
excepted at least {1}. '.format(ex.length, ex.atleast))
    else:
        print('No exception was raised. ')
    finally:
        print('Over')

笔试 - 高德软件有限公司python问题 和 答案_第1张图片