python 常见面试问题(1)-python 输出中文问题/求list的交集或差集/一个简单的socket编程/python 异常处理

今后无特别说明,环境一般是:

环境1:windows idle / python   version 2.7.2

环境2:LINUX: python --version   Python 2.5.2

1、python 输出中文问题解决

#!/usr/bin/python
# -*- coding: utf-8 -*-
#filename : output_chinese.py


print "say hello to world !"

s0 = '向世界打个招呼'
s1 = u'向世界打个招呼'

print repr(s0)
print repr(s1)

print s0.decode('utf-8')
print s1
print s1.encode('gbk')
>>> ================================ RESTART ================================
>>> 
say hello to world !
'\xe5\x90\x91\xe4\xb8\x96\xe7\x95\x8c\xe6\x89\x93\xe4\xb8\xaa\xe6\x8b\x9b\xe5\x91\xbc'
u'\u5411\u4e16\u754c\u6253\u4e2a\u62db\u547c'
向世界打个招呼
向世界打个招呼
向世界打个招呼
>>> 
其它环境如eclipse(比较麻烦),参考:

http://blog.csdn.net/alex197963/article/details/1569207

2、求list的交集或差集

#!/usr/bin/python
# -*- coding: utf-8 -*-
#filename :intersection.py

a = [1,2,3,4,5]
b = [3,4,5,6,7]

c = [x for x in a if x in b]       #求两个list的交集
print c            

d = [x for x in a if x not in b]    #求a不在b中的差集,同理可求b不在a中的差集
print d

# 类似用法
#(1)判断字符或串是否在某一个字符串中             字符串1 in 或 not in 字符串2

uname = 'say hello to world'
keyword= 'saym'          #改为say,见输出2
if keyword in uname:
    print 'right'
else:
    print 'wrong'
>>> 
[3, 4, 5]
[1, 2]
wrong
>>> 
>>> 
[3, 4, 5]
[1, 2]
right
3、写一个简单的socket编程

编写服务端步骤:

1.
第一步是创建socket对象。调用socket构造函数。如:

socket = socket.socket( family, type )

family参数代表地址家族,可为AF_INET或AF_UNIX。AF_INET家族包括Internet地址,AF_UNIX家族用于同一台机器上的进程间通信。
type参数代表套接字类型,可为SOCK_STREAM(流套接字)和SOCK_DGRAM(数据报套接字)。
2.
第二步是将socket绑定到指定地址。这是通过socket对象的bind方法来实现的:

socket.bind( address )

由AF_INET所创建的套接字,address地址必须是一个双元素元组,格式是(host,port)。host代表主机,port代表端口号。如果端口号正在使用、主机名不正确或端口已被保留,bind方法将引发socket.error异常。
3.
第三步是使用socket套接字的listen方法接收连接请求。

socket.listen( backlog )

backlog指定最多允许多少个客户连接到服务器。它的值至少为1。收到连接请求后,这些请求需要排队,如果队列满,就拒绝请求。
4.
第四步是服务器套接字通过socket的accept方法等待客户请求一个连接。

connection, address = socket.accept()

调 用accept方法时,socket会时入“waiting”状态。客户请求连接时,方法建立连接并返回服务器。accept方法返回一个含有两个元素的 元组(connection,address)。第一个元素connection是新的socket对象,服务器必须通过它与客户通信;第二个元素 address是客户的Internet地址。
5.

第五步是处理阶段,服务器和客户端通过send和recv方法通信(传输 数据)。服务器调用send,并采用字符串形式向客户发送信息。send方法返回已发送的字符个数。服务器使用recv方法从客户接收信息。调用recv 时,服务器必须指定一个整数,它对应于可通过本次方法调用来接收的最大数据量。recv方法在接收数据时会进入“blocked”状态,最后返回一个字符 串,用它表示收到的数据。如果发送的数据量超过了recv所允许的,数据会被截短。多余的数据将缓冲于接收端。以后调用recv时,多余的数据会从缓冲区 删除(以及自上次调用recv以来,客户可能发送的其它任何数据)。
6.

传输结束,服务器调用socket的close方法关闭连接。

#!/usr/bin/python
# -*- coding: utf-8 -*-
#filename :socket_sever.py

import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('localhost',8001))
sock.listen(5)
while True:
    connection.address = sock.accept()
    try:
        connection.settimeout(5)
        buf = connection.recv(1024)
        if buf == '1':
            connection.send('welcome to server!')
        else:
            connection.sent('please go out!')
    except socket.timeout:
         print "time out"
    connection.close()
python编写client的步骤:

1.

创建一个socket以连接服务器:socket = socket.socket( family, type )
2.
使用socket的connect方法连接服务器。对于AF_INET家族,连接格式如下:

socket.connect( (host,port) )

host代表服务器主机名或IP,port代表服务器进程所绑定的端口号。如连接成功,客户就可通过套接字与服务器通信,如果连接失败,会引发socket.error异常。
3.

处理阶段,客户和服务器将通过send方法和recv方法通信。
4. 传输结束,客户通过调用socket的close方法关闭连接。

#!/usr/bin/python
# -*- coding: utf-8 -*-
#filename :socket_client.py

import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('localhost',8001))

import time
time.sleep(2)
sock.send('1')

print sock.recv(1024)
sock.close()
测试:
>>> 
welcome to server!
>>> ================================ RESTART ================================
>>> 
welcome to server!
yee@Loong:/home/julius/python$ python socket_client.py 
welcome to server!
yee@Loong:/home/julius/python$ python socket_client.py 
welcome to server!

将一个完整的域名(www.ibm.com)解析成一个使用点号分隔的 IP 地址字符串

>>> import socket
>>> socket.gethostbyname('www.baidu.com')
'115.239.210.27'
>>> socket.gethostbyname('www.ibm.com')
'129.42.56.216'
>>> 
socket 编程的更多基础内容参考:

http://blog.csdn.net/gdreamlend/article/details/7424150

4、python 异常处理

1、try...except语句try...except语句可以用于捕捉并处理错误。通

#!/usr/bin/python
# -*- coding: utf-8 -*-
#filename :try_except.py

import sys
try:
    s = raw_input('enter something --->')
except EOFError:
        print '/n why did you do an EOF on me?'
        sys.exit()
except:
    print '/n some error coourred'
print 'done'
>>> 
enter something --->-1
done
>>> ================================ RESTART ================================
>>> 
/n some error coourred
done
>>> 

说明:每个try语句都必须有至少一个except语句。如果有一个异常程序没有处理,那么Python将调用默认的处理器处理,并终止程序且给出提示。


2、引发异常你可以用raise语句来引发一个异常。异常/错误对象必须有一个名字,且它们应是Error或Exception类的子类

#!/usr/bin/python
# -*- coding: utf-8 -*-
#filename :raise.py

class ShortInputException(Exception):
    " self defined exception class "
    def __init__(self,length,atleast):
        Exception.__init__(self)
        self.length = length
        self.atleast = atleast
try:
    s = raw_input('please input --> ')
    if len(s) < 3:
        raise ShortInputException(len(s),3)   #引发一个自定义的异常
except EOFError:
    print '/n you have been inputed an EOF'
except ShortInputException, x:
    print '''ShortInputException: the length of the input must be: %d, /
        at least: %d''' % (x.length, x.atleast)
else:                                                  #这个else没有和if配对吗?不能和if有相同的缩进,为什么呢???
        print 'no exception occured !'      
>>> ================================ RESTART ================================
>>> 
please input -->                                     #ctrl+d 或 ctrl+z 一般是EOF的输入方法
/n you have been inputed an EOF
>>> ================================ RESTART ================================
>>> 
please input --> 12
ShortInputException: the length of the input must be: 2, /
        at least: 3
>>> ================================ RESTART ================================
>>> 
please input --> wert
no exception occured !
>>> 
注意:ctrl+d 或 ctrl+z 一般是EOF的输入方法

3、try...finally语句当你正在读文件或还未关闭文件时发生了异常该怎么办呢?你应该使用try...finally语句以释放资源

#!/usr/bin/python
# -*- coding: utf-8 -*-
#filename :try_finally.py

import time

try:
    f = file('123.txt')
    while True:              # 读文件的一般方法      
        line = f.readline()
        if len(line) == 0:
            break
        time.sleep(3) #每隔3秒输出一行
        print line
finally:
        f.close()
        print 'Cleaning up, closed the file'

>>> ================================ RESTART ================================
>>> 
def f():

    try:

        1/0

    finally:

        return 42



>>> f()

42
Cleaning up, closed the file
>>> ================================ RESTART ================================
>>> 
def f():

    try:

Cleaning up, closed the file

Traceback (most recent call last):
  File "F:/interview/test1.py", line 13, in <module>
    time.sleep(3) #每隔3秒输出一行
KeyboardInterrupt
>>> 
说明:我们在3秒这段时间内按下了Ctrl-c,这将产生一个KeyboardInterrupt异常,我们并没有处理这个异常,那么Python将调用默认的处理方式。












你可能感兴趣的:(python 常见面试问题(1)-python 输出中文问题/求list的交集或差集/一个简单的socket编程/python 异常处理)