-
day1
-
day2
-
day3
-
day4
-
day5
-
day6
-
day7
-
day8
-
day9
-
day10
-
day11
-
day12
-
day13
-
day14
-
day15
-
day16
-
day17
-
day18
-
day19
-
day20
-
day21
-
day22
-
day23
-
day24
-
day25
-
day26
-
day27
-
day28
-
day39
-
day30
-
day31
day1
line=[]
for i in range(123,433):
a=i%10
b=(i%100)//10
c=(i%1000)//100
if a!=b and b!=c and a!=c and 0<a<5 and 0<b<5 and 0<c<5 :
print (i)
line.append(i)
print('the total is :',len(line))
i = int(raw_input('净利润:'))
arr = [1000000,600000,400000,200000,100000,0]
rat = [0.01,0.015,0.03,0.05,0.075,0.1]
r = 0
for idx in range(0,6):
if i>arr[idx]:
r+=(i-arr[idx])*rat[idx]
print (i-arr[idx])*rat[idx]
i=arr[idx]
print r
for i in range(1,85):
if 168 % i ==0:
j=168/i
if i>j and (i+j)%2==0 and (i-j)%2==0:
m=(i+j)/2
n=(i+j)/2
x=n*n-100
print(x)
year=int(input('请输入年份(数字):'))
month=int(input('请输入月份(数字):'))
day=int(input('请输入哪天(数字):'))
num=0
months=[0,31,59,90,120,151,181,212,243,273,304,334]
if 0<month<=12:
sum=months[month-1]
sum+=day
if (year%400==0) or (year%4==0) and (year%100!=0):
num=1
if num==1:
sum+=1
print('这是'+str(year)+'年的第'+str(sum)+'天。')
else:
print('请输入正确的月份。')
day2
day3
list=[0,1]
i=1
a=0
b=1
while i<=100:
c=a+b
a=b
b=c
i+=1
list.append(c)
print(list)
l = []
for i in range(3):
x = int(input('请输入一个数:'))
l.append(x)
l.sort()
print(l)
day4
题目:将一个列表的数据复制到另一个列表中。
程序分析:使用列表[:]。
a = [1, 2, 3]
b = a[:]
print (b)
a = [1, 2, 3]
b = a.copy()
print (b)
题目:输出 9*9 乘法口诀表。
程序分析:分行与列考虑,共9行9列,i控制行,j控制列。
for i in range(1,10):
print()
for j in range(1,i+1):
print('%d*%d=%d'%(i,j,i*j),end=' ')
day5
题目:暂停一秒输出。
程序分析:使用 time 模块的 sleep() 函数。
import time
print('What is your name?')
time.sleep(1)
print('my name is yyls')
分析:time.sleep可以防止页面没有加载出来,导致想要的内容爬取不出来,也可以防止闪退情况
题目:暂停一秒输出,并格式化当前时间。
import time,datetime
TIME=datetime.datetime.now()
print(TIME)
time.sleep(1)
print(TIME.strftime('%Y.%M.%D %H-%M-%S'))
分析:striftime用于格式化时间,让时间刷新,从而提取当前的时间
day6
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
程序分析:兔子的规律为数列1,1,2,3,5,8,13,21.... 分析这个数组就会发现,这是个斐波那契数列,开始的时候我没有想明白为什么第6个月是8对兔子,其实最开始的那对兔子在第三个月后的每个月都会生一对兔子,第6个月刚好是最开始的那对兔子生出来的小兔子满3个月,所以第六个月时有3对兔子可以生下小兔子,兔子对数+3,以此类推,第7个月+4,第8个月+5等等。。。。
list=[1,1]
a=1
b=1
for i in range(1,15):
c=a+b
a=b
b=c
list.append(c)
print(list)
题目:判断101-200之间有多少个素数,并输出所有素数。
程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数
list=[]
for i in range(101,200):
for j in range(2,i-1):
if i%j==0:
break
else:
list.append(i)
print(list)
这个我之前一直不知道,for也能和else连用,但前提是for循环中含有break,有了break,并没有正常循环完成,如果不满足if里面的条件,就执行else里面的命令,我靠,触及到我的知识盲区了~~~
day7
题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
注意:a的三次方是a**3,不是a^3,啊啊啊,因为这个纠结好久
for i in range(100,1000):
a=int(i/100)
b=int((i-a*100)/10)
c=int(i-a*100-b*10)
if i==a**3+b**3+c**3:
print(i)
题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
a = int(input('请输入要分解的正整数:'))
temp =[]
while a!=1:
for i in range(2,a+1):
if a%i == 0:
temp.append(i)
a = a//i
break
print (temp)
day8
题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
程序分析:程序分析:(a>b) ? a:b 这是条件运算符的基本例子
socre=int(input('请输入分数:'))
if socre>=90:
grade='A'
elif 60<=socre<=89:
grade='B'
elif socre<=60:
grade='C'
print('该同学的等级是'+grade)
题目:输出指定格式的日期。
程序分析:使用 datetime 模块
from datetime import datetime
now=datetime.now()
print(now)
day9
题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
程序分析:利用 while 或 for 语句,条件为输入的字符不为 '\n'。
import string
a=input('请输入一串字符:')
alpha=0
digit=0
space=0
other=0
for i in a:
if i.isalpha():
alpha+=1
elif i.isdigit():
digit+=1
elif i.isspace():
space+=1
else:
other+=1
print(alpha,digit,space,other)
之前没有接触过string这个库,i.isalpha()是表示i中若至少有一个字符并是字母时返回true,i.isdigit()表示i中至少有一个字符并是数字时返回true,i.isspace()表示i中至少有一个字符并是空格时返回true。
题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。
a=int(input('请输入第一个数:'))
b=int(input('请输入有多少数值相加:'))
c=0
d=0
for i in range(1,b+1):
c+=a*10**(i-1)
d+=c
print(d)
day10
题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。
for i in range(1,1001):
sum=0
for j in range(1,i):
if i%j==0:
sum+=j
if sum==i:
print(i)
题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
h=100
sum=0
for i in range(10):
sum+=h
h=h/2
print(sum*2-100,h)
day11
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
注意:第十天只剩下1个,那一个是第九天剩下的,所以循环九次而不是10次。
a=1
for i in range(9):
a=(a+1)*2
print(a)
题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
list=[]
jia=['a','b','c']
yi=['x','y','z']
for i in jia:
for j in yi:
if i=='a' and j=='x' :
pass
elif i=='c' and j=='x':
pass
elif i=='c' and j=='z':
pass
else:
list.append(i+j)
list.remove('ay')
list.remove('by')
list.remove('bz')
print(list)
注意:字典的键值对中键是惟一的,所以不存在一个键对应多个值;字符串可以直接相加:‘a’+‘b’=‘ab’:list中的pop,append都是一次只能传递一个参数
day12
题目:打印出如下图案(菱形):
* *** ***** ******* ***** *** *
def func(lines):
middle,lines=int(lines/2),int(lines/2)*2+1
for i in range(1,lines+1):
empty=abs(i-middle-1)
print(' '*empty,'*'*(2*(middle-empty)+1))
lines=7
func(lines)
源码解析:先定义一个函数,变量为行数,第二行的middle,lines分别表示行数的一半和总行数,因为行数是奇数并且用了int,所以小数部分被舍去,行数等于int(lines/2)*2+1,第三行for循环行数的次数,第四行的empty用了abs,表示绝对值,0<=abs(empty)<=3,因为middle=3,1<=i<=7,所以i-middle-1就可以得出,middle-empty就表示n,n属于(0,3)
注意:*如果是字符串,列表,元祖与一个整数N相乘,返回一个其所有元素重复N次的同类型对象,如:‘*’*3=‘***’
题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
程序分析:请抓住分子与分母的变化规律。
a = 2.0
b = 1.0
s = 0
for n in range(1,21):
s += a / b
t = a
a = a + b
b = t
print (s)
day13
题目:求1+2!+3!+...+20!的和。
程序分析:此程序只是把累加变成了累乘。
sum=0
a=1
for i in range(1,21):
a*=i
sum+=a
print(sum)
题目:利用递归方法求5!。
程序分析:递归公式:fn=fn_1*4!
a=1
for i in range(1,6):
a*=i
print(a)
def fun(i):
sum=0
if i==0:
sum=1
else:
sum=i*fun(i-1)
return sum
print(fun(5))
day14
题目:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
def fun(s,l):
if l==0:
return
print(s[l-1])
fun(s,l-1)
res=input('请输入字符串:')
len=len(res)
fun(res,len)
题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
def age():
n = 10
for i in range(1, 5):
n = n + 2
print("第5个人{0}岁".format(n))
age()
day15
题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
程序分析:学会分解出每一位数。
count=input('请输入一个数:')
len=len(count)
print(len)
for i in range(len-1,-1,-1):
print(count[i])
分析:for i in range(4,-1,-1)的意思是start是4,stop是-1,step是-1,即第0个是4,最后一个是0,倒着来
题目:一个5位数,判断它是不是回文数。即12321是回文数,
num=input('请输入一个五位数:')
if num[0]==num[-1] and num[1]==num[-2]:
print('该数是回文数')
else:
print('该数不是回文数')
个位与万位相同,十位与千位相同
day16
题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母。。
dict={}
dict['m']='Monday'
dict['tu']='Tuesday'
dict['w']='Wednesday'
dict['th']='Thursday'
dict['f']='Firday'
dict['sa']='Saturday'
dict['su']='Sunday'
day=input('请输入星期几的第一个字母:')
if day not in dict:
print('信息不全,请输入第二个字母:')
index=input('')
day+=index
print(dict[day])
else:
print(dict[day])
题目:按相反的顺序输出列表的值。
list=[1,2,3,4,5,6]
for i in range(len(list)-1,-1,-1):
print(list[i])
day17
题目:按逗号分隔列表。
list=[1,2,3,4,5]
a=','.join(str(i) for i in list)
print(a)
题目:练习函数调用。
程序分析:使用函数,输出三次 RUNOOB 字符串。
def fun():
for i in range(3):
print('RUNOOB')
fun()
day18
题目:文本颜色设置。
class colors:
HEADER='\033[95m'
OKBLUE='\033[94m'
OKGREEN='\033[92m'
WARNING='\033[93m'
FAIL='\033[91m'
ENDC='\033[0m'
BOLD='\033[1m'
UNDERLINE='\033[4m'
print(colors.WARNING+'警告的颜色字体'+colors.ENDC)
题目:求100之内的素数
注意:for 和 else 连用时注意他们两是相同的缩进,不是和for里的if相同
list=[]
start=int(input('请输入下限:'))
stop=int(input('请输入上限:'))
for a in range(start,stop+1):
if a>1:
for i in range(2,a):
if (a%i)==0:
break
else:
list.append(a)
print(list)
day19
题目:对10个数进行排序。
程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换,下次类推,即用第二个元素与后8个进行比较,并进行交换。
法一:
list=[]
for i in range(10):
a=int(input('请输入10个数:'))
list.append(a)
list.sort()
print(list)
法二:冒泡排序法:
a=[]
for i in range(10):
a.append(int(input('请输入十个数:')))
print(a)
for i in range(9):
for j in range(i+1,10):
if a[i]>a[j]:
a[i],a[j]=a[j],a[i]
print(a)
题目:求一个3*3矩阵主对角线元素之和。
程序分析:利用双重for循环控制输入二维数组,再将a[i][i]累加后输出
dict={}
for i in range(3):
for j in range(3):
dict[i,j]=int(input('请输入数值:'))
list=[]
for i in dict.keys():
if i[0]==i[1]:
list.append(dict[i])
print(sum(list))
day20
题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置
list=[1,3,5,7,9,11,13]
print(list)
a=int(input('请输入一个数:'))
len=len(list)
if a>list[-1]:
list.append(a)
else:
for i in range(len):
if list[i-1]<a<list[i]:
list.insert(i,a)
print(list)
题目:将一个数组逆序输出。
程序分析:用第一个与最后一个交换。
list=[1,3,2,6,8]
len=len(list)
for i in range(len//2):
list[i],list[len-i-1] = list[len-i-1],list[i]
print(list)
day21
题目:模仿静态变量的用法。
def fun():
var=0
print(var)
var+=1
for i in range(3):
fun()
class static:
staticvar=5
def varfun(self):
self.staticvar+=1
print(self.staticvar)
print(static.staticvar)
a=static()
for i in range(3):
a.varfun()
题目:学习使用auto定义变量的用法。
程序分析:没有auto关键字,使用变量作用域来举例吧
num=2
def autofunc():
num=1
print('internal block num =%d'%num)
num+=1
for i in range(3):
print('the num=%d'%num)
num+=1
autofunc()
day22
题目:模仿静态变量(static)另一案例。
程序分析:演示一个python作用域使用方法
class Num:
nNum = 1
def inc(self):
self.nNum += 1
print ('nNum = %d' % self.nNum)
if __name__ == '__main__':
nNum = 2
inst = Num()
for i in range(3):
nNum += 1
print ('The num = %d' % nNum)
inst.inc()
两个 3 行 3 列的矩阵,实现其对应位置的数据相加,并返回一个新矩阵:
X = [[12,7,3], [4 ,5,6], [7 ,8,9]] Y = [[5,8,1], [6,7,3], [4,5,9]]
程序分析:创建一个新的 3 行 3 列的矩阵,使用 for 迭代并取出 X 和 Y 矩阵中对应位置的值,相加后放到新矩阵的对应位置中。
程序源代码:
dict1={}
dict2={}
dict={}
a=0
x=[12,7,3,4,5,6,7,8,9]
y=[5,8,1,6,7,3,4,5,9]
for i in range(3):
for j in range(3):
dict1[i,j]=x[a]
dict2[i,j]=y[a]
sum=dict1[i,j]+dict2[i,j]
dict[i,j]=sum
a+=1
print(dict)
day23
题目:统计 1 到 100 之和。
sum=0
for i in range(1,101):
sum+=i
print(sum)
题目:求输入数字的平方,如果平方运算后小于 50 则退出。
while True:
num=int(input('请输入一个数:'))
a=num**2
if a>=50:
print('该数的平方是:'+str(a)+',大于50')
else:
print('该数的平方是:'+str(a)+',小于50')
break
day24
题目:两个变量值互换。
x=10
y=20
x,y=y,x
print(x,y)
题目:数字比较。
a,b=input('请输入两个数:').split()
if a>b:
print(str(a)+'较大')
elif a<b:
print(str(b)+'较大')
elif a==b:
print('两者相等')
day25
题目:使用lambda来创建匿名函数。
max=lambda x,y: (x>y)*x-(x<y)*y
min=lambda x,y : (x>y)*y+(x<y)*x
a=10
b=20
print(min(a,b))
题目:输出一个随机数。
import random
a=random.randint(1,50)
b=random.uniform(1,100)
print(a,b)
注意:random是输出随机整数,uniform是输出随机数
day26
题目:学习使用按位与 & 。
a=0
b=3
c=a&b
d=a^b
e=a|b
print(c,d,e)
题目:学习使用按位或 |
a=0
b=3
c=a&b
d=a^b
e=a|b
print(c,d,e)
day27
题目:学习使用按位异或 ^ 。
a=7
b=3
c=a&b
d=a^b
e=a|b
print(c,d,e)
题目:取一个整数a从右端开始的4〜7位。
list=[]
num=''
a=(input('请输入一个数:'))
for i in a:
list.append(i)
for j in [-4,-5,-6,-7]:
num+=list[j]
print(num)
day28
题目:学习使用按位取反~。
b=~7
c=~-8
d=~0
print(b,c,d)
答案依次是-8,7,-1
注意:负数的按位取反是本身加1再取绝对值,正数的按位取反是本身加一然后取负,0的按位取反是-1
题目:画图,学用circle画圆形。
from tkinter import *
canvas=Canvas(width=800,height=600,bg='yellow')
canvas.pack(expand=YES,fill=BOTH)
k=1
j=1
for i in range(0,26):
canvas.create_oval(310-k,250-k,310+k,250+k,width=1)
k+=j
j+=0.3
mainloop()
day29
题目:画图,学用line画直线。
from tkinter import *
Canvas=Canvas(width=300,height=300,bg='green')
Canvas.pack(expand=YES,fill=BOTH)
x0=263
y0=263
x1=275
y1=275
for i in range(19):
Canvas.create_line(x0,y0,x1,y1,width=1,fill='red')
x0-=5
x1+=5
y0-=5
y1+=5
x0=263
y1=275
y1=263
for i in range(21):
Canvas.create_line(x0,y0,x0,y1,fill='red')
x0+=5
y0+=5
y1+=5
mainloop()
题目:画图,学用rectangle画方形。
if __name__ == '__main__':
from Tkinter import *
root = Tk()
root.title('Canvas')
canvas = Canvas(root,width = 400,height = 400,bg = 'yellow')
x0 = 263
y0 = 263
y1 = 275
x1 = 275
for i in range(19):
canvas.create_rectangle(x0,y0,x1,y1)
x0 -= 5
y0 -= 5
x1 += 5
y1 += 5
canvas.pack()
root.mainloop()
day30
题目:画图,综合例子。
程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。。
if __name__ == '__main__':
from tkinter import *
canvas = Canvas(width = 300,height = 300,bg = 'green')
canvas.pack(expand = YES,fill = BOTH)
x0 = 150
y0 = 100
canvas.create_oval(x0 - 10,y0 - 10,x0 + 10,y0 + 10)
canvas.create_oval(x0 - 20,y0 - 20,x0 + 20,y0 + 20)
canvas.create_oval(x0 - 50,y0 - 50,x0 + 50,y0 + 50)
import math
B = 0.809
for i in range(16):
a = 2 * math.pi / 16 * i
x = math.ceil(x0 + 48 * math.cos(a))
y = math.ceil(y0 + 48 * math.sin(a) * B)
canvas.create_line(x0,y0,x,y,fill = 'red')
canvas.create_oval(x0 - 60,y0 - 60,x0 + 60,y0 + 60)
for k in range(501):
for i in range(17):
a = (2 * math.pi / 16) * i + (2 * math.pi / 180) * k
x = math.ceil(x0 + 48 * math.cos(a))
y = math.ceil(y0 + 48 + math.sin(a) * B)
canvas.create_line(x0,y0,x,y,fill = 'red')
for j in range(51):
a = (2 * math.pi / 16) * i + (2* math.pi / 180) * k - 1
x = math.ceil(x0 + 48 * math.cos(a))
y = math.ceil(y0 + 48 * math.sin(a) * B)
canvas.create_line(x0,y0,x,y,fill = 'red')
mainloop()
题目:计算字符串长度。
str=input('请输入一个字符串:')
print(len(str))
day31
题目:打印出杨辉三角形(要求打印出10行如下图)。
if __name__ == '__main__':
a = []
for i in range(10):
a.append([])
for j in range(10):
a[i].append(0)
for i in range(10):
a[i][0] = 1
a[i][i] = 1
for i in range(2,10):
for j in range(1,i):
a[i][j] = a[i - 1][j-1] + a[i - 1][j]
from sys import stdout
for i in range(10):
for j in range(i + 1):
stdout.write(str(a[i][j]))
stdout.write(' ')
print
题目:查找字符串。
str='dcvsdvs'
n='cvf'
print(str.find(n))