Python练习题

 

 

博文写的太烂了

有学习需求的请参考大佬的学习方针

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)

 

 

 

 

 

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页