#程序分析:请利用数轴来分界,定位。
num =int(input('净利润:'))
x =[10000000,6000000,4000000,2000000,1000000,0]
y =[0.01,0.015,0.03,0.05,0.075,0.1]
z =0for i inrange(0,6):if num > x[i]:
z +=(num-x[i])*y[i]print((num-x[i]*y[i]))
i = x[i]print(z)
3、一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
# 假设该数为 x。# 1、则:x + 100 = n2, x + 100 + 168 = m2# 2、计算等式:m2 - n2 = (m + n)(m - n) = 168# 3、设置: m + n = i,m - n = j,i * j =168,i 和 j 至少一个是偶数# 4、可得: m = (i + j) / 2, n = (i - j) / 2,i 和 j 要么都是偶数,要么都是奇数。# 5、从 3 和 4 推导可知道,i 与 j 均是大于等于 2 的偶数。# 6、由于 i * j = 168, j>=2,则 1 < i < 168 / 2 + 1。# 7、接下来将 i 的所有数字循环计算即可。for i inrange(1,85):if168% i ==0:
j =168/ i;if i > j and(i + j)%2==0and(i - j)%2==0:
m =(i + j)/2
n =(i - j)/2
x = n * n -100print(x)
4、输入某年某月某日,判断这一天是这一年的第几天?
#以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于2时需考虑多加一天:
year =int(input('year:\n'))
month =int(input('month:\n'))
day =int(input('day:\n'))
months =(0,31,59,90,120,151,181,212,243,273,304,334)if0< month <=12:sum= months[month -1]else:print('data error')sum+= day
leap =0if(year %400==0)or((year %4==0)and(year %100!=0)):
leap =1if(leap ==1)and(month >2):sum+=1print('it is the %dth day.'%sum)
5、输入三个整数x,y,z,请把这三个数由小到大输出。
#我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。
l =[]for i inrange(3):
x =int(input('integer:\n'))
l.append(x)
l.sort()print(l)
6、斐波那契数列。
# 程序分析:斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……。# 在数学上,费波那契数列是以递归的方法来定义:# F0 = 0 (n=0)# F1 = 1 (n=1)# Fn = F[n-1]+ F[n-2](n=>2)
F0 =0(n=0)
F1 =1(n=1)
Fn = F[n-1]+ F[n-2](n=>2)#num01deffib(n):
a, b =1,1for i inrange(n -1):
a, b = b, a + b
return a
# 输出了第10个斐波那契数列print(fib(100))#num02# 使用递归deffib(n):if n ==1or n ==2:return1return fib(n -1)+ fib(n -2)# 输出了第10个斐波那契数列print(fib(10))#num03deffib(n):if n ==1:return[1]if n ==2:return[1,1]
fibs =[1,1]for i inrange(2, n):
fibs.append(fibs[-1]+ fibs[-2])return fibs
# 输出前 10 个斐波那契数列print(fib(10))deffib(n):if n==0:return[0]if n==1:return[0,1]
fibs =[0,1]for i inrange(1,n):
fibs.append(fibs[-1]+ fibs[-2])return fibs
print(fib(10))
# 程序分析:兔子的规律为数列1,1,2,3,5,8,13,21....
f1 =1
f2 =1for i inrange(1,22):print('%12ld %12ld'%(f1,f2), end=" ")if(i %3)==0:print('')
f1 = f1 + f2
f2 = f1 + f2
12、判断101-200之间有多少个素数,并输出所有素数。
# 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。
h =0
leap =1from math import sqrt
from sys import stdout
for m inrange(101,201):
k =int(sqrt(m +1))for i inrange(2,k +1):if m % i ==0:
leap =0breakif leap ==1:print('%-4d'% m)
h +=1if h %10==0:print('')
leap =1print('The total is %d'% h)
# 程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。for n inrange(100,1000):
i = n //100
j = n //10%10
k = n %10if n == i*i*i + j*j*j + k*k*k:print(n)
14、将一个正整数分解质因数。例如:输入90,打印出90=233*5。
#程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后#按下述步骤完成:#(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。#(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。#(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。defreduceNum(n):print('{} = '.format(n), end=" ")ifnotisinstance(n,int)or n <=0:print('请输入一个正确的数字 !')
exit(0)elif n in[1]:print('{}'.format(n))while n notin[1]:# 循环保证递归for index inrange(2, n +1):if n % index ==0:
n //= index # n 等于 n//indexif n ==1:print(index )else:# index 一定是素数print('{} *'.format(index), end=" ")break
reduceNum(90)
reduceNum(100)
#程序分析:关键是计算出每一项的值。#number01
Tn =0
Sn =[]
n =int(input('n = '))
a =int(input('a = '))for count inrange(n):
Tn = Tn + a
a = a *10
Sn.append(Tn)print(Tn)
Sn =(reduce(lambda x, y: x + y, Sn))print("计算和为:", Sn)from functools importreduce#number01
Tn =0
Sn =[]
n =int(input('n = '))
a =int(input('a = '))for count inrange(n):
Tn = Tn + a
a = a *10
Sn.append(Tn)print(Tn)
Sn =reduce(lambda x, y: x + y, Sn)print("计算和为:", Sn)
# 程序分析:请参照程序Python 练习实例14。from sys import stdout
for j inrange(2,1001):
k =[]
n =-1
s = j
for i inrange(1, j):if j % i ==0:
n +=1
s -= i
k.append(i)if s ==0:print(j)for i inrange(n):
stdout.write(str(k[i]))
stdout.write(' ')print(k[n])
tour =[]
height =[]
hei =100.0# 起始高度
tim =10# 次数for i inrange(1, tim +1):# 从第二次开始,落地时的距离应该是反弹高度乘以2(弹到最高点再落下)if i ==1:
tour.append(hei)else:
tour.append(2* hei)
hei /=2
height.append(hei)print('总高度:tour = {0}'.format(sum(tour)))print('第10次反弹高度:height = {0}'.format(height[-1]))
for i inrange(ord('x'),ord('z')+1):for j inrange(ord('x'),ord('z')+1):if i != j:for k inrange(ord('x'),ord('z')+1):if(i != k)and(j != k):if(i !=ord('x'))and(k !=ord('x'))and(k !=ord('z')):print('order is a -- %s\t b -- %s\tc--%s'%(chr(i),chr(j),chr(k)))
23、打印出如下图案(菱形):
*************************
#先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重for循环,第一层控制行,第二层控制列。from sys import stdout
for i inrange(4):for j inrange(2- i +1):
stdout.write(' ')for k inrange(2* i +1):
stdout.write('*')print('')for i inrange(3):for j inrange(i +1):
stdout.write(' ')for k inrange(4-2* i +1):
stdout.write('*')print('')
#请抓住分子与分母的变化规律。
a =2.0
b =1.0
s =0for n inrange(1,21):
s += a / b
t = a
a = a + b
b = t
print(s)
25、求1+2!+3!+…+20!的和。
#此程序只是把累加变成了累乘。#方法一
n =0
s =0
t =1for n inrange(1,21):
t *= n
s += t
print('1! + 2! + 3! + ... + 20! = %d'% s)#方法二
s =0
l =range(1,21)defop(x):
r =1for i inrange(1,x +1):
r *= i
return r
s =sum(map(op,l))print('1! + 2! + 3! + ... + 20! = %d'% s)
#利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。defage(n):if n ==1: c =10else: c = age(n -1)+2return c
print(age(5))
29、给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
#学会分解出每一位数。
x =int(input("请输入一个数:\n"))
a = x //10000
b = x %10000//1000
c = x %1000//100
d = x %100//10
e = x %10if a !=0:print("5 位数:",e,d,c,b,a)elif b !=0:print("4 位数:",e,d,c,b)elif c !=0:print("3 位数:",e,d,c)elif d !=0:print("2 位数:",e,d)else:print("1 位数:",e)
30、一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
a =int(input("请输入一个数字:\n"))
x =str(a)
flag =Truefor i inrange(len(x)//2):if x[i]!= x[-i -1]:
flag =Falsebreakif flag:print("%d 是一个回文数!"% a)else:print("%d 不是一个回文数!"% a)
31、请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
# 用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母。
letter =input("please input:")#while letter != 'Y':if letter =='S':print('please input second letter:')
letter =input("please input:")if letter =='a':print('Saturday')elif letter =='u':print('Sunday')else:print('data error')elif letter =='F':print('Friday')elif letter =='M':print('Monday')elif letter =='T':print('please input second letter')
letter =input("please input:")if letter =='u':print('Tuesday')elif letter =='h':print('Thursday')else:print('data error')elif letter =='W':print('Wednesday')else:print('data error')
32、按相反的顺序输出列表的值。
a =['one','two','three']for i in a[::-1]:print(i)
33、按逗号分隔列表。
L =[1,2,3,4,5]
s1 =','.join(str(n)for n in L)print(s1)
34、练习函数调用。
#使用函数,输出三次 RUNOOB 字符串。defhello_runoob():print('RUNOOB')defhello_runoobs():for i inrange(3):
hello_runoob()if __name__ =='__main__':
hello_runoobs()
# 输出指定范围内的素数# 用户输入数据
lower =int(input("输入区间最小值: "))
upper =int(input("输入区间最大值: "))for num inrange(lower,upper +1):# 素数大于 1if num >1:for i inrange(2,num):if(num % i)==0:breakelse:print(num)
37、对10个数进行排序。
# 可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换,下次类推,即用第二个元素与后8个进行比较,并进行交换。if __name__ =="__main__":
N =10# input dataprint('请输入10个数字:\n')
l =[]for i inrange(N):
l.append(int(input('输入一个数字:\n')))printfor i inrange(N):print(l[i])print# 排列10个数字for i inrange(N -1):min= i
for j inrange(i +1,N):if l[min]> l[j]:min= j
l[i],l[min]= l[min],l[i]print('排列之后:')for i inrange(N):print(l[i])
38、求一个3*3矩阵主对角线元素之和。
#利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。if __name__ =='__main__':
a =[]sum=0.0for i inrange(3):
a.append([])for j inrange(3):
a[i].append(float(input("input num:\n")))for i inrange(3):sum+= a[i][i]print(sum)
39、题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
#首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。if __name__ =='__main__':# 方法一 : 0 作为加入数字的占位符
a =[1,4,6,9,13,16,19,28,40,100,0]print('原始列表:')for i inrange(len(a)):print(a[i])
number =int(input("\n插入一个数字:\n"))
end = a[9]if number > end:
a[10]= number
else:for i inrange(10):if a[i]> number:
temp1 = a[i]
a[i]= number
for j inrange(i +1,11):
temp2 = a[j]
a[j]= temp1
temp1 = temp2
breakprint('排序后列表:')for i inrange(11):print(a[i])
40、将一个数组逆序输出。
#程序分析:用第一个与最后一个交换。if __name__ =='__main__':
a =[9,6,5,4,1]
N =len(a)print(a)for i inrange(len(a)//2):
a[i],a[N - i -1]= a[N - i -1],a[i]print(a)
41、模仿静态变量的用法。
defvarfunc():
var =0print('var = %d'% var)
var +=1if __name__ =='__main__':for i inrange(3):
varfunc()# 类的属性# 作为类的一个属性吧classStatic:
StaticVar =5defvarfunc(self):
self.StaticVar +=1print(self.StaticVar)print(Static.StaticVar)
a = Static()for i inrange(3):
a.varfunc()
42、学习使用auto定义变量的用法。
num =2defautofunc():
num =1print('internal block num = %d'% num)
num +=1for i inrange(3):print('The num = %d'% num)
num +=1
autofunc()
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 矩阵中对应位置的值,相加后放到新矩阵的对应位置中。
X =[[12,7,3],[4,5,6],[7,8,9]]
Y =[[5,8,1],[6,7,3],[4,5,9]]
result =[[0,0,0],[0,0,0],[0,0,0]]# 迭代输出行for i inrange(len(X)):# 迭代输出列for j inrange(len(X[0])):
result[i][j]= X[i][j]+ Y[i][j]for r in result:print(r)
45、统计 1 到 100 之和。
p =0for i inrange(1,101):
tmp += i
print('The sum is %d'% tmp)
46、求输入数字的平方,如果平方运算后小于 50 则退出。
TRUE =1
FALSE =0defSQ(x):return x * x
print('如果输入的数字小于 50,程序将停止运行。')
again =1while again:
num =int(input('请输入一个数字:'))print('运算结果为: %d'%(SQ(num)))if SQ(num)>=50:
again = TRUE
else:
again = FALSE
if __name__ =='__main__':
i =10
j =20if i > j:print('%d 大于 %d'%(i,j))elif i == j:print('%d 等于 %d'%(i,j))elif i < j:print('%d 小于 %d'%(i,j))else:print('未知')
49、使用lambda来创建匿名函数。
MAXIMUM =lambda x,y :(x > y)* x +(x < y)* y
MINIMUM =lambda x,y :(x > y)* y +(x < y)* x
if __name__ =='__main__':
a =10
b =20print('The largar one is %d'% MAXIMUM(a,b))print('The lower one is %d'% MINIMUM(a,b))
50、输出一个随机数。
import random
#生成 10 到 20 之间的随机数print(random.uniform(10,20))