博文写的太烂了
有学习需求的请参考大佬的学习方针
Python - 100天从新手到大师
https://github.com/jackfrued/Python-100-Days
本文中的题目都摘选自网络,环境为 Python3.6.6。Python爱好者
有许多题目有不同的方法,若觉复杂或轻量 请见谅
# -*- coding: utf-8 -*-
# @Time : 2018/3/23 11:32
# @Author : Admin
# @Email : dobixu@163.com
# @File : 编程语言入门经典100例【Python版】.py
# @Software: PyCharm
#【程序1】
#题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
list=[]
count=0
for a in range(1,5):
for b in range(1,5):
for c in range(1,5):
if a != b and b != c and a != c :
d=a*100+b*10+c
list.append(d)
count +=1
print("一共能组成"+str(count)+"个无重复数字的三位数")
for i in list:
print(i)
#【程序2】
#题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,
#高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;
#60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
lirun=int(input('请输入上月利润(单位:元)'))
arr=[1000000,600000,400000,200000,100000,0]
tc =[0.01,0.015,0.03,0.05,0.075,0.1]
r=0
for i in range(0,6):
if lirun > arr[i]:
r+=(lirun-arr[i])*tc[i]
print((lirun-arr[i])*tc[i])
i=arr[i]
print (int(r))
#【程序3】
#题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问在该数小于1000000的情况下,该数是多少?
#导入math模块,sqrt开根号
#sqrt非负实数的平方根函数原型
import math
a=0
while True:
if math.sqrt(a+100)-int(math.sqrt(a+100))==0 and math.sqrt(a+268)-int(math.sqrt(a+268))==0:
print(a)
if a< 1000000:
a += 1
else:
break
#【程序4】
#题目:输入某年某月某日,判断这一天是这一年的第几天?
date=input("请输入需要判断的日期,格式为yyyy-mm-dd:\n")
yy=int(date[0:4])
mm=int(date[5:7])
dd=int(date[8:10])
count=0
#print(date,yy,mm,dd)
if yy%4==0 and yy%100!=0 or yy%400==0 :
ly=12
month = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
else:
ly=0
month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
#print(ly)
#print(month[0])
for i in range(1,mm):
count+=month[i-1]
#print(str(yy)+"年"count+dd)
print('%s年%s月%s日是该年的第%s天。' % (yy,mm,dd,(count+ dd)))
#【程序5】
#题目:输入三个整数x,y,z,请把这三个数由小到大输出。
#print('判断三个数由小到大输出')
list=[]
count=int(input('请输入要对比的数字数量'))
for i in range(count):
value=input('请输入需要对比的数值')
list.append(value)
for i in range(0,count):
minvalue=min(list)
print(str(minvalue),end=' ')
list.remove(minvalue)
#【程序8】
#题目:输出9*9口诀。
for a in range(1,10):
for b in range(1,a+1):
print(str(b)+'*'+str(a)+'='+str(a*b),end=' ')
print()
#【程序11】
#题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月
# 后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
#分析:兔子数列即著名的斐波那契数列:1、1、2、3、5、8、13、21、34、……
#方法一
# 递归方式实现 生成前N项
month=int(input('请输入你需要统计的总月数'))
lis =[]
asum=0
for i in range(month):
if i ==1 or i==0:
lis.append(1)
#print(lis)
else:
lis.append(lis[i-2]+lis[i-1])
#从第3项开始每项值为前两项值之和
for a in lis :
asum+=a
print(asum)
#方法一
#案例 递归方式实现 生成前20项
lis =[]
for i in range(20):
if i ==0 or i ==1:#第1,2项 都为1
lis.append(1)
else:
lis.append(lis[i-2]+lis[i-1])#从第3项开始每项值为前两项值之和
#【程序12】
#题目:判断101-200之间有多少个素数,并输出所有素数。
#素数:一个数只能被1 和它本身整除,则该数即为素数
b=0
import math
for a in range(101,200):
confirm=False
#若2到a-1的数能被a整除,那么该数就不是素数
for c in range(2,a):
if a%c==0 :
confirm=True
if confirm==False:
print(a)
b+=1
print('101-200之间共'+str(b)+'个素数')
#案例12
from math import sqrt
count=0
def main():
#定义全局变量,否则会认为该变量是本地的导致UnboundLocalError: local variable 'count' referenced before assignment
global count
for i in range(101, 201):
flag = 1
k = int(sqrt(i))
for j in range(2, k + 1):
if i % j == 0:
flag = 0
break
if flag == 1:
count+=1
print('%5d' % (i))
print(count)
if __name__ == "__main__":
main()
#【程序13】
#题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
#date=input("请输入需要判断的日期,格式为yyyy-mm-dd:\n")
#yy=int(date[0:4])
#mm=int(date[5:7])
#dd=int(date[8:10])
for flower in range(100,1000):
flower=str(flower)
a=int(flower[0])
b=int(flower[1])
c=int(flower[2])
if a**3+b**3+c**3==int(flower):
print(flower)
#案例1
for flower in range(100,1000):
#取个位 a=flower%10#取百位
b=int(flower/100)#取十位
c=int(flower/10)%10
if flower==a**3+b**3+c**3:
print(flower)
#案例2
def main():
for i in range(100,1000):
#取个位
a = i%10
#取十位数
c = (int(i/10))%10
#取百位数
b = int(i/100)
if i == a**3+b**3+c**3:
print ("%5d"%(i))
if __name__ == "__main__":
main()
#【程序14】
#题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
#
def main():
n = int(input('Enter a number:'))
print(str(n)+'=',end='')
while n != 1:
#将n值从2开始计算
for i in range(2, n + 1):
if (n % i) == 0:
n =int(n/i)
if n == 1:
print(i)
else:
print('%d*' % (i),end='')
break
if __name__ == "__main__":
main()
#【程序15】
#题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
def main():
while True:
get_cj=int(input('请输入你的成绩:\n'))
if get_cj >= 90:
break
elif get_cj >=60:
print('B')
break
elif get_cj >=0:
print('C')
break
elif ValueError:
print('请输入正确的成绩')
continue
if __name__ == '__main__':
main()
#【程序17】
#题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
import string
def main():
s = input('input a string:')
letter = 0
space = 0
digit = 0
other = 0
for c in s:
if c.isalpha():
letter+=1
elif c.isspace():
space+=1
elif c.isdigit():
digit+=1
else:
other+=1
print('There are %d letters,%d spaces,%d digits and %d other characters in your string.'%(letter,space,digit,other))
if __name__ == '__main__':
main()
#【程序18】
#题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
#aa=a*10+a
#aaa=aa*10+a
a=int(input('请输入一个数字:'))
count=int(input('请输入数字的最大长度:'))
b=a
total=0
for i in range(0,count):
#for j in count-1:
#print(a)
total+=a
#为了让最后一次不输出'+'号
if i ==count-1:
print(a,end='')
else:
print(str(a)+'+',end='')
a=a*10+b
print('='+str(total))
#案例
def main():
basis = int(input("Input the basis number:"))
n = int(input("Input the longest length of number:"))
b = basis
sum = 0
for i in range(0, n):
if i == n - 1:
print("%d " % (basis),)
else:
print("%d +" % (basis),)
sum += basis
basis = basis * 10 + b
print('= %d' % (sum),)
if __name__ == '__main__':
main()
# 【程序19】
#题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程
# 找出1000以内的所有完数
for i in range(1,1001):
count = 0
for j in range(1,i-1):
# 被除数除以除数余0,那么被整除,就将这个值相加,如果这个值加起来等于被除数(也就是因子),那么就将它打印出
if i%j==0:
count+=j
if i == count:
print(i)
#【程序20】
#题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在
# 第10次落地时,共经过多少米?第10次反弹多高?
high=100
total=0
a=int(input('请输出落地的次数'))
if a<=2:
for count in range(1,a+1):
total+=int(high)
high/=2
#print(high)
print('共经过', total, '米')
print('第',a,'次反弹', int(high), '米高')
else:
for count in range(1,a+1):
total+=high
high/=2
#print(high)
print('共经过',total,'米')
print('第',a,'次反弹',high,'米高')
# 【程序21】
#题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个
# 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下
# 的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
#分析每次吃n=n/2-1
total=0
n=1
for count in range(10,0,-1):
print('第',count,'天剩余',n,'个')
n = (n+1)*2
total+=n
print('第',count,'天共摘',n,'个')
#案例
n = 1
for i in range(9,0,-1):
#a<<1相当于a*=2
n = (n+1)<<1
print(n)7
print ((n+1)*2)
#【程序23】
#题目:打印出如下图案(菱形)
# 1
# 3
# 5
# 7
# 5
# 3
# 1
#问题描述:编写程序,使用双循环输出三角形图案。
#问题分析:本程序由图形知,包含5行,即外层循环执行5次,每行内容的由三部分内容组成:空格、星号、回车,分别通过两个for循环和一条print语句实现。代码如下:
n=int(input('please input the largest length'))
#分析:建议先输出1357再考虑7531
#循环n次,打印出n列,1,2,3,4……n
for i in range(1,n+1):
#每次输出n-i的空格 例如输入5则输出4 3 2 1 0的空格
for j in range(n-i):
print(" ",end='')
#每次输出n*2-1的*数
for j in range(1,2*i):
print("*",end='')
#换行
print("")
#循环n次
#如果需要打印菱形就循环n-1次
for i in range(n+1,1,-1):
#每次输入n+1-i的空格数 循环n-1次的空格数
for j in range(n+1-i):
print(" ",end='')
#每次打印出
for j in range(2*(i-1),1,-1):
print("*",end='')
#换行
print('')
#【程序24】
#题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
a=2
b=1
c=0
for i in range(20):
print('第',i+1,'次',a,'/',b,'=',a/b)
c+=a/b
a+=b
b=a-b
print(c)
#【程序25】
#题目:求1+2!+3!+...+20!的和
a=int(input('请输入你需要求到N阶乘的和\n'))
chengjie=1
he=0
for i in range(1,a+1):
if a == 1:
he=1
break
else:
chengjie*=i
print('第',i,'次','阶乘',chengjie)
he+=chengjie
print(he)
【程序26】
题目:利用递归方法求n!。
a=int(input('请输入你所需要求出N的阶乘'))
b=0
def fun(i):
if i == 1:
return 1
# 重点在这儿,如果输入5,每一次return值-1
return i * fun(i - 1)
for i in range(1,a+1):
#每获取到的n!相加
b+=fun(i)
print(b)
【程序27】
题目:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
string = input("请输入一个字符串 :")
#定义一个函数
def f(x):
if x == -1: #当变量的长度是-1时,返回
return ''
else: #否则返回字符串的位置向后移1位,直到变量的长度为-1
#print(string[x])
#返回第x个字符串+返回第x-1个字符串+返回第x-2个字符串直到返回x==-1
return string[x] + f(x-1)
a=(f(len(string)- 1))
print(a)
【程序28】
题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第
3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后
问第一个人,他说是10岁。请问第五个人多大?
def fun(i):
if i==1:
return 10
return fun(i-1)+2
a =int(input('请输入要计算的第几位的年龄'))
print(fun(a))
【程序29】
题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
a=input('请输入一个不多于5位的正整数\n')
def fun(i):
if i== -1:
return ''
return a[i]+fun(i-1)
print('该数为一个',len(a),'位数')
print(a,'的逆序为',fun(len(a)-1))
【程序30】
题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
ans=['Yes','No']
for a in range(10000,100000):
a = str(a)
flag = 0
for j in range(0,2):
if a[j]!=a[4-j]:
flag=1
break
if flag ==0:
print(a)
【程序36】【筛选法】
题目:求100之内的素数
l=[]
for a in range(101):
for b in range(2,a):
if a%b==0 :
break
else:
l.append(a)
print(l)
# 素数又称为质数,它指的是只能被1和它本身整除的整数。其中,1不是素数,任何时候都不用考虑1。
L = [] # 定义一个初始的素数列表
for n in range(2,101): # 循环100以内的素数n,从2开始,0、1不是素数
flag = True # 设置一个标志位,flag = True代表是素数,flag = Flase代表不是素数
for i in range(2,n): # 除以比它小的所有数(不包括1和它本身),看它是否还有其他因数
if n % i == 0:
flag = False # 出现一次余数为0就代表可以除尽,即代表这个数为素数,就可以设置flag = False
break # 只要第一次出现flag = False,就不用继续往下循环,直接退出整个循环(第二层)
if flag == True:
L.append(n) # 当flag = True时代表n为素数,追加到素数列表中
print("100以内的所有素数:",L)
【程序37】
题目:对10个数进行排序(从大到小)
l=[]
for a in range(10):
l.append(int(input('Input a number:\n')))
#可以直接通过sorted按从小到大排序
#print(sorted(l))
#循环9次即能排序出结果
for i in range(9):
#print(i)
for j in range(i+1,10):
if l[i]<l[j]:
temp=l[j]
l[j]=l[i]
l[i]=temp
print(l)
【程序38】
题目:求一个3*3矩阵对角线元素之和
A B C
D E F
G H I
l = []
for i in range(3):
for j in range(3):
l.append(int(input('Input a number:')))
print(l)
s = 0
#取第1位,第5位,第9位
for i in range(3):
s += l[3*i+i]
print (s)