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

【思路】:用的不多经常忘,整理了一下参考答案和一些转换

import time
print(time.time()) # 时间戳 1498539133.655
print(time.localtime()) # 时间元祖 tm_year=2017, tm_mon=6, tm_mday=27, tm_hour=12, tm_min=53, tm_sec=16,
tm_wday=1, tm_yday=178, tm_isdst=0
print(time.asctime()) # 时间的一种可读文本形式 'Tue Jun 27 12:53:50 2017'
print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime())) # 按指定文本格式输出时间 '2017-06-27 13:00:57'
st = time.localtime(time.time()) # 时间戳 转化成 时间元祖
st = time.strptime('2018/1/23','%Y/%m/%d') # 时间文本 转化成 时间元祖
date = time.strftime('%Y-%m-%d',st) # 时间元祖 转化成 时间文本 '%Y-%m-%d %H:%M:%S'
print(date) # 前面两条函数配合着用,相当于将时间文本重新格式化。
# 另外我们可以通过datetime模块来计算时间差,例如:
import datetime
dt1 = datetime.datetime.fromtimestamp(1517302458)
print(dt1,type(dt1))
dt2 = datetime.datetime.now()
print(dt2)
print('相差%d天零%.1f个小时'%((dt2-dt1).days,(dt2-dt1).seconds/60/60))
# 注意上面的日期虽然看起来是文本,但实际上是datetime类型的。
# 可以通过时间戳/时间文本转换得到,然后才能进行日期时间计算。
d1 = datetime.datetime.strptime('2017-10-16 19:21:22', '%Y-%m-%d %H:%M:%S')

题目017:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

【思路】:本来想写成这种格式来着

import string
if c in string.ascii_letters: # abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
if c == ' ': # 空格
if c in string.digits: # 0123456789看了参考答案才知道有现成的函数可以用。其实随便哪种都行,甚至直接把一串字母粘上去看起来更直接。
s = input('input a string:\n')
letters,space,digit,others = 0,0,0,0
for c in s:
if c.isalpha():
letters += 1
elif c.isspace():
space += 1
elif c.isdigit():
digit += 1
else:
others += 1
print('char = %d,space = %d,digit = %d,others = %d' % (letters,space,digit,others))

题目018:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。

例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。

【思路】:答案给的解法很多种,但是我还是认为我写的方法最简单。

2+22+222+2222+22222

可以理解为:

20000 + 2*2000 + 3*200 + 4*20 + 5*2

也就是:

1*2*10^4 + 2*2*10^3 + 3*2*10^2 + 4*2*10^1 + 5*2*10^0

所以简单迭代就可以出结果

a = 2
t = 5
num = 0
for i in range(1,t+1):
num+=i*a*(10**(t-i))
print(num)

题目019:一个数如果恰好等于它的因子之和,这个数就称为"完数"。

例如6=1+2+3.编程找出1000以内的所有完数。

【思路】:题意看的不是太懂,于是百度了一下:完数就是除了自身之外的所有约数之和等于他本身。

第一个完全数是6,它有约数1、2、3、6,除去它本身6外,其余3个数相加,1+2+3=6。

第二个完全数是28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4+7+14=28。

终于看懂了题意。

先求出所有约数,然后求和比一下是否相等就行了,没有难度

for num in range(1,1000):
arr = [] for i in range(1,num):
if num%i==0:
arr.append(i)
if sum(arr)==num:
print(num,arr)

题目020:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

【思路】:很简单,没啥说的

total = 0
m = 100 # 第一次落地,经过了一百米
total += m
for i in range(10-1): # 之后9次弹起到落地
m = m/2 # 弹起的高度
total += 2*m # 弹起然后重新落地,一共经过的距离
print(total)
print(m/2)