• python练习题


    0、猜数字

    #-*-encoding:UTF-8-*-

    import random

    guess_number=random.randint(0,9)

    loop_times=0

    while loop_times<5:

        print loop_times

        try:

            user_input_number=int(raw_input("请输入一个整数,范围0-99:".decode('utf-8').encode('gbk')))

        except Exception,e:

            print u"非法输入数据,必须输入整数"

            continue

        if user_input_number<guess_number:

            print u"猜小了"

        elif user_input_number>guess_number:

            print u"猜大了"

        else:

            print u"猜中了,您中奖了"

        loop_times +=1

        if loop_times==5:

            #下面这行会报错,因为这里会掉用系统默认字符集(ascii)进行先解码然后再编码到gbk,ascii不能解码中文

            #print "您猜了5次了,没有机会了,正确数字是:".encode('gbk'), guess_number

            #下面这行可以,用utf-8来解码就可以

            #print "您猜了5次了,没有机会了,正确数字是:".decode('utf-8').encode('gbk'), guess_number

            #下面这行会报错,因为不能对中文的uinicode进行解码

            #print u"您猜了5次了,没有机会了,正确数字是:".decode('utf-8').encode('gbk'), guess_number

            #下面这行可以,有中文的unicode直接编码成gbk,可以正常显示

            #print u"您猜了5次了,没有机会了,正确数字是:".encode('gbk'), guess_number

            break

    1、用ascii码进行字符串的输出

    import sys

    reload(sys)

    sys.setdefaultencoding("utf-8")

    '''

    letters=""

    for i in range(26):

        letters=letters+chr(90-i)

    print letters

    '''

    '''

    letters = ""

    for i in range(0,26,2):

        letters += chr(i+65)

    print letters

    '''

    '''

    #translate from abcd...-->fghi.., z->e

    letters=raw_input("input the letters:")

    #print letters

    #print len(letters)

    transletter = ""

    for i in letters:

        if (ord(i)+5) < 122:

            print"ord(i)+5 <122"  

            transletter+=chr(ord(i)+5)

        else:

            print"ord(i)+5>=122"

            transletter+=chr(ord(i)+5-26)

    print ("jiamihou",transletter)

    untransletter =""

    for i in transletter:

        if (ord(i))<102:

            untransletter += chr(ord(i)-5+26)

        else:

            untransletter+= chr(ord(i)-5)

    print (("解码后").decode("utf-8" ), untransletter)

    2、算出一个十进制数对应的二进制数:

    例题:

    如果算出一个十进制数对应的二进制数:

    中文算法:

    1. 数字不断与2整除
    2. 记录玉树,将余数存在一个list中
    3. 商继续除以2取整,知道最后商为0
    4. 拼接list反序输出二进制数

    自己写的:

    decimalism = input("input number:")

    binary=''

    while (decimalism != 0):

        if decimalism %2 ==0:

            print "decimalism %2 =0"

            binary += "0"

            print "binary:", binary

            decimalism /=2

            print "decimalism: ", decimalism

        else:

            print "decimalism  %2 =1"

            binary += "1"

            print binary

            decimalism /=2

            print "decimalism: ", decimalism

    print binary[::-1]

    优化之后:

    decimalism = input("input number:")

    binary=""

    while (decimalism != 0):

            binary += str(decimalism %2)

            decimalism /=2

    print "binary:",binary[::-1]

    吴老写的:

    number = int(raw_input("input a number:"))

    bin_list=[]

    while 1:

        quient=number/2

        bin_list.append(str(number%2))

        number=quient

        if number==0:

            break

    print "result:","".join(bin_list[::-1])

    ---------------------------------------------------------------------------------------------------------------------------------

    >>> a =1

    >>> isinstance(a,int)

    True

    >>> b=1L

    >>> isinstance(b,long)

    True

    >>> c=1+1j

    >>> isinstance(c,complex)

    True

    >>> d = u"a"

    >>> isinstance(d,unicode)

    True

    >>> e="abc"

    >>> isinstance(e,str)

    True

    >>> f =[1]

    >>> isinstance(f,list)

    True

    >>> g=(1,2)

    >>> isinstance(g,tuple)

    True

    >>> h ={1:2}

    >>> isinstance(h,dict)

    True

    >>> instance(P,type)

    Traceback (most recent call last):

      File "<stdin>", line 1, in <module>

    NameError: name 'instance' is not defined

    >>> isinstance(P,type)

    True

    Print 5%2 =1

    Import math

    dir(math)

    Math.sqrt(4) = 2

    3、对文件的内容进行编码转换

    #-*-coding:UTF-8-*-

    fp1 = open('d:\testfile.txt', 'r')#手工创建文件为ANSI编码保存(gbk)

    info1 = fp1.read()

    #已知是GBK编码,解码成Unicode

    tmp = info1.decode('GBK')

    fp2 = open('d:\testfile2.txt','w')

    #编码成UFT-8编码的str

    info2= tmp.encode('UTF-8')

    fp2.write(info2)#写入uft8字符,并进行保存

    fp2.close() #文件会变成utf-8编码保存

    test1是ANSI (GBK)编码

    test2是UTF编码

    #-*_ coding:UTF-8-*-

    s= "byte string"

    print type(s)

    #str to unicode

    u = s.decode()

    u=s.decode()

    print type(u)

    #unicode to str

    backToBytes=u.encode()

    print type(backToBytes)

    #获取系统编码示例:

    #-*-coding:UTF-8-*-

    import sys

    print sys.getdefaultencoding()

    #更改系统编码代码示例:

    #-*-coding:UTF-8-*-

    import sys

    reload(sys)

    sys.setdefaultencoding('UTF-8')

     

    #-*- coding: UTF-8 -*-

    import sys

    reload(sys) #去掉此行和下行,则程序出错

    sys.setdefaultencoding('UTF-8')

    print sys.getdefaultencoding()

    print type(u"我")

    print type(u"我".encode('utf-8'))

    print type(u"我".decode('utf-8'))

    #”我”是str类型,encode前,python自动用默认编码进行decode为unicode类型,默认为ascii,则无法decode

    print “我”.encode(‘utf-8’).decode(‘utf-8’) #会调用默认的编码进行decode在进行encode(‘utf-8’)

    注意:这里在“我”之前没有用u,所以“我”是字节型字符串,而且后边没有先decode(),不会直接编码为uft-8(需要unicode才可以),所以系统默认调用decode(utf-8)来解码为unicode,然后再编码为后边的

    utf-8(encode(‘utf-8’).。。。),如果没有制定系统默认编码为uft-8,则系统默认的编码为ascii,这里系统自动调用decode(ascii)则会报错,因为ascii不会解码中文.

    http://www.cnblogs.com/guosq/p/6378639.html

    4、猜数字

    大了提示猜小点,小了提示猜大点,5次为限,猜中了提示中奖了,然后推出

    #-*-encoding:UTF-8-*-

    a = 98

    for i in range(5):

        print i

        input_number=input("please guess the number:")

        if input_number >a:

            print("please guess smaller")

        elif input_number<a:

            print("please guess bigger")

        else:

            print("you got it, please get your award!!")

            exit()

        if i == 4:

            print("you have tried 5 times,the number is:", a)

    #-*-encoding:UTF-8-*-

    '''

    import sys

    reload(sys)

    print sys.getdefaultencoding()

    sys.setdefaultencoding('utf-8')

    print sys.getdefaultencoding()

    '''

    a = 98

    for i in range(5):

        print i

        input_number=input(u"请输入一个数:".encode('gbk'))

        if input_number >a:

            print(u"请猜小一点!")

        elif input_number<a:

            print(u"请猜大一点1")

        else:

            print(u"猜中了,您中大奖了!!")

            exit()

        if i == 4:

            print u"您试了5次了,没有机会了,数字是:".encode('gbk'), a

    1. 生成随机数(有一定的范围),存在一个变量里
    2. 循环5次并控制循环推出条件
    3. 每次循环中读入一个整数,(raw_input,必须要int转类型):输入类型的判断,是否是整数或者小数
    4. 比较的3种:大于(提示:大了,第五次的时候打印随机数),小于(小了,第五次的时候打印随机数)和等于(猜中了,提示中奖了)
    5. 打印一句话,执行完毕:print  ’done’
     

    #-*-encoding:UTF-8-*-

    import random

    guess_number=random.randint(0,9)

    loop_times=0

    while loop_times<5:

        print loop_times

        try:

            user_input_number=int(raw_input("请输入一个整数,范围0-99:".decode('utf-8').encode('gbk')))

        except Exception,e:

            print u"非法输入数据,必须输入整数"

            continue

        if user_input_number<guess_number:

            print u"猜小了"

        elif user_input_number>guess_number:

            print u"猜大了"

        else:

            print u"猜中了,您中奖了"

        loop_times +=1

        if loop_times==5:

            #下面这行会报错,因为这里会掉用系统默认字符集(ascii)进行先解码然后再编码到gbk,ascii不能解码中文

            #print "您猜了5次了,没有机会了,正确数字是:".encode('gbk'), guess_number

            #下面这行可以,用utf-8来解码就可以

            #print "您猜了5次了,没有机会了,正确数字是:".decode('utf-8').encode('gbk'), guess_number

            #下面这行会报错,因为不能对中文的uinicode进行解码

            #print u"您猜了5次了,没有机会了,正确数字是:".decode('utf-8').encode('gbk'), guess_number

            #下面这行可以,有中文的unicode直接编码成gbk,可以正常显示

            #print u"您猜了5次了,没有机会了,正确数字是:".encode('gbk'), guess_number

    #-*-encoding:UTF-8-*-

    import random

    cishu=5

    b=random.randrange(5)

    while cishu>0:

        try:

            #下面这句因为有u,使程序进入死循环

            a=raw_input(u"输入数字:".decode("utf-8").encode("gbk"))#应该把u去掉

        except Exception,e:

            print u"请输入数字"

            continue

    5、输入1-127的ascii码并输出对应字符

    #-*-encoding:UTF-8-*-

    ascii = int(raw_input("input ascii code(1-127):"))

    print "the transformed character is:", chr(ascii)

    6、输入a,b,c,d4个整数,计算a+b-c*d的结果

    #-*-encoding:UTF-8-*-

    a=int(raw_input("input number a:"))

    b=int(raw_input("input number b:"))

    c=int(raw_input("input number c:"))

    d=int(raw_input("input number d:"))

    print "result of calculation of a+b-c*d:", a+b-c*d

    答案:

    >>> a=1
    >>> b=2
    >>> c=3
    >>> d=4
    >>> print eval("a+b-c*d")
    -9
    >>> print a+b-c*d
    -9

    7、计算一周有多少分钟、多少秒钟

    #-*-encoding:UTF-8-*-

    minutes=7*24*60

    seconds=minutes * 60

    print u"一周的分钟数是:",minutes

    print u"一周的秒数是:", seconds

    答案:

    >>> print "一周有%s分钟" %str(1*7*24*60)
    一周有10080分钟

    >>> print "一周有%s秒" %str(1*7*24*60*3600)
    一周有36288000秒

    '*'*100

    8、3个人在餐厅吃饭,想分摊饭费。总共花费35.27美元,他们还想给15%的小费。每个人该怎么付钱,编程实现

    #-*-encoding:UTF-8-*-

    expense = 35.27

    charge= expense* 0.15

    moneyForEach = (expense + charge)/3

    print u"3个人平均费用是", moneyForEach,u"美元"

    答案:

    >>> print "每人付费%s$" %str(round(35.37*1.15/3,2))
    每人付费13.56$

    9.计算一个12.5m X 16.7m的矩形房间的面积和周长

    #-*-encoding:UTF-8-*-

    a = 12.5

    b = 16.7

    print u"长方形的长是:", a,"m"

    print u"长方形的宽是:", b,"m"

    area = a*b

    perimeter = 2*(a+b)

    print u"该长方形的面积是:", area,u"㎡"#此处注意,是中文字符

    print u"该长方形的周长是:", perimeter,"m"

    答案:

    >>> print "面积%s平方米" %str(length*width)
    面积208.75平方米

    8.怎么得到9 / 2的小数结果

    #-*-encoding:UTF-8-*-

    a=float(9)

    b=float(2)

    print u"9/2的小数结果是:", a/b

    答案:

    >>> print 9/2.0
    4.5

    9.python计算中7 * 7 *7 * 7,可以有多少种写法

    #-*-encoding:UTF-8-*-

    import math

    print "methords to calculate 7*7*7*7:"

    print "math.pow(7,4):", math.pow(7,4)

    print "7**4:",7**4

    print "7*7*7*7:",7*7*7*7

    print "7**2*7**2:",7**2*7**2

    10.写程序将温度从华氏温度转换为摄氏温度。转换公式为C = 5 / 9*(F - 32)

    #-*-encoding:UTF-8-*-

    '''

    import sys

    reload(sys)

    sys.setdefaultencoding('UTF-8')

    '''

    fahrenheit = float(raw_input(u"请输入华氏温度:".encode('GBK')))

    centigrade = float(5)/float(9)*float(fahrenheit-32)

    print u"转换为摄氏温度:", round(centigrade,2)

    答案:

    >>> print "摄氏温度:%s" %str(round(5/9.0*(a-32),1))
    摄氏温度:-1.1

    9.一家商场在降价促销。如果购买金额50-100元(包含50元和100元)之间,会给10%的折扣,如果购买金额大于100元会给20%折扣。编写一程序,询问购买价格,再显示出折扣(10%或20%)和最终价格。

    答案:

    please input your price:101

    >>> if  customer_price >=100:

    ...     print "discount rate is %s" %0.2

    ...     print "you should pay %s" %(customer_price*0.8)

    ... elif customer_price>=50 and customer_price<100:

    ...     print "discount rate is %s" %0.1

    ...     print "you should pay %s" %(customer_price*0.9)

    ... else:

    ...     print "no discount"

    ...     print "you should pay %s" %(customer_price)

    ...

    discount rate is 0.2

    you should pay 80.8

    10、判断一个数n能否同时被3和5整除

    答案:

    a=100

    >>> if a %3==0 and a%5==0:

    ...     print "Yes"

    ... else:

    ...     print "No!"

    ...

    No!

    11、求1 + 2 + 3 +….+100

    #-*-encoding:UTF-8-*-

    sum=0

    for i in range(1,101):

        #print "i=:",i,"sum=:",sum

        sum+=i

    print "sum of 1+2+...100 is:",sum

    12、交换两个变量的值

    #-*-encoding:UTF-8-*-

    variate1=raw_input("input variate1:")

    variate2=raw_input("input variate2:")

    temp = variate1

    variate1=variate2

    variate2=temp

    print "exchange value of variate1 and variate2: "

    print "variate1=:", variate1

    print "variate2=:",variate2

    13、一个足球队在寻找年龄在10到12岁的小女孩(包括10岁和12岁)加入。

    编写一个程序,询问用户的性别(m表示男性,f表示女性)和年龄,然后显示一条消息指出这个人是否可以加入球队,询问10次后,输出满足条件的总人数。

    #-*-encoding:UTF-8-*-

    number=0

    while number <=10:

        sex=0

        print "number:", number

        while sex not in (1,2):

            sex=int(raw_input("please select 1 (female) or 2 ( male):"))

        age=int(raw_input("your age is:"))

        print "sex:",sex,"age:",age

        number+=1

        if age >=10 and age<=12 and sex==1:

            print "you can join in the football team!"

        else:

            print "sorry, you can not join in football team!"

    14、长途旅行中,刚到一个加油站,距下一个加油站还有200km,而且以后每个加油站之间距离都是200km。

    编写一个程序确定是不是需要在这里加油,还是可以等到接下来的第几个加油站再加油。 程序询问以下几个问题: 1)你车的油箱多大,单位升 2)目前油箱还剩多少油,按百分比算,比如一半就是0.5 3)你车每升油可以走多远(km) 提示: 油箱中包含5升的缓冲油,以防油表不准。

    #-*-encoding:UTF-8-*-

    '''

    算法:

    1、邮箱尺寸x剩余油量百分比-5L=剩余油量L

    2、剩余油量x每升油走的距离=还能走的距离km

    3、还能走的距离跟200km比较,如果小于等于200km就在需要在这里加油

    4、还能走的距离跟200km比较,如果大于200km,小于400,可以等到下一个加油站加油

    5、还能走的距离跟200km比较,如果大于200km而且能整除的话,整除结果为n,可以在接下来的第n个加油站加油

    '''

    fuel_capacity = float(raw_input("input your fuel box capacity (L):"))

    current_fuel_left_ratio =float(raw_input("input your fuel left ratio now(e.g.0.5):"))

    distance_per_litre=float(raw_input("how far the car can go per L (km):"))

    distance_can_move=(current_fuel_left_ratio*fuel_capacity-5)*distance_per_litre

    print "distance_can_move:",distance_can_move,"km"

    if distance_can_move <=200:

        print "you should add fuel in this petrol station, you can go %s km with the fuel left now "%distance_can_move

    elif distance_can_move >200 and distance_can_move <400:

        print "you can add fuel in next petrol station, you can go %s km with the fuel left now "%distance_can_move

    else:

    print "you can add fuel in next %s station, you can go %s km with the fuel left now"%(int(distance_can_move/200),distance_can_move)

    15、现有面包、热狗、番茄酱、芥末酱以及洋葱,数字显示有多少种订购组合,其中面包必订,0不订,1订,比如10000,表示只订购面包

    #-*-encoding:UTF-8-*-

    num=1

    a=u"面包"

    b=u"热狗"

    c=u"番茄酱"

    d=u"芥末酱"

    e=u"洋葱"

    #print a,b,c,d,e

    list = [a,b,c,d,e]

    #print ",".join(list)

    '''

    list1=[]

    for i in range(5):

        list1.append(list[i])

    print ",".join(list1)

    '''

    print "there are %s combinations"%(2**5-2**4)

    for i in range(2**4,2**5):

        list1 = []

        print "combination%s:"%num

        num+=1

        #print bin(i)[2:]

        combination = bin(i)[2:]

        print "combination:",combination

        for i in range(5):

            if combination[i]=="1":

               #print "combination[%s]=1"%i

                list1.append(list[i])

        print "combination:",",".join(list1)

    #print " "

    运行结果:

    16、基于上题:给出每种食物的卡路里(自定义),再计算出每种组合总共的卡路里

    #-*-encoding:UTF-8-*-

    num=1

    a=u"面包"

    b=u"热狗"

    c=u"番茄酱"

    d=u"芥末酱"

    e=u"洋葱"

    list = [a,b,c,d,e]

    calory=[20,30,10,30,25]

    print "there are %s combinations"%(2**5-2**4)

    for i in range(2**4,2**5):

        list1 = []

        list2 = []

        print "combination%s:"%num

        num+=1

        #print bin(i)[2:]

        combination = bin(i)[2:]

        print "combination:",combination

        for i in range(5):

            if combination[i]=="1":

               #print "combination[%s]=1"%i

                list1.append(list[i])

                list2.append(calory[i])

        print "combination:",",".join(list1)

        print "total calory is:",sum(list2)

    17、输入5个名字,排序后输出

    #-*-encoding:UTF-8-*-

    '''

    name4="abc"

    name2="bcd"

    name5="csf"

    name1="daed"

    name3="erfd"

    '''

    name1=raw_input("input the name1:")

    name2=raw_input("input the name2:")

    name3=raw_input("input the name3:")

    name4=raw_input("input the name4:")

    name5=raw_input("input the name5:")

    list = [name1,name2,name3,name4,name5]

    print "name list is:",",".join(list)

    for i in range(len(list)):

        for j in range(i):

            if list[j] > list[i]:

                list[j], list[i] = list[i], list[j]

    print "sort name list is:",",".join(list)

    18、实现一个简单的单词本

    功能:

    可以添加单词和词义,当所添加的单词已存在,让用户知道;

    可以查找单词,当查找的单词不存在时,让用户知道;

    可以删除单词,当删除的单词不存在时,让用户知道;

    以上功能可以无限制操作,直到用户输入bye退出程序。

    #-*-encoding:UTF-8-*-

    '''

    1.创建空字典,循环提示用户选择操作1:新增单词和词义,2:查找单词。3:删除单词4,对出

    2.判断选择,如果是1:新增,提示输入单词,

        判断单词是否存在字典中,如果存在,提示用户已经存在了,如果不存在,继续提示输入词义,

        提示成功消息,显示单词和词义

    3.如果是2查找单词,提示用户输入单词,

        判断单词是否在字典中,如果没有,提示用户没有

        如果有,显示该单词和词义,

    4.如果是3删除单词,提示用户输入要删除的单词,

        判断单词是否在字典中,如果没有提示用户没有该单词

        如果有,删除该单词和词义,提示用户删除成功

    5。如何是4退出,退出循环

    '''

    word_book={"dog":"a kind of pet"}

    operation = True

    while operation:

        choice = int(raw_input(" Select operation: 1: Insert word and meaning 2: Search word 3: Delete word 4: Exit "))

        if choice ==1:#新增单词

            add_word=raw_input("Input the word: ")

            if word_book.has_key(add_word):#如果要新增的单词存在

                print " word book already have word: %s "%add_word#提示单词已经存在

            else:#单词不存在

                add_word_meaning=raw_input("Input the meaning of word %s: " %add_word)#提示输入单词词义

                word_book[add_word]=add_word_meaning#打印该新增单词的内容

                print " You have added the word successfully, %s:" %add_word, word_book[add_word]#提示新增成功,显示单词和词义

            print "word_book:",word_book#打印该新增单词的全部内容

        if choice ==2:#查询单词

            search_word=raw_input("Input the word you want to search: ")#提示输入要查询的单词

            if word_book.has_key(search_word):#单词存在

                print" The meaning of the word %s: %s"%(search_word,word_book[search_word])#打印单词和词义

            else:#单词不存在

                print" Sorry the word you search does not exist!"#提示用户该单词不存在

            print "word_book:",word_book#打印该新增单词的全部内容

        if choice ==3:#删除单词

            del_word=raw_input("Input the word you want to delete: ")#提示输入要删除的单词

            if not(word_book.has_key(del_word)):#要删除的单词不存在

                print" Sorry,the word you want to delete does not exist!"

            else:#单词存在

                del word_book[del_word]#执行删除动作,删除该单词

                print"Deleted the word %s successfully!"%del_word

            print "word_book:",word_book#打印该新增单词的全部内容

        if choice ==4:#退出

            print "bye..."

            exit()

    0、猜数字

    #-*-encoding:UTF-8-*-

    import random

    guess_number=random.randint(0,9)

    loop_times=0

    while loop_times<5:

        print loop_times

        try:

            user_input_number=int(raw_input("请输入一个整数,范围0-99:".decode('utf-8').encode('gbk')))

        except Exception,e:

            print u"非法输入数据,必须输入整数"

            continue

        if user_input_number<guess_number:

            print u"猜小了"

        elif user_input_number>guess_number:

            print u"猜大了"

        else:

            print u"猜中了,您中奖了"

        loop_times +=1

        if loop_times==5:

            #下面这行会报错,因为这里会掉用系统默认字符集(ascii)进行先解码然后再编码到gbk,ascii不能解码中文

            #print "您猜了5次了,没有机会了,正确数字是:".encode('gbk'), guess_number

            #下面这行可以,用utf-8来解码就可以

            #print "您猜了5次了,没有机会了,正确数字是:".decode('utf-8').encode('gbk'), guess_number

            #下面这行会报错,因为不能对中文的uinicode进行解码

            #print u"您猜了5次了,没有机会了,正确数字是:".decode('utf-8').encode('gbk'), guess_number

            #下面这行可以,有中文的unicode直接编码成gbk,可以正常显示

            #print u"您猜了5次了,没有机会了,正确数字是:".encode('gbk'), guess_number

            break

    1、用ascii码进行字符串的输出

    import sys

    reload(sys)

    sys.setdefaultencoding("utf-8")

    '''

    letters=""

    for i in range(26):

        letters=letters+chr(90-i)

    print letters

    '''

    '''

    letters = ""

    for i in range(0,26,2):

        letters += chr(i+65)

    print letters

    '''

    '''

    #translate from abcd...-->fghi.., z->e

    letters=raw_input("input the letters:")

    #print letters

    #print len(letters)

    transletter = ""

    for i in letters:

        if (ord(i)+5) < 122:

            print"ord(i)+5 <122"  

            transletter+=chr(ord(i)+5)

        else:

            print"ord(i)+5>=122"

            transletter+=chr(ord(i)+5-26)

    print ("jiamihou",transletter)

    untransletter =""

    for i in transletter:

        if (ord(i))<102:

            untransletter += chr(ord(i)-5+26)

        else:

            untransletter+= chr(ord(i)-5)

    print (("解码后").decode("utf-8" ), untransletter)

    2、算出一个十进制数对应的二进制数:

    例题:

    如果算出一个十进制数对应的二进制数:

    中文算法:

    1. 数字不断与2整除
    2. 记录玉树,将余数存在一个list中
    3. 商继续除以2取整,知道最后商为0
    4. 拼接list反序输出二进制数

    自己写的:

    decimalism = input("input number:")

    binary=''

    while (decimalism != 0):

        if decimalism %2 ==0:

            print "decimalism %2 =0"

            binary += "0"

            print "binary:", binary

            decimalism /=2

            print "decimalism: ", decimalism

        else:

            print "decimalism  %2 =1"

            binary += "1"

            print binary

            decimalism /=2

            print "decimalism: ", decimalism

    print binary[::-1]

    优化之后:

    decimalism = input("input number:")

    binary=""

    while (decimalism != 0):

            binary += str(decimalism %2)

            decimalism /=2

    print "binary:",binary[::-1]

    吴老写的:

    number = int(raw_input("input a number:"))

    bin_list=[]

    while 1:

        quient=number/2

        bin_list.append(str(number%2))

        number=quient

        if number==0:

            break

    print "result:","".join(bin_list[::-1])

    ---------------------------------------------------------------------------------------------------------------------------------

    >>> a =1

    >>> isinstance(a,int)

    True

    >>> b=1L

    >>> isinstance(b,long)

    True

    >>> c=1+1j

    >>> isinstance(c,complex)

    True

    >>> d = u"a"

    >>> isinstance(d,unicode)

    True

    >>> e="abc"

    >>> isinstance(e,str)

    True

    >>> f =[1]

    >>> isinstance(f,list)

    True

    >>> g=(1,2)

    >>> isinstance(g,tuple)

    True

    >>> h ={1:2}

    >>> isinstance(h,dict)

    True

    >>> instance(P,type)

    Traceback (most recent call last):

      File "<stdin>", line 1, in <module>

    NameError: name 'instance' is not defined

    >>> isinstance(P,type)

    True

    Print 5%2 =1

    Import math

    dir(math)

    Math.sqrt(4) = 2

    3、对文件的内容进行编码转换

    #-*-coding:UTF-8-*-

    fp1 = open('d:\testfile.txt', 'r')#手工创建文件为ANSI编码保存(gbk)

    info1 = fp1.read()

    #已知是GBK编码,解码成Unicode

    tmp = info1.decode('GBK')

    fp2 = open('d:\testfile2.txt','w')

    #编码成UFT-8编码的str

    info2= tmp.encode('UTF-8')

    fp2.write(info2)#写入uft8字符,并进行保存

    fp2.close() #文件会变成utf-8编码保存

    test1是ANSI (GBK)编码

    test2是UTF编码

    #-*_ coding:UTF-8-*-

    s= "byte string"

    print type(s)

    #str to unicode

    u = s.decode()

    u=s.decode()

    print type(u)

    #unicode to str

    backToBytes=u.encode()

    print type(backToBytes)

    #获取系统编码示例:

    #-*-coding:UTF-8-*-

    import sys

    print sys.getdefaultencoding()

    #更改系统编码代码示例:

    #-*-coding:UTF-8-*-

    import sys

    reload(sys)

    sys.setdefaultencoding('UTF-8')

     

    #-*- coding: UTF-8 -*-

    import sys

    reload(sys) #去掉此行和下行,则程序出错

    sys.setdefaultencoding('UTF-8')

    print sys.getdefaultencoding()

    print type(u"我")

    print type(u"我".encode('utf-8'))

    print type(u"我".decode('utf-8'))

    #”我”是str类型,encode前,python自动用默认编码进行decode为unicode类型,默认为ascii,则无法decode

    print “我”.encode(‘utf-8’).decode(‘utf-8’) #会调用默认的编码进行decode在进行encode(‘utf-8’)

    注意:这里在“我”之前没有用u,所以“我”是字节型字符串,而且后边没有先decode(),不会直接编码为uft-8(需要unicode才可以),所以系统默认调用decode(utf-8)来解码为unicode,然后再编码为后边的

    utf-8(encode(‘utf-8’).。。。),如果没有制定系统默认编码为uft-8,则系统默认的编码为ascii,这里系统自动调用decode(ascii)则会报错,因为ascii不会解码中文.

    http://www.cnblogs.com/guosq/p/6378639.html

    4、猜数字

    大了提示猜小点,小了提示猜大点,5次为限,猜中了提示中奖了,然后推出

    #-*-encoding:UTF-8-*-

    a = 98

    for i in range(5):

        print i

        input_number=input("please guess the number:")

        if input_number >a:

            print("please guess smaller")

        elif input_number<a:

            print("please guess bigger")

        else:

            print("you got it, please get your award!!")

            exit()

        if i == 4:

            print("you have tried 5 times,the number is:", a)

    #-*-encoding:UTF-8-*-

    '''

    import sys

    reload(sys)

    print sys.getdefaultencoding()

    sys.setdefaultencoding('utf-8')

    print sys.getdefaultencoding()

    '''

    a = 98

    for i in range(5):

        print i

        input_number=input(u"请输入一个数:".encode('gbk'))

        if input_number >a:

            print(u"请猜小一点!")

        elif input_number<a:

            print(u"请猜大一点1")

        else:

            print(u"猜中了,您中大奖了!!")

            exit()

        if i == 4:

            print u"您试了5次了,没有机会了,数字是:".encode('gbk'), a

    1. 生成随机数(有一定的范围),存在一个变量里
    2. 循环5次并控制循环推出条件
    3. 每次循环中读入一个整数,(raw_input,必须要int转类型):输入类型的判断,是否是整数或者小数
    4. 比较的3种:大于(提示:大了,第五次的时候打印随机数),小于(小了,第五次的时候打印随机数)和等于(猜中了,提示中奖了)
    5. 打印一句话,执行完毕:print  ’done’
     

    #-*-encoding:UTF-8-*-

    import random

    guess_number=random.randint(0,9)

    loop_times=0

    while loop_times<5:

        print loop_times

        try:

            user_input_number=int(raw_input("请输入一个整数,范围0-99:".decode('utf-8').encode('gbk')))

        except Exception,e:

            print u"非法输入数据,必须输入整数"

            continue

        if user_input_number<guess_number:

            print u"猜小了"

        elif user_input_number>guess_number:

            print u"猜大了"

        else:

            print u"猜中了,您中奖了"

        loop_times +=1

        if loop_times==5:

            #下面这行会报错,因为这里会掉用系统默认字符集(ascii)进行先解码然后再编码到gbk,ascii不能解码中文

            #print "您猜了5次了,没有机会了,正确数字是:".encode('gbk'), guess_number

            #下面这行可以,用utf-8来解码就可以

            #print "您猜了5次了,没有机会了,正确数字是:".decode('utf-8').encode('gbk'), guess_number

            #下面这行会报错,因为不能对中文的uinicode进行解码

            #print u"您猜了5次了,没有机会了,正确数字是:".decode('utf-8').encode('gbk'), guess_number

            #下面这行可以,有中文的unicode直接编码成gbk,可以正常显示

            #print u"您猜了5次了,没有机会了,正确数字是:".encode('gbk'), guess_number

    #-*-encoding:UTF-8-*-

    import random

    cishu=5

    b=random.randrange(5)

    while cishu>0:

        try:

            #下面这句因为有u,使程序进入死循环

            a=raw_input(u"输入数字:".decode("utf-8").encode("gbk"))#应该把u去掉

        except Exception,e:

            print u"请输入数字"

            continue

    5、输入1-127的ascii码并输出对应字符

    #-*-encoding:UTF-8-*-

    ascii = int(raw_input("input ascii code(1-127):"))

    print "the transformed character is:", chr(ascii)

    6、输入a,b,c,d4个整数,计算a+b-c*d的结果

    #-*-encoding:UTF-8-*-

    a=int(raw_input("input number a:"))

    b=int(raw_input("input number b:"))

    c=int(raw_input("input number c:"))

    d=int(raw_input("input number d:"))

    print "result of calculation of a+b-c*d:", a+b-c*d

    答案:

    >>> a=1
    >>> b=2
    >>> c=3
    >>> d=4
    >>> print eval("a+b-c*d")
    -9
    >>> print a+b-c*d
    -9

    7、计算一周有多少分钟、多少秒钟

    #-*-encoding:UTF-8-*-

    minutes=7*24*60

    seconds=minutes * 60

    print u"一周的分钟数是:",minutes

    print u"一周的秒数是:", seconds

    答案:

    >>> print "一周有%s分钟" %str(1*7*24*60)
    一周有10080分钟

    >>> print "一周有%s秒" %str(1*7*24*60*3600)
    一周有36288000秒

    '*'*100

    8、3个人在餐厅吃饭,想分摊饭费。总共花费35.27美元,他们还想给15%的小费。每个人该怎么付钱,编程实现

    #-*-encoding:UTF-8-*-

    expense = 35.27

    charge= expense* 0.15

    moneyForEach = (expense + charge)/3

    print u"3个人平均费用是", moneyForEach,u"美元"

    答案:

    >>> print "每人付费%s$" %str(round(35.37*1.15/3,2))
    每人付费13.56$

    9.计算一个12.5m X 16.7m的矩形房间的面积和周长

    #-*-encoding:UTF-8-*-

    a = 12.5

    b = 16.7

    print u"长方形的长是:", a,"m"

    print u"长方形的宽是:", b,"m"

    area = a*b

    perimeter = 2*(a+b)

    print u"该长方形的面积是:", area,u"㎡"#此处注意,是中文字符

    print u"该长方形的周长是:", perimeter,"m"

    答案:

    >>> print "面积%s平方米" %str(length*width)
    面积208.75平方米

    8.怎么得到9 / 2的小数结果

    #-*-encoding:UTF-8-*-

    a=float(9)

    b=float(2)

    print u"9/2的小数结果是:", a/b

    答案:

    >>> print 9/2.0
    4.5

    9.python计算中7 * 7 *7 * 7,可以有多少种写法

    #-*-encoding:UTF-8-*-

    import math

    print "methords to calculate 7*7*7*7:"

    print "math.pow(7,4):", math.pow(7,4)

    print "7**4:",7**4

    print "7*7*7*7:",7*7*7*7

    print "7**2*7**2:",7**2*7**2

    10.写程序将温度从华氏温度转换为摄氏温度。转换公式为C = 5 / 9*(F - 32)

    #-*-encoding:UTF-8-*-

    '''

    import sys

    reload(sys)

    sys.setdefaultencoding('UTF-8')

    '''

    fahrenheit = float(raw_input(u"请输入华氏温度:".encode('GBK')))

    centigrade = float(5)/float(9)*float(fahrenheit-32)

    print u"转换为摄氏温度:", round(centigrade,2)

    答案:

    >>> print "摄氏温度:%s" %str(round(5/9.0*(a-32),1))
    摄氏温度:-1.1

    9.一家商场在降价促销。如果购买金额50-100元(包含50元和100元)之间,会给10%的折扣,如果购买金额大于100元会给20%折扣。编写一程序,询问购买价格,再显示出折扣(10%或20%)和最终价格。

    答案:

    please input your price:101

    >>> if  customer_price >=100:

    ...     print "discount rate is %s" %0.2

    ...     print "you should pay %s" %(customer_price*0.8)

    ... elif customer_price>=50 and customer_price<100:

    ...     print "discount rate is %s" %0.1

    ...     print "you should pay %s" %(customer_price*0.9)

    ... else:

    ...     print "no discount"

    ...     print "you should pay %s" %(customer_price)

    ...

    discount rate is 0.2

    you should pay 80.8

    10、判断一个数n能否同时被3和5整除

    答案:

    a=100

    >>> if a %3==0 and a%5==0:

    ...     print "Yes"

    ... else:

    ...     print "No!"

    ...

    No!

    11、求1 + 2 + 3 +….+100

    #-*-encoding:UTF-8-*-

    sum=0

    for i in range(1,101):

        #print "i=:",i,"sum=:",sum

        sum+=i

    print "sum of 1+2+...100 is:",sum

    高斯算法:(n+1)n/2

    答案:

    # coding=utf-8

    count =0

    for i in range(1,101):
        count+=i

    print count

    12、交换两个变量的值

    #-*-encoding:UTF-8-*-

    variate1=raw_input("input variate1:")

    variate2=raw_input("input variate2:")

    temp = variate1

    variate1=variate2

    variate2=temp

    print "exchange value of variate1 and variate2: "

    print "variate1=:", variate1

    print "variate2=:",variate2

    答案:

    # coding=utf-8

    a=1
    b=2

    a,b = b,a
    print a,b

    # coding=utf-8

    a=1
    b=2
    tmp = a
    a=b
    b=tmp

    print a,b

    13、一个足球队在寻找年龄在10到12岁的小女孩(包括10岁和12岁)加入。

    编写一个程序,询问用户的性别(m表示男性,f表示女性)和年龄,然后显示一条消息指出这个人是否可以加入球队,询问10次后,输出满足条件的总人数。

    #-*-encoding:UTF-8-*-

    number=0

    while number <=10:

        sex=0

        print "number:", number

        while sex not in (1,2):

            sex=int(raw_input("please select 1 (female) or 2 ( male):"))

        age=int(raw_input("your age is:"))

        print "sex:",sex,"age:",age

        number+=1

        if age >=10 and age<=12 and sex==1:

            print "you can join in the football team!"

        else:

            print "sorry, you can not join in football team!"

    答案:

    # coding=utf-8

    count =0

    for i in range(10):
        student_info = raw_input("please input sex and age,sep by ',':")
        sex = student_info.split(',')[0]
        age = student_info.split(',')[1]
        if sex.lower() == "f" and float(age) >=10 and float(age)<=12:
            count+=1

    print u"满足条件的孩子有 %s 个" %count

    14、长途旅行中,刚到一个加油站,距下一个加油站还有200km,而且以后每个加油站之间距离都是200km。

    编写一个程序确定是不是需要在这里加油,还是可以等到接下来的第几个加油站再加油。 程序询问以下几个问题: 1)你车的油箱多大,单位升 2)目前油箱还剩多少油,按百分比算,比如一半就是0.5 3)你车每升油可以走多远(km) 提示: 油箱中包含5升的缓冲油,以防油表不准。

    #-*-encoding:UTF-8-*-

    '''

    算法:

    1、邮箱尺寸x剩余油量百分比-5L=剩余油量L

    2、剩余油量x每升油走的距离=还能走的距离km

    3、还能走的距离跟200km比较,如果小于等于200km就在需要在这里加油

    4、还能走的距离跟200km比较,如果大于200km,小于400,可以等到下一个加油站加油

    5、还能走的距离跟200km比较,如果大于200km而且能整除的话,整除结果为n,可以在接下来的第n个加油站加油

    '''

    fuel_capacity = float(raw_input("input your fuel box capacity (L):"))

    current_fuel_left_ratio =float(raw_input("input your fuel left ratio now(e.g.0.5):"))

    distance_per_litre=float(raw_input("how far the car can go per L (km):"))

    distance_can_move=(current_fuel_left_ratio*fuel_capacity-5)*distance_per_litre

    print "distance_can_move:",distance_can_move,"km"

    if distance_can_move <=200:

        print "you should add fuel in this petrol station, you can go %s km with the fuel left now "%distance_can_move

    elif distance_can_move >200 and distance_can_move <400:

        print "you can add fuel in next petrol station, you can go %s km with the fuel left now "%distance_can_move

    else:

    print "you can add fuel in next %s station, you can go %s km with the fuel left now"%(int(distance_can_move/200),distance_can_move)

    答案:

    # coding=utf-8

    car_gas_volume = 200
    car_current_gas_volume = 150
    car_100_km_gas_consume = 10
    gas_station_gap_distance=200

    print u"请在第 %s 个加油站加油" %int((car_current_gas_volume-5)/car_100_km_gas_consume*100/gas_station_gap_distance)

    15、现有面包、热狗、番茄酱、芥末酱以及洋葱,数字显示有多少种订购组合,其中面包必订,0不订,1订,比如10000,表示只订购面包

    #-*-encoding:UTF-8-*-

    num=1

    a=u"面包"

    b=u"热狗"

    c=u"番茄酱"

    d=u"芥末酱"

    e=u"洋葱"

    #print a,b,c,d,e

    list = [a,b,c,d,e]

    #print ",".join(list)

    '''

    list1=[]

    for i in range(5):

        list1.append(list[i])

    print ",".join(list1)

    '''

    print "there are %s combinations"%(2**5-2**4)

    for i in range(2**4,2**5):

        list1 = []

        print "combination%s:"%num

        num+=1

        #print bin(i)[2:]

        combination = bin(i)[2:]

        print "combination:",combination

        for i in range(5):

            if combination[i]=="1":

               #print "combination[%s]=1"%i

                list1.append(list[i])

        print "combination:",",".join(list1)

    #print " "

    运行结果:

    答案:

    # coding=utf-8

    bread=["b1"]
    hotdog=["h1","h0"]
    tomato_jam=["t1","t0"]
    jiemo=["j1","j0"]
    onion=["o1","o0"]
    result =[]

    for b in bread:
        for h in hotdog:
            for t in tomato_jam:
                for j in jiemo:
                    for o in onion:
                        result.append(b+" "+h+" "+t+" "+j+" "+o) 

    print len(result)
    print result

    for i in result:
        print i

    16、基于上题:给出每种食物的卡路里(自定义),再计算出每种组合总共的卡路里

    #-*-encoding:UTF-8-*-

    num=1

    a=u"面包"

    b=u"热狗"

    c=u"番茄酱"

    d=u"芥末酱"

    e=u"洋葱"

    list = [a,b,c,d,e]

    calory=[20,30,10,30,25]

    print "there are %s combinations"%(2**5-2**4)

    for i in range(2**4,2**5):

        list1 = []

        list2 = []

        print "combination%s:"%num

        num+=1

        #print bin(i)[2:]

        combination = bin(i)[2:]

        print "combination:",combination

        for i in range(5):

            if combination[i]=="1":

               #print "combination[%s]=1"%i

                list1.append(list[i])

                list2.append(calory[i])

        print "combination:",",".join(list1)

        print "total calory is:",sum(list2)

    答案:

    # coding=utf-8

    bread=["b1"]
    hotdog=["h1","h0"]
    tomato_jam=["t1","t0"]
    jiemo=["j1","j0"]
    onion=["o1","o0"]
    result =[]
    bread_calori=1
    hotdog_calori=2
    tomato_jam_calori=3
    jiemo_calori=4
    onion_calori=5


    for b in bread:
        for h in hotdog:
            for t in tomato_jam:
                for j in jiemo:
                    for o in onion:
                        result.append(b+" "+h+" "+t+" "+j+" "+o) 

    print len(result)
    print result


    for i in result:
        calori_count=0
        for x in i.split():
            if x == "b1":
                calori_count+=bread_calori
            if x =="h1":
                calori_count+=hotdog_calori
            if x == "j1":
                calori_count+=jiemo_calori
            if x =="o1":
                calori_count+=onion_calori 
            if x =="t1":
                calori_count+=tomato_jam_calori 
        print i,u"组合的卡路里总和是:",calori_count,u"千卡"

    同学的答案:

    #coding=utf-8

    ##定义每种食物的热量

    bread_cal=800

    hotdog_cal=1500

    tomato_sauce_cal=800

    mustcard_source_cal=1000

    onion_cal=30

    ##把各个食物的热量存入列表中

    L=[("面包",bread_cal),("热狗",hotdog_cal),("番茄酱",tomato_sauce_cal),("芥末酱",mustcard_source_cal),("洋葱",onion_cal)]

    cal=0

    ##循环食物的每种组合,其中面包必选,因此第一位永远是1

    for i in range(0b0,0b10000):

        j=str('1'+bin(i)[2:].zfill(4))

    ##计算每种组合的热量

        for m in range(len(j)):

            if j[m]=='1':

                cal+=L[m][1]

    ##打印出每种组合,及对应的热量

        print j,cal

        cal=0

    17、输入5个名字,排序后输出

    #-*-encoding:UTF-8-*-

    '''

    name4="abc"

    name2="bcd"

    name5="csf"

    name1="daed"

    name3="erfd"

    '''

    name1=raw_input("input the name1:")

    name2=raw_input("input the name2:")

    name3=raw_input("input the name3:")

    name4=raw_input("input the name4:")

    name5=raw_input("input the name5:")

    list = [name1,name2,name3,name4,name5]

    print "name list is:",",".join(list)

    for i in range(len(list)):

        for j in range(i):

            if list[j] > list[i]:

                list[j], list[i] = list[i], list[j]

    print "sort name list is:",",".join(list)

    答案:

    # coding=utf-8

    name_list=[]
    for i in range(5):
        name_list.append(raw_input("input a name:").strip())


    name_list.sort()
    print name_list

    18、实现一个简单的单词本

    功能:

    可以添加单词和词义,当所添加的单词已存在,让用户知道;

    可以查找单词,当查找的单词不存在时,让用户知道;

    可以删除单词,当删除的单词不存在时,让用户知道;

    以上功能可以无限制操作,直到用户输入bye退出程序。

    #-*-encoding:UTF-8-*-

    '''

    1.创建空字典,循环提示用户选择操作1:新增单词和词义,2:查找单词。3:删除单词4,对出

    2.判断选择,如果是1:新增,提示输入单词,

        判断单词是否存在字典中,如果存在,提示用户已经存在了,如果不存在,继续提示输入词义,

        提示成功消息,显示单词和词义

    3.如果是2查找单词,提示用户输入单词,

        判断单词是否在字典中,如果没有,提示用户没有

        如果有,显示该单词和词义,

    4.如果是3删除单词,提示用户输入要删除的单词,

        判断单词是否在字典中,如果没有提示用户没有该单词

        如果有,删除该单词和词义,提示用户删除成功

    5。如何是4退出,退出循环

    '''

    word_book={"dog":"a kind of pet"}

    operation = True

    while operation:

        choice = int(raw_input(" Select operation: 1: Insert word and meaning 2: Search word 3: Delete word 4: Exit "))

        if choice ==1:#新增单词

            add_word=raw_input("Input the word: ")

            if word_book.has_key(add_word):#如果要新增的单词存在

                print " word book already have word: %s "%add_word#提示单词已经存在

            else:#单词不存在

                add_word_meaning=raw_input("Input the meaning of word %s: " %add_word)#提示输入单词词义

                word_book[add_word]=add_word_meaning#打印该新增单词的内容

                print " You have added the word successfully, %s:" %add_word, word_book[add_word]#提示新增成功,显示单词和词义

            print "word_book:",word_book#打印该新增单词的全部内容

        if choice ==2:#查询单词

            search_word=raw_input("Input the word you want to search: ")#提示输入要查询的单词

            if word_book.has_key(search_word):#单词存在

                print" The meaning of the word %s: %s"%(search_word,word_book[search_word])#打印单词和词义

            else:#单词不存在

                print" Sorry the word you search does not exist!"#提示用户该单词不存在

            print "word_book:",word_book#打印该新增单词的全部内容

        if choice ==3:#删除单词

            del_word=raw_input("Input the word you want to delete: ")#提示输入要删除的单词

            if not(word_book.has_key(del_word)):#要删除的单词不存在

                print" Sorry,the word you want to delete does not exist!"

            else:#单词存在

                del word_book[del_word]#执行删除动作,删除该单词

                print"Deleted the word %s successfully!"%del_word

            print "word_book:",word_book#打印该新增单词的全部内容

        if choice ==4:#退出

            print "bye..."

            exit()

    答案:

    # coding=utf-8

    word_dict = {}

    help = u'''
    1:add a word
    2:find a word meaning
    3: delete a word
    input bye to exit
    '''

    print help

    while 1:
        command = raw_input("please input your command:")
        if command ==str(1):
            word = raw_input("please input your word:")
            word_meaning = raw_input("please input your word meaning:")
            if word_dict.has_key(word):
                continue
            word_dict[word] =word_meaning
        if command ==str(2):
            word = raw_input("please input your word to find:")
            if word_dict.has_key(word):
                print word_dict[word]
                continue
            print "the word is not found!"
        if command == str(3):
            word = raw_input("please input your word to delete:")
            if word_dict.has_key(word):
                del word_dict[word]
                continue
                print "delete is done!"
            print "word to delete is not found!"
        if command == "bye":
            break

    修改:

    # coding=utf-8

    word_dict = {}

    help = u'''
    1:add a word
    2:find a word meaning
    3: delete a word
    input bye to exit
    '''

    print help

    while 1:
        command = raw_input("please input your command:")
        if command ==str(1):
            word = raw_input("please input your word:")
            word_meaning = raw_input("please input your word meaning:")
            if word_dict.has_key(word):
                continue
            word_dict[word] =word_meaning
        if command ==str(2):
            word = raw_input("please input your word to find:")
            if word_dict.has_key(word):
                print word_dict[word]
                continue
            print "the word is not found!"
        if command == str(3):
            word = raw_input("please input your word to delete:")
            if word_dict.has_key(word):
                del word_dict[word]
                print "delete is done!"
                continue
            print "word to delete is not found!"
        if command == "bye":
            break

    19、输入一个正整数,输出其阶乘结果

    #coding=utf-8

    '''

    算法:

    1-输入一个数字,如果不是数字提示重新输入

    2-声明一个变量存阶乘的结果,初始值=1

    3-while循环,条件是输入的数字大于0

    4-循环体内用阶乘结果*输入的数,

    5-然后输入的数-1,每次执行循序的时候,都是阶乘的结果*上次的input number减去1,就是5*4*3*1*1,到1的时候,下次循序就不执行了

    '''

    #捕获异常

    try:

        input_number = int(raw_input("input a number for factorial:"))

    except:

        print "you should input a number!"

    factorial_result =1

    while input_number >0:

        print "input_number:",input_number

        factorial_result*=(input_number)

        print "factorial_result:",factorial_result

        input_number-=1

    print "factorial_result is %s" %factorial_result

    答案:

    # coding=utf-8

    result=1

    for i in range(1,11):
         result*=i

    print result

     

    20、计算存款利息

    4种方法可选:活期,年利率为r1;

    一年期定息,年利率为r2;

    存两次半年期定期,年利率为r3 两年期定息,年利率为r4

    现有本金1000元,请分别计算出一年后按4种方法所得到的本息和。

    提示:本息= 本金+ 本金* 年利率* 存款期

    #coding=utf-8

    '''

    算法:

    声明变量存本金1000元

    活期的本息=本金+本金*r1*一年

    一年期定息的本息=本金+本金*r2*一年

    存两次半年期定息=本金+本金*r3*0.5*2

    存两年期定息:本息=本金+本金*r4*0.5

    '''

    r1=0.03

    r2=0.04

    r3=0.035

    r4=0.045

    principal = 1000

    print u"本金:%s 元" %principal

    print u"利率为:"

    print u"活期利率: %s" %r1

    print u"一年期定息利率:%s" %r2

    print u"存两次半年期定息利率:%s" %r3

    print u"存两年期定息利率:%s" %r4

    print u"一年后活期的本息为:%s 元" %(principal+principal*r1*1)

    print u"一年后一年期定息的本息为:%s 元" %(principal+principal*r2*1)

    print u"一年后存按两次半年期定息的本息为:%s 元" % (principal+principal*r3*0.5*2)

    print u"一年后按存两年期定息的本息为:%s 元" %(principal + principal*r4*0.5)

    答案:

    # coding=utf-8

    r1=0.0035
    r2=0.035
    r3=0.0155
    r4=0.04

    deposit = 1000.0

    print u"一年期活期总收益:%f" %(deposit*(1+r1))
    print u"一年期定期总收益:%s"  %(deposit*(1+r2))
    print u"半年期定期总收益:%s"  %(deposit*(0.5+r3)+deposit*(0.5+r3))
    print u"2年期定期总收益:%s" %(deposit*(1+r4))

     

    21、输入3个数字,以逗号隔开,输出其中最大的数

    >>> a=input("three number seperated by ',' :")

    three number seperated by ',' :1,2,3

    >>> a

    (1, 2, 3)

    >>> max(a)


    答案:

    num_list=raw_input("please input three numbers,sep by ',':")
    num_list=num_list.split(",")
    print max(num_list)

    #coding=utf-8

    num_list=raw_input("please input three numbers,sep by ',':")

    num_list=num_list.split(",")

    a=num_list[0]

    b=num_list[1]

    c=num_list[2]

    max=0

    if a>b:

        max=a

    if max<c:

        max=c

    print c

    降序排序:

    #coding=utf-8

    num_list=raw_input("please input three numbers,sep by ',':")

    num_list=num_list.split(",")

    a=num_list[0]

    b=num_list[1]

    c=num_list[2]

    max=0

    if a>b:

        max=a

    if max<c:

        max=c

    print c

    num_list.remove(max)

    if num_list[0]> num_list[1]:

        print max,  num_list[0], num_list[1]

    else:

    print max,  num_list[1], num_list[0]

    22、输入一个年份,输出是否为闰年是闰年的条件:

    能被4整数但不能被100整除,或者能被400整除的年份都是闰年。

    #coding=utf-8

    year = int(raw_input("input the year:"))

    if (year%4==0) and (year%100 != 0):

       print " %s is leap year" %year

    elif year%400 ==0:

       print "%s is leap year" %year

    else:

       print "%s is not leap year" %year

    答案:

    year = int(raw_input("input a year to judge a leap year:"))

    if (year%4==0 and year %100 !=0) or year %400==0:
        print "%s is a leap year!" %year
    else:
        print "%s is not a leap year!" %year

    23、求两个正整数m和n的最大公约数

    答案:

    # coding=utf-8


    a=20
    b=10

    if a<b:
        c=a
    else:
        c=b

    result =0

    for i in range(1,c+1):
        if a%i ==0  and b%i ==0:
            result=i

    print u"%s 和 %s 的最大公约数:%s" %(a,b,result)        

    优化:

    # coding=utf-8


    a=20
    b=10

    if a<b:
        c=a
    else:
        c=b

    result =0

    for i in range(c,0,-1):
        if a%i ==0  and b%i ==0:
            result=i
            break

    print u"%s 和 %s 的最大公约数:%s" %(a,b,result)        

    统计字符串中包含字母a的个数:

    s="I am a boy!"

    count =0

    for i in s:

        if "a" in i:

            count +=1

    print count

    练习:读入一个学生的考试得分,

    读入一个考试得分,判断这个分数是哪个等级,并输出。

    等级:》=90 优 ,>=80且小于90 良,》=70 且小于80,中,》=60且<70及格 
    《60 不及格

    算法:1 读入一个成绩  2 使用if elif 还有else来判断成绩的等级,并输出

    #-*-encoding:UTF-8-*-

    score = float(raw_input("输入分数:"))

    if score >=90:

        print "优"

    elif score >= 80:

        print "良"

    elif score >=70 and score <80:

        print "中"

    elif score >=60 and score < 70:

        print "及格"

    else:

        print "不及格"

    字符串是小数的情况需要转换一下,

    例如下面这样

    int(float('2.1'))

    打印10以内的偶数:

    >>> for i in range(0,10,2):

    ...     print(i)

    ...

    0

    2

    4

    6

    8

    练习:使用while 循环三次,读入三个单词,并将三个单词拼成一个句子后输出

    result = " "

    looptime =3

    while looptime >=1:

        result = result + raw_input("输入一个单词:")+" "

        looptime -= 1

    print result

    练习:生成一个1到50的大字符串每个数字之间有个空格

    #-*-encoding:UTF-8-*-

    string=[]

    for i in range(1,51):

        string.append(str(i))

    print string

    print " ".join(string)

    吴老师:

    result = ""
    for i in range(1,51,1):
        if i == 50:
            result = result+str(i)
        result = result+str(i)+" "

    print result

    练习:使用while统计的句子中有几个数字

    吴老师:

    content = raw_input("please input a sentence:")

    result = 0

    index =0

    while index<=len(content)-1:

        if content[index] in "0123456789":

             result+=1

        index+=1

    print result

    练习:将一个列表元素倒序存在一个新列表中

    吴老师:

    可以用reverse,或者切片[::-1]

    第三种:

    list1=[1,2,3,4,5]

    list2=[]

    for i in list1:

       list2.insert(0,i)

    print list2

    可以遍历的序列:列表,元祖、字符串

    Python来自蟒蛇飞行马戏命名

    两门语言起步,先学python,然后java

    Python出东西快,java很麻烦,啰唆

    AI,人工智能很多都是用python做的

    CPython的类型:默认是用C写的

    Jpython:可以直接调用java代码

    Ironpython:是.net,或者C#相关的

    >>> import os

    >>> os.sep

    '\'

    >>> os.linesep

    ' '

    >>> os.getcwd() #获取当前路劲

    'c:\Python27\Scripts'

    Eclipse+pydev

    Pycharm

    Sublime

    Notepad++

    写字板、

    练习:加密

    aàe

    bàf

    zàd

    #-*-encoding:UTF-8-*-

    inputnumber=raw_input("input the number:")

    encodenubmer=""

    for i in inputnumber:

        #print ord(i)

        if ord(i)+4  > 122:

            encodenubmer+=chr(ord(i)+4-26)

        elif ord(i)+4  > 90 and ord(i)+4 <97:

            encodenubmer+=chr(ord(i)+4-26)

        else:

            encodenubmer+=chr(ord(i)+4)

    print encodenubmer

     

    吴老:

    letters = raw_input("please input some letter to encode:")
    encoded_letters=""
    for s in letters:
        if (s >= 'a' and s<"w")or(s >= 'A' and s <"W"):
            encoded_letters+=chr(ord(s)+4)
        elif s>="w" and s<="z":
            encoded_letters+=chr(ord(s)-ord("w")+97)
        elif s>="W" and s<="Z":
            encoded_letters+=chr(ord(s)-ord("W")+65)
        else:
            print "some content is not letter!please try again!"
            continue

    print encoded_letters

    练习:转换二进制到十进制

    #-*-encoding:UTF-8-*-

    binary="11111110"

    length =len(binary)

    result = 0

    for i in range(length):

    result += int(binary[i])*pow(2, length-i-1)

        print i,int(binary[i]),pow(2,length-i-1)

    print result

    吴老:

    bianary_number 11100--->第一个数字*2的0次方+第二个数字*2的一次方+第三个数字*2的2次方

    循环5次:

    第一次:index=0,bianary_number[index]=1,1*2**4,result=16

    第二次:index=1,bianary_number[index]=1,1*2**3,result=16+8

    第三次:index=2,bianary_number[index]=1,1*2**2,result=16+8+4

    第四次:index=3,bianary_number[index]=0,0*2**1,result=16+8+4

    第五次:index=4,bianary_number[index]=0,0*2**0,result=16+8+4

    bianary_number="11100"

    length=len(bianary_number)  #求二进制字符串的长度

    result=0  #记录10进制的计算结果

    index=0   #开始读取的字符串坐标

    while length >0:  #循环,如果长度变为0,则停止循环

        result +=int(bianary_number[index])*pow(2,length-1)

        print index,bianary_number[index],length-1 ,result

        length-=1

        index+=1

    print result

    练习:生成所有的小写字母、大写字母和大小写混合字母

    #-*-encoding:UTF-8-*-

    lowercase=""

    for i in range(97,123):

        lowercase += chr(i)

    print lowercase

    uppercase=""

    for i in range(65,91):

        uppercase += chr(i)

    print uppercase

    mixcase=""

    for i in range(65,91):

        mixcase+=chr(i)+chr(i+32)

    print mixcase

    吴老:

    >>> letters=""

    >>> for s in range(65,65+26):

    ...     letters+=chr(s)+chr(s+32)

    ...

    >>> print letters

    AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz

    >>> 

    a=a+1,这种情况会生成一个临时变量

    a+=1, 这种情况效率会高一点点

    练习:判断一个句子中包含多少个字母:

    1-       先输入句子

    2-       然后确定字母letters,import string,用string.letters

    3-       遍历句子,判断是否是字母,然后变量加1

    4-       遍历之后输出变量

    #-*-encoding:UTF-8-*-

    import string

    sentence = raw_input("input yout sentence")

    letter_nbr=0

    for i in sentence:

        if i in string.letters:

            letter_nbr+=1

    print letter_nbr

    吴老:

    >>> letters=""
    >>> for s in range(65,65+26):
    ...     letters+=chr(s)+chr(s+32)
    ...
    >>> print letters
    >>> content=raw_input("please input a sentence:")
    please input a sentence:I am a boy!
    >>> letter_count=0
    >>> for s in content:
    ...     if s in letters:
    ...         letter_count+=1
    ...
    >>> print letter_count

    练习:生成所有的小写字母、大写字母和大小写混合字母

    #-*-encoding:UTF-8-*-

    lowercase=""

    for i in range(97,123):

        lowercase += chr(i)

    print lowercase

    uppercase=""

    for i in range(65,91):

        uppercase += chr(i)

    print uppercase

    mixcase=""

    for i in range(65,91):

        mixcase+=chr(i)+chr(i+32)

    print mixcase

    吴老:

    >>> letters=""

    >>> for s in range(65,65+26):

    ...     letters+=chr(s)+chr(s+32)

    ...

    >>> print letters

    AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz

    >>> 

    a=a+1,这种情况会生成一个临时变量

    a+=1, 这种情况效率会高一点点

    练习:判断一个句子中包含多少个字母:

    1-    先输入句子

    2-    然后确定字母letters,import string, 用string.letters

    3-    遍历句子,判断是否是字母,然后变量加1

    4-    遍历之后输出变量

    #-*-encoding:UTF-8-*-

    import string

    sentence = raw_input("input yout sentence")

    letter_nbr=0

    for i in sentence:

        if i in string.letters:

            letter_nbr+=1

    print letter_nbr

    吴老:

    >>> letters=""

    >>> for s in range(65,65+26):

    ...     letters+=chr(s)+chr(s+32)

    ...

    >>> print letters

    >>> content=raw_input("please input a sentence:")

    please input a sentence:I am a boy!

    >>> letter_count=0

    >>> for s in content:

    ...     if s in letters:

    ...         letter_count+=1

    ...

    >>> print letter_count

    练习有一个长度是101的数组,存在1~100的数字,有一个是重复的,拿重复的找出来

    #encoding=utf-8

    list=range(101)

    print list

    list[57]=1

    print list

    for i in list:

        if list.count(i)>1:

            print i

    吴老:

    import random

    a=range(100)

    random_num = random.randint(0,99)

    a.insert(random_num,random_num)

    print random_num

    number = [i for i in a if a.count(i)==2]

    print number[0]

    练习2个长度相同的list,一个里面的做字典的key,另一个做value,请写个函数实现

    字典的key不能是可变元素

    #encoding=utf-8

    list1=range(10)

    list2=list1[:]

    def change_to_dict(a,b):

        dict={}

        for i in range(len(a)):

            dict[a[i]]=b[i]

        return dict

    print change_to_dict(list1,list2)

    吴老:

    a=[1,"2",[3,4],(5,6),{7:8}]

    b=[0,1,2,3]

    d={}

    for i in range(len(a)):

    #判断a[i]的类型是否是不变的,字典的key不能是可变元素

        if not isinstance(a[i],(int,float,complex,long,str,unicode,tuple)):

            continue

        else:

            d[a[i]]=b[i]

    print d

    或者

    a=[1,"2",[3,4],(5,6),{7:8}]

    b=[0,1,2,3]

    d={}

    for i in range(len(a)):

        if not isinstance(a[i],(int,float,complex,long,str,unicode,tuple)):

            continue

        else:

            d[a[i]]=b[0]

            del b[0]

    print d

    1、用尽可能多的方法实现liest去重

    1.用

    a=[1,2,2,3,4,5,4]

    b=[]

    for i in a:

        if i not in b:

            b.append(i)

    print b

    2.用集合set去重

    # coding=utf-8

    a=[1,2,2,3,4,5,4]

    print  list(set(a))

    3.用字典的key去重

    a=[1,2,2,3,4,5,4]

    d={}

    for i in a:

        d[i]=None

    print d.keys()

    4.用count

    # coding=utf-8

    a=[1,2,2,2,2,2,2,3,4,5,4]

    for i in a:

        for j in range(a.count(i)-1):

            #print "i: %s j: %s"%(i,j)

            a.remove(i)

            #print "remove i:",i

    print a

    # coding=utf-8

    a=[1,2,2,2,2,2,2,3,4,5,4]

    for i in a:

        print "index[i]:",a.index(i)

        for j in range(a.count(i)-1):

            a.remove(i)

            print a

    print a

    这种方法不行, 因为把列表中当前下标对应的值给删了,引起下标的异常,单不确定

    a=[1,2,2,2,2,2,2,3,4,5,4]

    for i in a:

        if a.count(i)>1:

            a.remove(i)

    print a

    3、实现数学中多项式求和公式的打印

    比如:a6x^6 + a5x^5 + a4x^4 + a3x^3 + a2x^2 + a1x^1 + a0

    # coding=utf-8

    a =[]

    for i in range(6,-1,-1):

        if i == 0:

            a.append("a%s"%i)

        else:

            a.append("a%s*^%s"%(i,i))

    print "+".join(a)

    笨方法:

    # coding=utf-8

    print list(range(1,7))[::-1]

    for i in list(range(1,7))[::-1]:

        print  "a"+str(i)+"*^"+str(i)+'+',

    print "a0"

    吴老:

    吴老:

    # coding=utf-8

    result=[]

    for i in range(6,-1,-1):

        if i == 0:

            result.append("a0")

            break

        result.append("a%sx^%s" %(i,i))

    print "+".join(result)

    4、统计名字列表中,各名字的首字母在名字列表中出现的次数

    # coding=utf-8

    a =['alark','philipu','carry','dererk']

    d={}

    for i in a:

        d[i]="".join(a).count(i[0])

    print d

    或者:

    name_list=['foster',"janet",'jessus','david']

    count_dict={}

    for i in name_list:

        count=0

        for j in name_list:

            if j.count(i[0])>=1:

                 count+=j.count(i[0])

        count_dict[i]=count

    print count_dict

    5、输入三个数,判断是否能构成三角形

    能构成三角形三边关系:三边都大于零两边之和大于第三边,两边之差小于第三边

    # coding=utf-8

    a=int(raw_input("input number a:"))

    b=int(raw_input("input number b:"))

    c=int(raw_input("input number c:"))

    if (a+b > c) and (a-b<c) and (a+c>b) and (a-c<b) and (b+c>a) and (b-c<a)and a>0 and b>0 and c>0:

        print u"是三角形"

    else:

        print u"不是三角形"

    最优解:

    import math
    a,b,c=input("please input three num a,b,c:")
    d=min(a,b,c)
    e=max(a,b,c)
    if d<=0:
        print "error"
    elif (a+b+c)>2*e:
        print U"能组成三角形"
    else:
        print u"不能组成三角形"

     

    6、实现字典的fromkeys方法

    例如: seq = ('name', 'age', 'sex')

    dict = dict.fromkeys(seq, 10)

    print "New Dictionary : %s" % str(dict)

    结果:

    New Dictionary : {'age': 10, 'name': 10, 'sex': 10}

    # coding=utf-8

    seq=('name','age','sex')

    dict = {}

    for i in seq:

        dict[i]=10

    print dict

    能被哈希:就是唯一的,不可变的

    {}.fromkeys(['a',’b’])

    这样可以

    >>> {}.fromkeys(['a',’b’])

    {'a': None, 'b': None}

    但是一个list,是不能整体作为字典的key的,因为他可变

    #encoding=utf-8

    import traceback#追踪报错信息

    def f_keys(keys,value=None):

        dict_b={}

        if isinstance(keys,(list,tuple,str,set)):

            for i in keys:

                try:

                    hash(i)

                except:

                    print "value %s can not be key of dict,because of: %s" %(i,traceback.format_exc())

                if i not in dict_b:

                    dict_b[i] = value

            return dict_b

        else:

            print "data: %s is not iterable" %repr(keys)

    print f_keys([1,2,3])

    c:Python27Scripts>python task_test.py

    {1: None, 2: None, 3: None}

     

    如果把列表参数中把某个元素替换成一个列表,就会报错,不可哈希

    print f_keys([1,[2,1],2,3])

    c:Python27Scripts>python task_test.py

    value [2, 1] can not be key of dict,because of: Traceback (most recent call last):

      File "task_test.py", line 8, in f_keys

        hash(i)

    TypeError: unhashable type: 'list'

     

    Traceback (most recent call last):

      File "task_test.py", line 18, in <module>

        print f_keys([1,[2,1],2,3])

      File "task_test.py", line 12, in f_keys

        if i not in dict_b:

    TypeError: unhashable type: 'list'

    哈希

     

    这种方法是组合成一个字典,单没有异常处理

    >>> exec('a="".join(["{",":1,".join(["a","b"]),":1}"])')

    >>> 

    >>> print a

    {a:1,b:1}

     

    1、异常处理,我们要保证系统或者方法的健壮性

    2、提示信息要准确

    Eval

    >>> a=raw_input("pls select your choice:")

    pls select your choice:x

    >>> d={"x":"result"}

    >>> d[a]

    'result'

    >>> def result(x):

    ...     return x**2

    ...

    >>> eval(d[a]+"(2)")

    4

    7、键盘读入一字符串,逆序输出

    用推导列表看帮助文档里是否有具体的方法

    >>> [i for i in dir(a) if i.startswith("spli")]

    []

    >>> [i for i in dir(a) if i.startswith("rever")]

    ['reverse']

    1切片

    >>> a

    [4, 3, 2, 1]

    >>> a[::-1]

    [1, 2, 3, 4]

    2Reverse

    >>> a.reverse

    <built-in method reverse of list object at 0x028CE828>

    >>> a

    [4, 3, 2, 1]

    3推导列表

    >>> [a[-i-1] for i in range(len(a))]

    ['g', 'f', 'e', 'd', 'c', 'b', 'a']

    >>> "".join([a[-i-1] for i in range(len(a))])

    'gfedcba'

    装饰器,需要研究一下

    #encoding=utf-8

    a="abcdefg"

    def outer(result):

        def inner(a):

            x=result(a)

            return [a[i] for i in x]

        return inner

    @outer

    def result(a):

        return [-1-1 for i in range(len(a))]

    print result(a)

    while循环

    >>> n=len(a)

    >>> n

    7

    >>> while n>0:

    ...     n-=1

    ...     print a[n]

    ...

    e

    d

    c

    b

    a

    还有

    >>> a

    'abcdefg'

    >>> map(lambda n:a[-n-1],range(len(a)))

    ['g', 'f', 'e', 'd', 'c', 'b', 'a']

    >>> 

    还有

    >>> [a[i] for i in reversed(range(len(a)))]

    ['g', 'f', 'e', 'd', 'c', 'b', 'a']

    >>> list(reversed(range(len(a))))

    [6, 5, 4, 3, 2, 1, 0]

    # coding=utf-8

    input_str=raw_input("input string:")

    print input_str[::-1]

    # coding=utf-8

    input_str=raw_input("input string:")

    list=[]

    for i in input_str[::-1]:

        list.append(i)

    print "".join(list)

     

    8、读入一个整数n,输出n的阶乘

    # coding=utf-8

    number=input("input a int number:")

    result=1

    for i in range(1,number+1):

        result *= i

    print result

    另一种:

    >>> "".join(["%s*" % i for i in range(1,d+1)])[:-1]

    '1*2*3*4*5*6*7*8*9*10'

    >>> d

    10

    >>> eval("".join(["%s*" % i for i in range(1,d+1)])[:-1])

    3628800

    另一种:

    >>> "*".join([str(i) for i in range(1,d+1)])

    '1*2*3*4*5*6*7*8*9*10'

    >>> eval("*".join([str(i) for i in range(1,d+1)]))

    3628800

    9、打印1/2, 1/3, 1/4,….1/10

    # coding=utf-8

    list=[]

    for i in range(1,11):

        list.append("1/%s" %i)

    print ",".join(list)

    另一种:

    s=””

    >>> for i in range(1,d+1):

    ...     s+="1/%s," %i

    ...

    >>> s

    '1/1,,1/2,,1/3,,1/4,,1/5,,1/6,,1/7,,1/8,,1/9,,1/10,,1/1,1/2,1/3,1/4,1/5,1/6,1/7,1/8,1/9,1/10,'

    >>> s[:-1]

    '1/1,,1/2,

     

    Str有join方法,center,count

    Li

     

    可哈希的就是唯一的,

     

    >>> a="asdfsdf"

    >>> a.split()

    ['asdfsdf']

    >>> "i am a boy".split()

    ['i', 'am', 'a', 'boy']

    >>> a=[]

    >>> hash("asd")

    -1585925417

    >>> hash("asd")

    -1585925417

    >>>a.extend("asd")

    >>> a

    ['a', 's', 'd']

    >>> a.extend([1,2])

    >>> a

    ['a', 's', 'd', 1, 2]

    >>> 

     

    装饰器方法:

    #coding=utf-8

    def fun(n):

        if n==2:

            return str(1)+"/"+str(n)

        else:

            return fun(n-1)+(","+str(1)+"/"+str(n))

    if __name__=="__main__":

        print fun(10)

    装饰器方法:

    #coding=utf-8

    def deco(fun):

        def _deco(n):

            global result

            result+=fun(n)

        return _deco

    @deco

    def fun(n):

        return str(1)+"/"+str(n)+","

    if __name__=="__main__":

        result=""

        for i in range(2,11):

            fun(i)

    print result[:-1]

    浅拷贝,一层元素会变,二层元素不会变

    深拷贝,一层元素会变,二层元素也会变

    张文琪:

    浅拷贝,对象会变,元素不会变
    深拷贝,对象会变,元素也会变

    >>> a=[1,2,3,[4,5]]

    >>> a

    [1, 2, 3, [4, 5]]

    >>> b=copy.copy(a)

    >>> a

    [1, 2, 3, [4, 5]]

    >>> b

    [1, 2, 3, [4, 5]]

    >>> id(a)

    87626176

    >>> id(b)

    87676328

    >>> a is b

    False

    无论深浅拷贝,拷贝后的两个列表不是一个对象,但是容器里面的元素是一样的

    浅拷贝后,列表a变了,b也跟着便

    深拷贝,列表中的可变对象是有区别的,操作一个,另一个不会受影响

    >>> c=copy.deepcopy(a)

    >>> a

    [1, 2, 3, [4, 5, 5]]

    >>> c

    [1, 2, 3, [4, 5, 5]]

    >>> id(a),id(b)

    (87626176, 87676328)

    >>> id(a[3]),id(c[3])

    (87611032, 87676368)

    >>> id(a),id(c)

    (87626176, 87590512)

    >>> a[3].append(6)

    >>> a

    [1, 2, 3, [4, 5, 5, 6]]

    >>> c

    [1, 2, 3, [4, 5, 5]]

    >>> b

    [1, 2, 3, [4, 5, 5, 6]]

    10.写一个函数实现一个数学公式

    # coding=utf-8

    x,y = input("input two int number x,y:")

    def getpow(x,y):

        result =x**y

        print "result of getpow:",result

    getpow(x,y)

    11.输入数字a,n,如a,4,则打印a+aa+aaa+aaaa之和

    # coding=utf-8

    string = raw_input("input a letter:")

    number = int(raw_input("input a number:"))

    list=[]

    for i in range(1,number+1):

        list.append(string*i)

    print "+".join(list)

    >>> "+".join((lambda n:["a"*i for i in range(1,n+1)])(4))

    'a+aa+aaa+aaaa'

    装饰器:

    装饰器,就是这么个故事,函数a说,我是装饰器啊,其他哪个函数顶着我,我就吃了谁,然后吐出来我的和你的返回结果

    如果你有做过testng的UI自动化,@beforetest,@beformethod,这种都是testng框架的装饰器。包括,我们学的@classmethod,@staticmethod

     

     

    闭包就是一个函数把外部的那些不属于自己的对象也包含(闭合)进来了。

    >>> def x(f):

    ...     print 1

    ...

    >>> @x#等价于x(y)

    ... def y():

    ...     print 2

    ...

    1

    >>> x(y)

    1

    >>> type(x(y))

    1

    <type 'NoneType'>

    >>> x(y)()

    1

    Traceback (most recent call last):

      File "<stdin>", line 1, in <module>

    TypeError: 'NoneType' object is not callable

    >>> 

    不执行的话:

    12、求100个随机数之和,随机数要求为0—9的整数

    # coding=utf-8

    import random

    list=[]

    for i in range(100):

        list.append(random.randint(0,9))

    print list

    print sum(list)

    13、要求在屏幕上分别显求1到100之间奇数之和与偶数之和

    # coding=utf-8

    even_sum=0

    odd_sum=0

    print range(1,101)

    for i in range(1,101):

        if i%2 ==0:

            even_sum +=i

        else:

            odd_sum +=i

    print "even sum of 1-100:%s"%even_sum

    print "odd sum of 1-100:%s"%odd_sum

    闻其:

    n3=re.findall(r"(d*[13579]{1})\,",(str(range(1,101))[:-1]+","))
    n4=re.findall(r"(d*[02468]{1})\,",(str(range(1,101))[:-1]+","))
    print (str(range(1,101))[:-1]+",")
    for i in range(3,5):
        print eval('reduce(lambda x,y:int(x)+int(y),n%s)' % i)

    14、输入10个数,并显示最大的数与最小的数

    # coding=utf-8

    list=[]

    for i in range(10):

        list.append(int(raw_input("input a number total 10 times:")))

    print "the ten numbers are: %s"%list

    print "Max of the numbers is:%s"%max(list)

    print "Min of the numbers is:%s"%min(list)

    闻其:

    print sorted(n)[0],sorted(n)[-1]

     

    15、给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

    # coding=utf-8

    num=input("input a number no more than 5 digits:")

    print "the digits of num is:%s"%(len(str(num)))

    print "descend order of num is:%s"%(str(num)[::-1])

    闻其:

    y=re.search("[1-9]+d*","%s" % x).group(

    print [y[-i] for i in range(1,len(y)+1)]

     

    16、求1000以内的所有水仙花数

    # coding=utf-8

    for i in range(100,1000):

        if int(str(i)[0])**3+int(str(i)[1])**3+int(str(i)[2])**3 == i:

            print i

     

    17、编程求s=1!+2!+3!+…..+n!

     # coding=utf-8

    list=[]

    n=input("input the number:")

    for i in range(1,n+1):

        list.append("%s!"%i)

    print "+".join(list)

    18、钞票换硬币把一元钞票换成一分、二分、五分硬币(每种至少一枚)有多种换法,分别有哪些?

    #coding=utf-8

    import random

    result={}

    num=0

    for i in range(1,20):

        result["5 cent"]=i

        for j in range(1,(100-i*5)/2):

            result["2 cent"]=j

            num+=1

            result["1 cent"]=100-i*5-2*j

            print result,"5cent+2cent:%s" %(i*5+j*2)

    print "there r %s ways to make up 1 yuan"%num

     

    19、自己实现在一句话中查找某个单词的算法,存在返回索引号,否则返回False

    #coding=utf-8

    sentence="i am student of glory road"

    word=raw_input("input a word to find:")

    print sentence.split()

    for i in sentence.split():

        if i==word:

            print "index of the word '%s' is %s" %(word,sentence.split().index(i))

    20、读入一个十进制整数,实现十进制转二进制算法将其转成二进制数要求:不能使用现成进制转换函数,自己写代码实现

    #coding=utf-8

    decimal_num=int(raw_input("input a decimal number:"))

    binary=[]

    flag=True

    while flag:

        binary.append(str(decimal_num%2))

        if decimal_num/2 ==0:

            flag=False

        decimal_num /=2

    print "".join(binary[::-1])

    小练习:读入一组数字,然后把每个数字加一后输出。比如说:123,输出之后是2、3、4

    #-*-coding:utf-8-

    list=[]

    num=raw_input("input a number:")

    for i in num:

        list.append(str(int(i)+1))

    print "".join(list)

    算法:
    1 读入一组数据,纯数字,读入之后的类型是字符串
    num = raw_input("input a number:")
    2 将这个数字,拆成每个数字是个独立的元素,循环这个字符串,放到list1里
    list1=[]
    for i in num:
        list1.append(i)
    3 生成一个新的list2,存储结果
    list2=[]
    4 遍历list1的每一个元素,转换为数字类型,然后+1,转换为字符串类型,然后存到list2里面
    for i in list1:
        list2.append(str(int(i)+1))
    5 这个时候List2里面存的都是字符串类型,然后拼接为最后的结果,结果也是字符串,
    转化为int类型。
    print int("".join(list2))

    一行代码解决:

    int("".join(map(lambda x:str(int(x)+1),"123")))

    练习:生成一个随机密码,包含大小写字母,数字定义一个函数,生成一组随机密码,要求大小写组合+数字,10位以上

    算法:

    生成一个4位的随机大写字母

    成成一个3位随机的小写字母

    生成一个3位随机的数字

    把三种取值组合然后打乱

    输出

    #-*-coding:utf-8-

    import random

    import string

    def passwd():

        list1=random.sample(string.uppercase,4)

        list2=random.sample(string.lowercase,3)

        list3=random.sample(string.digits,3)

        pw=list1+list2+list3

        random.shuffle(pw)

        return "".join(pw)

    print passwd()

    吴老:

    1 想办法生成4个随机大写字母的字符串
    import random
    import string
    a=list(string.uppercase)
    random.shuffle(a)
    print a[:4]
    str1=a
    2 想办法生成3个随机小写字母的字符串
    import random
    import string
    a=list(string.lowercase)
    random.shuffle(a)
    print a[:3]
    str2=a
    3 想办法生成3个随机数字的字符串
    import random
    import string
    a=list(string.digits)
    random.shuffle(a)
    print a[:3]
    str3=a
    4 讲前三步的结果,拼接成一个10位的字符串
    result =str1+str2+str3
    5 封装到一个函数里面

    #coding=utf-8

    import random

    import string

    def get_random_password():

        a=list(string.uppercase)

        random.shuffle(a)

        print a[:4]

        str1=a

        a=list(string.lowercase)

        random.shuffle(a)

        print a[:3]

        str2=a

        a=list(string.digits)

        random.shuffle(a)

        print a[:3]

        str3=a

        result =str1+str2+str3

        return "".join(result)

    if __name__ == "__main__":

        print get_random_password()

    优化:

    #coding=utf-8

    import random

    import string

    def get_random_elements(s,length):

        a=list(s)

        random.shuffle(a)

        print a[:length]

        return a[:length]

    def get_random_password():

        return "".join(get_random_elements(string.uppercase,4)+get_random_elements(string.lowercase,3)+get_random_elements

    (string.digits,3))

    #只有单独运行本文件时,才会执行这段代码,如果作为模块导入后,是不会运行的

    if __name__ == "__main__":

    print get_random_password()

    11、画等(腰)边三角形(实心、空心)

    向上实心三角形

    #coding=utf-8

    for i in range(10):

        #print "i:",i

        for j in range(0,10-i):

            #print "j:",j

            print "",

        for k in range(10-i,10):

            #print "k:",k

            print "*",

        print ""

    向下实心三角形

    #coding=utf-8

    for i in range(10):

        #print "i:",i

        for j in range(0,i):

            #print "j:",j

            print "",

        for k in range(i,10):

            #print "k:",k

            print "*",

        print ""

    Degug:

    #coding=utf-8

    for i in range(11):

        print "i:",i

        for j in range(0,11-i):

            print "j:",j,

            print "*",

        for k in range(11-i,11):

            print "k:",k,

            print "$",

        print ""

    空心三角形

    #coding=utf-8

    for i in range(11):

        #print "i:",i

        for j in range(0,11-i):

            #print "j:",j,

            print "",

        for k in range(11-i,11):

            #print "k:",k,

            if i<10:

                 if ((k==11-i) or (k ==10)):

                     print "$",

                 else:

                     print " ",

            else:

                print "$",

        print ""

    1、打印2000-3000之间被7整除但不被5整除的数,以,(逗号)分隔

    #coding=utf-8

    list=[]

    for i in range(2000,3001):

        if (i%7 ==0)and (i%5!=0):

            list.append(str(i))

    print ",".join(list)

    2、输出9*9口诀表

    #coding=utf-8

    for i in range(1,10):

        for j in range(i,10):

            print "%s * %s =%s" %(i,j,i*j)

    3、计算1 - 1/2 + 1/3 - 1/4 + … + 1/99 - 1/100 + …直到最后一项的绝对值小于10的-5次幂为止

    #coding=utf-8

    i=1.0

    n=1.0

    list=["1"]

    while 1/i >1.0/10:

        if i%2==0:

            list.append("+ 1/(%s+1)"%i)

        else:

            list.append("- 1/(%s+1)"%i)

        i+=1

    list.append("...")

    print "".join(list)

    i=1.0

    print "i:%s,n:%s" %(i,n)

    while 1/i >=1/(10e5+1):

        if i%2==0:

            n+=1/(i+1)

        else:

            n+=-1/(i+1)

        i+=1

    print n

    4、编程将类似“China”这样的明文译成密文,密码规律是:用字母表中原来的字母后面第4个字母代替原来的字母,不能改变其大小写,如果超出了字母表最后一个字母则回退到字母表中第一个字母

    #coding=utf-8

    input_letter="abcdwxyzABCDWXYZ"

    print input_letter

    list=[]

    for i in input_letter:

        if i>='a' and i<'w':

            list.append(chr(ord(i)+4))

        if i >='w' and i<='z':

            list.append(chr(ord(i)-26+4))

        if i>='A' and i<'W':

            list.append(chr(ord(i)+4))

        if i >='W' and i<='Z':

            list.append(chr(ord(i)-26+4))

    print "".join(list)

    5、输出以下如下规律的矩阵

    1 2 3 4 5

    2 4 6 8 10

    3 6 9 12 15

    4 8 12 16 20

    #coding=utf-8

    for i in range(1,5):

        a=i

        for j in range(5):

            print i,

            i+=a

        print ""

    6、对一个列表求和,如列表是[4, 3, 6],求和结果是[4, 7, 13],每一项的值都等与该项的值加上前一项的值

    list1=[4,3,6,7,4,2]

    list2=[]

    for i in range(len(list1)):

        if i ==0:

            list2.append(list1[0])

        else:

            list2.append(list1[i]+list1[i-1])

    print list1

    print list2

    7、一个字符串 list,每个元素是 1 个 ip,输出出现次数最多的 ip

    ip_list=['192.168.1.1','192.168.1.2','192.168.1.2','192.168.1.4','192.168.1.4','192.168.1.2','192.168.1.4',]

    count_dict={}

    for i in ip_list:

        count_dict[i] =ip_list.count(i)

    for k,v in count_dict.items():

        if v == max(count_dict.values()):

            print k

    8、打印100以内的素数

    #coding=utf-8

    list=["2"]

    for i in range(3,101):

        for j in range(2,i):

            if i%j ==0:

                break

        else:

            list.append(str(i))

    print " ".join(list)

    9、实现一个简易版的计算器,功能要求:加、减、乘、除,支持多数同时进行计算

    #coding=utf-8

    str=raw_input("input your calculation:")

    print "str:",str

    print "result:",eval(str)

    10、有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和

    #coding=utf-8

    list=[0,1]

    seq=[]

    for i in range(21):

        list.append(list[-1]+list[-2])

    print list[2:]

    for i in range(len(list[2:])-1):

        seq.append("%s/%s"%(list[2:][i+1],list[2:][i]))

    print seq

    print "calculation of:","+".join(seq),"is :"

    print eval("+".join(seq))

    11、画等(腰)边三角形(实心、空心)

    #coding=utf-8

    for i in range(0,10):

        for k in range(10-i):

            print " ",

        for j in range(2*i-1):

            print "$",

        print ""

    #coding=utf-8

    for i in range(0,10):

        for k in range(10-i):

            print " ",

        for j in range(2*i-1):

            if j ==0 or j==(2*i-1-1) or i == 9:

                print "$",

            else:

                print " ",

        print ""

    12、画倒等边三角形

    #coding=utf-8

    for i in range(10,0,-1):

        for k in range(10-i):

            print " ",

        for j in range(2*i-1):

            if j ==0 or j==(2*i-1-1) or i == 10:

                print "$",

            else:

                print " ",

        print ""

    13、画直角三角形(实心、空心)

    #coding=utf-8

    for i in range(10):

        for i in range(10-i):

            print "*",

    print ""

    #coding=utf-8

    for i in range(10):

        for k in range(10-i):

            if i==0 or k==0 or k==(10-i-1):

                print "*",

            else:

                print " ",

        print ""

    14、用*号输出字母C的图案

    print "  "*2,"*"*7

    print "  ","**       *"

    print " ","**"

    print "**"

    print "**"

    print " ","**"

    print "  ","**       *"

    print "  "*2,"*"*7

    15、打印N,口,H图案

    num=0

    for i in range(11):

        for j in range(11):

            if j == 0 or j == 10 or j == num:

                print "*",

            else:

                print " ",

        print ""

        num+=1

    #print "num:",num

    for i in range(11):

        for j in range(11):

            if i == 0 or i == 10 or j==0 or j==10:

                print "*",

            else:

                print " ",

        print ""

    for i in range(11):

        for j in range(11):

            if j==0 or j==10 or i ==5:

                print "*",

            else:

                print " ",

        print ""

    16、打印出如图所示的杨辉三角形,要求可以自定义行数

    #encoding=utf-8

    '''

    分析

    b=[1]

    b = [1] + [b[i] + b[i+1] for i in range(len(b)-1)] + [1]

    b=[1],range(len(b)-1)是空的,

    b=[1,1]

    len(b)-1=1

    range(len(b)-1)=[0]

    i = 0:

        b=[1] + [b[0] + b[1]] + [1]

        b=[1]+[2]+[1]

        b=[1,2,1]

    b=[1,2,1]

    len(b)-1=2

    range(len(b)-1)=range(2)=[0,1]

        [b[i] + b[i+1] for i in range(len(b)-1)]

        =[b[i] + b[i+1] for i in range(2)]

        =[b[0]+b[1],b[1]+b[2]]=[3,3]

    b=[1]+[3,3]+[1]=[1.3.3.1]

    b=[1.3.3.1]

        [b[i] + b[i+1] for i in range(len(b)-1)]

        =[b[i] + b[i+1] for i in range(3)]

        =[b[0]+b[1],b[1]+b[2],+[b[2]+b[3]]]

        =[4,6,4]

    b=[1]+[4,6,4]+[1]

    b=[1,4,6,4,1]

    b=[1,5,10,10,5,1]

    b=[1,6,15,20,15,6,1]

    b=[1,7,21,35,35,21,7,1]

    b=[1,8,28,56,70,56,28,8,1]

    '''

    num=input(u"输入行数:".encode('gbk'))

    def get_max_len(x):

        b=[1]

        for n in range(x):

            b=[1]+[b[i]+b[i+1] for i in range(len(b)-1)]+[1]

            s="   ".join(map(str,b))

            if n==(x-1):

                return len(s)

    print "get_max_len:",get_max_len(num)

    def yanghui(m):

        b=[1]

        max_len=get_max_len(m)

        #print "max len:",max_len

        print '1'.center(max_len, " ")

        #print "m:",m

        for n in range(m):

            #print "n:",n

            b=[1]+[b[i]+b[i+1] for i in range(len(b)-1)]+[1]

            s="   ".join(map(str,b))

            #print "s:",s

            print s.center(max_len," ")

        return " "

    print "yanghui(%s): " %num

    print yanghui(num)

    17、打印如图所示图案,要求支持指定行数,但行数必须是奇数行

    #encoding=utf-8

    #1 1 3 3 5 5 7 7

    def print_icon(m):

        if m%2==1:

            for i in range(1,m+1,2):

                #print i

                print "*  "*i

            for j in range(m-2,0,-2):

                #print j

                print "*  "*j

        else:

            print "the number is not odd"

        return ""

    n=input("input the odd number:")

    print print_icon(n)

    -

    18、要求实现一函数,该函数用于求两个集合的差集,结果集合中包含所有属于第一个集合但不属于第二个集合的元素

    >>> b

    set([1, 2, 3])

    >>> a

    set([1, 2, 3, 4, 5])

    >>> a-b

    set([4, 5])

    >>> a-(a-b)

    set([1, 2, 3])

    >>> 

    19、找出一段句子中最长的单词及其索引位置,以list返回

    #encoding=utf-8

    s="i love you not because of who you are, but because of who i am with you "

    a=s.split()

    d={}

    for i in a:

        d[i]=len(i)

    max_len= max(d.values())

    list=[]

    for i in range(len(a)):

        if len(a[i])==max_len:

            list.append((a[i],i))

    print list

    20、返回序列中的最大数

    #encoding=utf-8

    a=[1,2,3,4,5,6,76,5,3,2,3,6,5,44]

    print a

    print "max of a:",max(a)

    #encoding=utf-8

    a=[1,2,3,4,5,6,76,5,3,2,3,6,5,44]

    b=sorted(a,reverse=True)

    print a

    print b

    print "max of a:", b[0]

    练习题1:操作一个list做增删该查操作(写一个图书管理系统)

    练习题2:完成引用复制和非引用复制的一个例子

    按引用复制:

    a=[1,2,3,['a','b']]

    print "a:",a

    b=a

    print "b:",b

    print "a.append(4):"

    a.append(4)

    print "a:",a

    print "b:",b

    按值拷贝

    #encoding=utf-8

    a=[1,2,3,['a','b']]

    print "a:",a

    b=a[:]

    print "b:",b

    print "a.append(4):"

    a.append(4)

    print "a:",a

    print "b:",b

    练习题3:找到两个列表中不同的元素和相同元素

    #encoding=utf-8

    list1=[1,2,3,4,5,6]

    list2=[5,6,7,8,9,0]

    same_element=[]

    different_element=[]

    for i in list1:

        if i in list2:

            same_element.append(i)

        else:

            different_element.append(i)

    for j in list2:

        if j not in list1:

            different_element.append(j)

    print "same element of two lists are:",same_element

    print "different element of two lists are:",different_element

    练习题4:数字和字母混合的list中,奇数位元素加1,偶数位加2

    练习题5:递归处理嵌套的list

     

    练习题6: 遍历list,但是list中元素的数据类型不定,有可能有嵌套的list,嵌套的tupledict等。(没有多重嵌套)

    练习题7: 通过遍历list去掉重复部分

    练习题81个纯数字的list中,分别输出奇数坐标数字或偶数坐标数字

    练习题9:找到序列中最大的元素,自己写算法实现,不能用现有函数

    练习题10:返回列表中第二大元素

    练习题11:键盘读入一字符串,逆序输出

    练习取0-100内的奇数,存到一个list里面,偶数存到另外一个list里面

    #encoding:utf-8

    list1=[]

    list2=[]

    for i in range(0,100,2):

        list1.append(i)

    print list1

    for i in range(1,100,2):

        list2.append(i)

    print list2

    算法:
    1 声明一个List存储奇数
    2 声明一个list存储偶数
    3 从0-100遍历每个数,判断如果可以被2整除就放到偶数列表,否则放奇数列表
    4 打印两个列表的内容


    #1 声明一个List存储奇数
    odd_list=[]
    #2 声明一个list存储偶数
    even_list=[]
    #3 从0-100遍历每个数,判断如果可以被2整除就放到偶数列表,否则放奇数列表
    for i range(0,101):
        if i %2 ==0:
            even_list.append(i)
        else:
            odd_list.append(i)
    #4 打印两个列表的内容
    print #2 声明一个list存储偶数
    even_list
    print odd_list

    #encoding:utf-8

    odd_list=[]

    even_list=[]

    for i in range(0,101):

        if i%2 ==0:

            even_list.append(i)

        else:

            odd_list.append(i)

    print "odd list:",odd_list

    print "even list:",even_list

     

    1.基础题:

    检验给出的路径是否是一个文件:

    检验给出的路径是否是一个目录:

    判断是否是绝对路径:

    检验给出的路径是否真地存:

    1、匹配一行文字中的所有开头的字母内容

    #coding=utf-8

    import re

    s="i love you not because of who you are, but because of who i am when i am with you"

    content=re.findall(r"w",s)

    print content

    c:Python27Scripts>python task_test.py

    ['i', 'l', 'y', 'n', 'b', 'o', 'w', 'y', 'a', 'b', 'b', 'o', 'w', 'i', 'a', 'w', 'i', 'a', 'w', 'y']

     

    2、匹配一行文字中的所有开头的数字内容

    import re

    s="i love you not because 12sd 34er 56df e4 54434"

    content=re.findall(r"d",s)

    print content

    c:Python27Scripts>python task_test.py

    ['1', '3', '5', '5']

    3、匹配一行文字中的所有开头的数字内容或数字内容

    >>> print re.match(r"w+","123sdf").group()

    123sdf

    4、只匹配包含字母和数字的行

    #coding=utf-8

    import re

    s="i love you not because 12sd 34er 56 df e4 54434"

    content=re.findall(r"w+",s,re.M)

    print content

    c:Python27Scripts>python task_test.py

    ['i', 'love', 'you', 'not', 'because', '12sd', '34er', '56', 'df', 'e4', '54434']

    5、写一个正则表达式,使其能同时识别下面所有的字符串:'bat', 'bit', 'but', 'hat', 'hit', 'hut‘

    import re

    s="'bat', 'bit', 'but', 'hat', 'hit', 'hut"

    content=re.findall(r"..t",s)

    print content

    c:Python27Scripts>python task_test.py

    ['bat', 'bit', 'but', 'hat', 'hit', 'hut']

    6、匹配所有合法的python标识符

    #coding=utf-8

    import re

    s="awoeur awier !@# @#4_-asdf3$^&()+?><dfg$ $"

    content=re.findall(r".*",s,re.DOTALL)

    print s

    print content

    c:Python27Scripts>python task_test.py

    awoeur awier !@# @#4_-asdf3$^&()+?><dfg$

    $

    ['awoeur awier !@# @#4_-asdf3$^&()+?><dfg$ $', '']

    7、提取每行中完整的年月日和时间字段

    #coding=utf-8

    import re

    s="""se234 1987-02-09 07:30:00

        1987-02-10 07:25:00"""

    content=re.findall(r"d{4}-d{2}-d{2} d{2}:d{2}:d{2}",s,re.M)

    print s

    print content

    c:Python27Scripts>python task_test.py

    se234 1987-02-09 07:30:00

        1987-02-10 07:25:00

    ['1987-02-09 07:30:00', '1987-02-10 07:25:00']

    8、将每行中的电子邮件地址替换为你自己的电子邮件地址

    #coding=utf-8

    import re

    s="""693152032@qq.com, werksdf@163.com, sdf@sina.com

        sfjsdf@139.com, soifsdfj@134.com

        pwoeir423@123.com"""

    content=re.sub(r"w+@w+.com","xiaxiaoxu1987@163.com",s)

    print s

    print "_______________________________________"

    print content

    c:Python27Scripts>python task_test.py

    693152032@qq.com, werksdf@163.com, sdf@sina.com

        sfjsdf@139.com, soifsdfj@134.com

        pwoeir423@123.com

    _______________________________________

    xiaxiaoxu1987@163.com, xiaxiaoxu1987@163.com, xiaxiaoxu1987@163.com

        xiaxiaoxu1987@163.com, xiaxiaoxu1987@163.com

        xiaxiaoxu1987@163.com

    9、匹配home关键字:

    >>> re.findall(r"\home","skjdfoijower home   homewer")

    ['\home', '\home']

    1、使用正则提取出字符串中的单词

    #coding=utf-8

    import re

    s="""i love you not because of who 234 you are, 234 but 3234ser because of who i am when i am with you"""

    content=re.findall(r"[a-zA-Z]+",s)

    print content

    c:Python27Scripts>python task_test.py

    ['i', 'love', 'you', 'not', 'because', 'of', 'who', 'you', 'are', 'but', 'because', 'of', 'who', 'i', 'am', 'when', 'i', 'am', 'with', 'you']

    2、使用正则表达式匹配合法的邮件地址:

    import re

    s="""xiasd@163.com, sdlfkj@.com sdflkj@180.com solodfdsf@123.com sdlfjxiaori@139.com saldkfj.com oisdfo@.sodf.com.com"""

    content=re.findall(r"w+@w+.com",s)

    print content

    c:Python27Scripts>python task_test.py

    ['xiasd@163.com', 'sdflkj@180.com', 'solodfdsf@123.com', 'sdlfjxiaori@139.com']

    3、国际域名格式如下:

    域名由各国文字的特定字符集、英文字母、数字及“-”(即连字符或减号)任意组合而成, 但开头及结尾均不能含有“-”,“-”不能连续出现。域名中字母不分大小写。域名最长可达60个字节(包括后缀.com、.net、.org等)。

    4、提取字符串中合法的超链接地址

    比如:s = '<a href="http://www.gloryroad.cn">光荣之路官网</a>'

    要求,给出的正则表达式能兼顾所有链接地址。

    5、统计文件中单词个数

    6、写一个函数,其中用正则验证密码的强度

    7、匹配ip的正则表达式:

    r'^(([1-9]|[1-9]d|1dd|2[0-4]d|25[0-5]).){3}([1-9]|[1-9]d|1dd|2[0-4]d|25[0-5])$'

    >>> re.match(r'^(([1-9]|[1-9]d|1dd|2[0-4]d|25[0-5]).){3}([1-9]|[1-9]d|1dd|2[0-4]d|25[0-5])$',"10.192.178.11").group()

    '10.192.178.11'

    计算程序执行耗时

    #encoding=utf-8

    import time

    time1= time.time()

    n=2

    for i in range(100000):

        n=n*2

    #print n

    time2=time.time()

    total_time=time2-time1

    print "total time of program:%.2f sec"%total_time

    c:Python27Scripts>python task_test.py

    total time of program:2.94 sec

    2、将时间字符串转换为时间戳

    >>> import time

    >>> time.localtime()

    time.struct_time(tm_year=2018, tm_mon=2, tm_mday=24, tm_hour=19, tm_min=45, tm_sec=24, tm_wday=5, tm_yday=55, tm_isdst=0)

    >>> time.mktime(time.localtime())

    1519472732.0

    将格式时间字符串转换成时间元组,然后再转换成自定义的时间格式字符串

    >>> time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())

    '2018-02-24 19:46:50'

    >>> str_time=time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())

    >>> str_time

    '2018-02-24 19:49:54'

    >>> time_array=time.strptime(str_time,"%Y-%m-%d %H:%M:%S")

    >>> time_array

    time.struct_time(tm_year=2018, tm_mon=2, tm_mday=24, tm_hour=19, tm_min=49, tm_sec=54, tm_wday=5, tm_yday=55, tm_isdst=-1)

    >>> custome_time=time.strftime("%Y-%m-%d",time_array)

    >>> custome_time

    '2018-02-24'

    4、将当前时间戳转换为指定格式日期

    >>> time_stamp=time.time()

    >>> time_array=time.localtime(time_stamp)

    >>> time_array

    time.struct_time(tm_year=2018, tm_mon=2, tm_mday=24, tm_hour=19, tm_min=58, tm_sec=8, tm_wday=5, tm_yday=55, tm_isdst=0)

    >>> format_time=time.strftime("%Y-%m-%d %H",time_array)

    >>> format_time

    '2018-02-24 19'

    5、创建名称为当前时间(年月日)的目录,在这个目录下创建名称为当前时间(年月日)的txt文件,并且输入内容为“你好”

    #encoding=utf-8

    import time

    import os

    os.chdir("d:\")

    print os.getcwd()

    dir_name=time.strftime("%Y-%m-%d",time.localtime())

    print dir_name

    os.mkdir(dir_name)

    print os.listdir(os.curdir)

    os.chdir(os.getcwd()+dir_name)

    print os.getcwd()

    try:

        fp=open("%s.txt"%dir_name,"w")

    except:

        print "can not"

    fp.write(u"你好".encode("gbk"))

    fp.close()

    with open("%s.txt"%dir_name) as fp:

    print fp.readline()

    c:Python27Scripts>python task_test.py

    d:

    2018-02-25

    ['$RECYCLE.BIN', '.one', '1111111111111.txt', '2018-02-25', '2018-02-252018-02-25.txt', '360Downloads', '360xb0xb2xc8xabxe4xafxc0xc0xc6xf7xcfxc2xd4xd8', '360xc7xfdxb6xafxb4xf3xcaxa6xc4xbfxc2xbc', 'a.jpg', 'a.py', 'a.pyc', 'a.txt', 'b.jpg', 'CitrixReceiverWeb.exe', 'codexx.py', 'codexx.pyc', 'dir', 'error.txt', 'KingsoftData', 'QMDownload', 'QQPCMgr', 'sdffffffffffff.txt', 'sys.txt', 'System Volume Information', 'test', 'test2', 'testfile.txt', 'testfile2.txt', 'time', 'xx.txt', 'xxx.txt', '~$xd3xa2xd3xefxb1xcaxbcxc7.docx', 'xb2xe2xcaxd4xd7xcaxc1xcf', 'xd3xa2xd3xefxb1xcaxbcxc7.docx']

    d:2018-02-25

    你好

    6、获得三天(三小时和三分钟)前的时间方法

    三天前:

    >>> from datetime import *

    >>> today=date.today()

    >>> today

    datetime.date(2018, 2, 25)

    >>> print today-timedelta(days=3)

    2018-02-22

    三小时前

    >>> threeHoursAgo=datetime.datetime.now()-datetime.timedelta(hours=3)

    >>> print str(threeHoursAgo)

    2018-02-25 17:31:41.932000

    >>> print str(threeHoursAgo)[:-7]

    2018-02-25 17:31:41

    三分钟前:

    >>> datetime.datetime.now()

    datetime.datetime(2018, 2, 25, 20, 34, 17, 298000)

    >>> str(datetime.datetime.now())

    '2018-02-25 20:34:25.855000'

    >>> str(datetime.datetime.now())[:-7]

    '2018-02-25 20:34:44'

    >>> threeMinutesAgo=datetime.datetime.now()-datetime.timedelta(minutes=3)

    >>> print str(threeHoursAgo)[:-7]

    2018-02-25 17:31:41

    7、计算昨天和明天的日期

    >>> date.today()

    datetime.date(2018, 2, 25)

    >>> date.today()-timedelta(days=1)

    datetime.date(2018, 2, 24)

    >>> date.today()+timedelta(days=1)

    datetime.date(2018, 2, 26)

    8、使用datetime模块来获取当前的日期和时间

    Import datetime

    >>> date.today()

    datetime.date(2018, 2, 25)

    >>> str(datetime.datetime.now())

    '2018-02-25 20:34:25.855000'

    >>> str(datetime.datetime.now())

    '2018-02-25 20:38:39.643000'

  • 相关阅读:
    [NOI2017]游戏
    [USACO09MAR]Cleaning Up
    [POI2010]Blocks
    [JSOI2011]分特产
    [POI2001]Peaceful Commission
    BZOJ4152 [AMPPZ2014]The Captain
    Luogu P3783 [SDOI2017]天才黑客
    Luogu P3645 [APIO2015]雅加达的摩天楼
    Luogu P1613 跑路
    AGC009E Eternal Average
  • 原文地址:https://www.cnblogs.com/xiaxiaoxu/p/9206397.html
Copyright © 2020-2023  润新知