题目: http://www.runoob.com/python/python-100-examples.html
一:
1. 有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
# -*- coding: utf-8 -*-
"""
Created on Thu Jul 19 19:51:08 2018
有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
@author: yhl
"""
L=[]
a=[1,2,3,4]
#for i in range(len(a)):
for val_1 in a:
for val_2 in a:
for val_3 in a:
if(val_1 == val_2 or val_1 == val_3 or val_2 == val_3):
continue;
else:
L.append(str(val_1)+str(val_2)+str(val_3))
print len(L)
print L
答案:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
for i in range(1,5):
for j in range(1,5):
for k in range(1,5):
if( i != k ) and (i != j) and (j != k):
print i,j,k
二:
'''
企业发放的奖金根据利润提成。利润(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,求应发放奖金总数?
'''
def fun():
profit = 0
I = input("please input: ")
if(I<=10):
profit = 0.1 * I
elif(I <= 20):
profit = 10 *0.1 + (I - 10)*0.075
elif(I <=40):
profit = 10 * 0.1 + (20 - 10)*0.075 + (I - 20)*0.05
elif(I <= 60):
profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (I - 40)*0.03
elif(I <= 100):
profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (60 - 40)*0.03 + (I - 60)*0.015
else :
profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (60 - 40)*0.03 + (100 - 60)*0.015 + (I -100)*0.01
print "profit=",profit
fun()
一开始写else if 有报错提示,原来python里面是elif这样写的,
#!/usr/bin/python
# -*- coding: UTF-8 -*-
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
看到答案很简洁..我的写法和答案输出不一样,不知道为啥
三:
'''
3:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
'''
def fun_3_t(num):
num_sqrt=int(math.sqrt(num))
if(num == num_sqrt * num_sqrt):
return 1
else:
return 0
def fun_3():
for i in range(1,100000000):
print i
num_1=i+100
num_2=num_1+168
flg_1=fun_3_t(num_1)
flg_2=fun_3_t(num_2)
if(1 == flg_1*flg_2):
print 'find! is ',i
break
fun_3()
输出:21 一开始num_sqrt=int(math.sqrt(num))没有加int 结果是8 因为num_sqrt是10点多
num=108
num_sqrt=math.sqrt(num)
num_squa = num_sqrt * num_sqrt
print num,num_sqrt,num_squa
108 10.3923048454 108.0
答案:
分析
程序分析:
假设该数为 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 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)
四:
'''
4: 输入某年某月某日,判断这一天是这一年的第几天?
'''
def fun_4(year,month,day):
sum = 0
month_day=[0,31,28,31,30,31,30,31,31,30,31,30,31]
if((0 != year % 100 and 0 == year % 100) or (year % 400)):
month_day[2] = 29
if(day > month_day[month] or day < 1 or month > 12 or month < 1):
print "error"
return -1
else:
for n in range(1,month):
sum += month_day[n]
sum += day
return sum
print fun_4(2015,6,7)
#!/usr/bin/python
# -*- coding: UTF-8 -*-
'''
答案
'''
year = int(raw_input('year:\n'))
month = int(raw_input('month:\n'))
day = int(raw_input('day:\n'))
months = (0,31,59,90,120,151,181,212,243,273,304,334)
if 0 < month <= 12:
sum = months[month - 1]
else:
print 'data error'
sum += day
leap = 0
if (year % 400 == 0) or ((year % 4 == 0) and (year % 100 != 0)):
leap = 1
if (leap == 1) and (month > 2):
sum += 1
print 'it is the %dth day.' % sum
五:
'''
输入三个整数x,y,z,请把这三个数由小到大输出。
'''
def fun_5(x,y,z):
L = []
L.append(x)
L.append(y)
L.append(z)
L.sort(reverse=True)
print L
def Bubblesort(L):
for i in range(0,len(L)):
for j in range(i+1,len(L)):
if(L[i] > L[j]):
tmp = L[i]
L[i] = L[j]
L[j] = tmp
print L
def fun_55(x,y,z):
L = []
L.append(x)
L.append(y)
L.append(z)
Bubblesort(L)
def fun_555_quick_sort(L,left,right):
if(left >= right):
return
i = left
j = right
base = L[left]
while(i != j):
while(L[j] >= base and i < j):
j -= 1
while(L[i] <= base and i < j):
i += 1
if(i < j):
tmp = L[i]
L[i] = L[j]
L[j] = tmp
L[left] = L[i]
L[i] = base
fun_555_quick_sort(L,left,i-1)
fun_555_quick_sort(L,i+1,right)
L = [3,1,2]
fun_555_quick_sort(L,0,2)
print L
一开始全忘记了排序的算法,连冒泡算法都不记得了.然后看了下,快速排序算法是看了啊哈算法的那本书的,先用c实现了一下的:
void quick_sort(int *a,int left,int right)
{
if(left >= right)
{
return ;
}
int key = a[left];
int i = left;
int j = right;
while( i != j)
{
while(a[j] >= key && i<j)
{
j--;
}
while(a[i] <= key && i<j)
{
i++;
}
if(i < j)
{
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
if(i == j)
{
a[left] = a[i];
a[i] = key;
}
quick_sort(a,left,i-1);
quick_sort(a,i+1,right);
}
六:
'''
6.斐波那契数列。
'''
def fun_6(n):
L = [1,1]
if(n <= 2):
print L
return
for i in range(2,n):
L.append(L[i-1] + L[i-2]) # L[i] = L[i-1] + L[i-2]
print L
fun_6(10)
一开始写成L[i] = L[i-1] + L[i-2],报错,list assignment index out of range 就是不能这么开辟新的需要用append. 另外看到答案fibs.append(fibs[-1] + fibs[-2]) 这个写法也不错
七:
'''
将一个列表的数据复制到另一个列表中。
'''
def fun_7(L):
L_cp = []
for i in range(0,len(L)):
L_cp.append(L[i])
return L_cp
L = [1,0,2,1,2,3,'yang']
L_cp = fun_7(L)
print L_cp
看到答案好简洁,b= a[:] 经过测试是深拷贝
八:
'''
8:输出 9*9 乘法口诀表。
'''
def fun_8():
for i in range(0,9):
for j in range(0,i+1):
str_1 = str(j+1)+'*'+str(i+1)+'='+str((j+1)*(i+1))
print str_1,
print
fun_8()