python练习集100题_Python100例基础练习

例16:

题目:输出指定格式的日期

方法1:import datetimeif __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 timeprint (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.059225time.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 20172017-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=0S=[]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), sprint(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:第一次高度先记录,反弹在降落的里程等于2xx=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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值