[PYTHON]python编程100例

题目: 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()

猜你喜欢

转载自blog.csdn.net/yang332233/article/details/81126087
今日推荐