【20】Python100例基础练习(4

发布时间:2019-09-18 07:24:14编辑:auto阅读(1710)

    例16:
    题目:输出指定格式的日期
    方法1:

    import datetime
    
    if __name__ == '__main__':
    
        # 输出今日日期,格式为 dd/mm/yyyy。更多选项可以查看 strftime() 方法
        print(datetime.date.today().strftime('%d/%m/%Y'))
        # 创建日期对象
        miyazakiBirthDate = datetime.date(1941, 1, 5)
        print(miyazakiBirthDate.strftime('%Y/%d/%m'))
        # 日期算术运算
        miyazakiBirthNextDay = miyazakiBirthDate + datetime.timedelta(days=1)
        print(miyazakiBirthNextDay.strftime('%d/%m/%Y'))
        # 日期替换
        miyazakiFirstBirthday = miyazakiBirthDate.replace(year=miyazakiBirthDate.year + 1)
        print(miyazakiFirstBirthday.strftime('%d/%m/%Y'))

    运行结果:
    22/12/2017
    1941/05/01
    06/01/1941
    05/01/1942

    方法2:

    import time
    
    print (time.time())  #Python time time() 返回当前时间的时间戳(1970纪元后经过的浮点秒数)。
    print (time.localtime())  #作用是格式化时间戳为本地的时间。 如果sec参数未输入,则以当前时间为转换标准。 DST (Daylight Savings Time) flag (-1, 0 or 1) 是否是夏令时。
    print (time.asctime())  #函数接受时间元组并返回一个可读的形式为"Tue Dec 11 18:07:14 2008"(2008年12月11日 周二18时07分14秒)的24个字符的字符串。
    print (time.strftime('%Y-%m-%d %H:%M:%S',time.localtime()) )#'2017-06-27 13:00:57'
    运行结果:
    1513952857.059225
    time.struct_time(tm_year=2017, tm_mon=12, tm_mday=22, tm_hour=22, tm_min=27, tm_sec=37, tm_wday=4, tm_yday=356, tm_isdst=0)
    Fri Dec 22 22:27:37 2017
    2017-12-22 22:27:37

    例17
    题目:输入一行字符,分别统计其中的字母,数字,空格和其他字符的个数。
    方法1:

    input=input("输入任意字符: ")
    letters=[]
    spaces=[]
    number=[]
    others=[]
    for i in iter(input):
        if i.isalpha() == True: ###isalpha 检测字符串是否只由字母组成。
            letters.append(i)
        elif i.isspace()==True:  ###检测字符串是否只由空白字符组成
            spaces.append(i)
        elif i.isdigit()==True: ###检查字符串是否有整数组成
            number.append(i)
        else:
            others.append(i)
    print("""
    字母{},个数:{}
    空格{},个数:{}
    数字{},个数:{}
    其它{},个数:{}
    """
    .format(letters,len(letters),spaces,len(spaces),number,len(number),others,len(others)))

    运行结果:
    输入任意字符: 999@@@qqq iii)))

    字母['q', 'q', 'q', 'i', 'i', 'i'],个数:6
    空格[' ', ' ', ' '],个数:3
    数字['9', '9', '9'],个数:3
    其它['@', '@', '@', ')', ')', ')'],个数:6

    方法2:用正则表达

    import re ###正则表达式功能
    def statistics():
        Input=input("输入任意字符:")
        letters=0
        numbers=0
        spaces=0
        others=0
        for i in range(len(Input)): 
            if re.match('\d',Input[i]): #re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
                letters +=1
            elif re.match("[a-zA-Z]",Input[i]):
                numbers +=1
            elif re.match("\s",Input[i]):
                spaces +=1
            else:
                others +=1
        print("""
        字母个数:{}
        数字个数:{}
        空格个数:{}
        其它个数:{}
        """.format(letters,numbers,spaces,others))
    statistics()

    运行结果:
    输入任意字符:qazwsx123#$%^&*()

    字母个数:6
    数字个数:3
    空格个数:2
    其它个数:8

    例18
    题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。
    程序分析:关键计算出每一项的值
    方法1:

    T=0
    S=[]
    n=int(input("n= "))
    m=int(input("m= "))
    for i in range(n):
        T = T+m   ##5,55,555,5555,55555
        m = m * 10 ##50,500,5000,50000
        S.append(T)
        print(T)
    print(S,sum(S))

    运行结果:
    n= 5
    m= 5
    5
    55
    555
    5555
    55555
    [5, 55, 555, 5555, 55555] 61725

    方法2:

    def suman(a, n):
        if n<1:    return []
        s = [a]  ##s=4
        m = 10 
        for i in range(0, n-1):
            s.append(s[i]*m + a)  ###当i=0,s[i]=4 .4*10+4 [4,44],当i=1时,s[i]=44 ,44*10+4 [4,44,444]
        return sum(s), s
    
    print(suman(4,5))

    运行结果:
    (49380, [4, 44, 444, 4444, 44444])


    例19
    题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。
    分析:可以参考例14
    方法:

    for i in range(1,1001):
        summ =0
        for j in range(1,i):
            if i%j==0:
                summ +=j
        if summ ==i :
            print(i)

    运行结果:
    6
    28
    496


    例20:
    题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
    程序分析:下落后反弹为x,下落反弹长度累加等于3x
    方法1:

    def summ(x,y,n):
        L=[]
        for i in range(1,n+1):  #从1开始到11,下落十次
            x *=y ###下落反弹后,弹起来的高度是下落高度的一半
            total=x*3 ###100下落反弹高度是50,x第一次记录五十加上下落高度等于150。所以这里total=x值*3=150
            L.append(total)
        print(x)
        print(sum(L)-x)###sum计算列表值。减去最后一次反弹高度。即为第十次落地时总里程。
        print(L)
    summ(100,0.5,10)

    运行结果:
    0.09765625
    299.609375
    [150.0, 75.0, 37.5, 18.75, 9.375, 4.6875, 2.34375, 1.171875, 0.5859375, 0.29296875]

    方法2:第一次高度先记录,反弹在降落的里程等于2x

    x=int(input("输入高度:"))
    y=int(input("输入反弹次数: "))
    total=[]
    l=[]
    for i in range(1,y+1):  #次反弹数
        if i ==1:  #第一次下落,反弹高度 x*=0.5 记录到l列表
            total.append(x)
        else:
            total.append(x*2) ##反弹在次下落高度是相等的,这里乘以2
        x *=0.5
        l.append(x)
    print(total)
    print(l)
    print("里程累计\033[31;1m{}\033[0mM".format(sum(total)))
    print("第\033[31;1m%s\033[0m反弹高度%s"%(y,l[-1]))

    运行结果:
    输入高度:100
    输入反弹次数: 10
    [100, 100.0, 50.0, 25.0, 12.5, 6.25, 3.125, 1.5625, 0.78125, 0.390625]
    [50.0, 25.0, 12.5, 6.25, 3.125, 1.5625, 0.78125, 0.390625, 0.1953125, 0.09765625]
    里程累计299.609375M
    第10反弹高度0.09765625

    http://runoob.com

关键字