筆記試験-高徳ソフトウェア有限会社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、データは一度しか現れず、データが現れるかどうかだけに関心を持ち、その位置に関心を持たない.
コード:
2.静的関数、クラス関数、メンバー関数の違い
回答:
定義:
静的関数(@staticmethod):すなわち静的メソッドであり、主にこのクラスとの論理的関連を処理する.
クラス関数(@classmethod):すなわちクラスメソッドは、インスタンスでメソッドを呼び出すのではなく、クラスからメソッドを呼び出すことに注目し、メソッドの再ロード、パラメータclsへの転送として使用することができる.
メンバー関数:インスタンスのみで呼び出せるインスタンスのメソッド.
詳細:
日付の方法は、インスタンス化(_init_)データ出力を行い、パラメータselfに入力する.
クラスの方法(@classmethod)でデータ変換を行い、パラメータclsに転送することができる.
静的メソッド(@staticmethod)によりデータ検証を行うことができる.
コード:
3.a=1,b=2,中間変数を用いずにaとbの値を交換する
回答:
2つの形式:加算または異或
コード:
4.関数を書き、文字列を入力し、逆配列の結果を返します.たとえば、string_reverse(‘abcdef’)、戻り:‘fedcba’
(複数の方法で実装し、実装方法を比較してください)
回答:
5つの方法の比較:
1.簡単なステップ長は-1、すなわち文字列の反転である.
2.前後のアルファベットの位置を交換する.
3.再帰的な方式で、毎回1文字を出力する.
4.extendleft()関数を使用する両端キュー.
5.forループを使用して、左から右へ出力する.
コード:
5.独自のアルゴリズムで、たとえば次の2つのリストを昇順に結合し、繰り返しの要素を除去してください.
list1 = [2, 3, 8, 4, 9, 5, 6]
list2 = [5, 6, 10, 17, 11, 2]
回答:
チェーンテーブルをマージし、再帰的な高速ソート、再リンクします.
コード:
注意: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.次のコードクリップの問題点を説明します.
回答:
1.警告:objectはpythonの新しい形式(new style)の基礎クラスであり、再び定義されるべきではない.
2.警告:クラスメソッド(classmethod)はクラスが所有するメソッドであり、入力されたパラメータはselfではなくclsであるべきである.
3.エラー:Pythonはnewkeywordがなく、もしnewを変更する必要があるならば、例えば単例モード、書き換えることができる(override)_new__;
4.エラー:@property、属性を表し、メソッドでない場合はカッコを付ける必要はありません()」とobjectを直接呼び出します.man、いいです.
5.エラー:ベースクラスのメンバーを使用する場合はdummyclass._などのベースクラスを初期化する必要があります.init__(self)、いいです.
6.追加:クラス名はできるだけ大文字で使用する.
コード:
8.pythonの異常処理メカニズムと自己開発過程の体験を紹介する
回答:
Pythonの異常処理メカニズム:
try:異常を投げ出そうとする;
raise:異常を引き起こす;
Except:異常の処理;
finally:異常が発生するかどうかは、やるべきことです.
新しい例外タイプを作成するには、Exceptionクラスを継承する必要があり、クラスの属性を定義することができ、例外の処理が容易である.
開発体験:
異常は主に読取ファイルを処理し、withの方法でファイルを読み取ることもできる.ネットワーク接続にも用いることができ、異常は大量のエラー情報を含む、エラー処理を行うことができる.
コード:
本住所: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')