python学习100例 - CSDN
  • Python3 100例 原题地址: http://www.runoob.com/python/python-100-examples.html git地址: https://github.com/RichardFu123/Python100Cases 原例为Python2.7版本 重写过程中有不少是随意发挥的 ...

    Python3 100例

    原题地址:
    http://www.runoob.com/python/python-100-examples.html
    git地址:
    https://github.com/RichardFu123/Python100Cases
    转载请标注:
    https://blog.csdn.net/weixin_41084236/article/details/81564963
    原例为Python2.7版本
    重写过程中有不少是随意发挥的
    重写运行版本:Python3.7
    作者:Shawn

    • 总的来说,并没有什么难度,全部搂了一遍也只花了不到2天时间,其中还有一半以上的时间是用来写文档的。
    • 用来练练手还是凑合的。

    文章目录

    实例001:数字组合

    题目 有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?

    程序分析 遍历全部可能,把有重复的剃掉。

    total=0
    for i in range(1,5):
        for j in range(1,5):
            for k in range(1,5):
                if ((i!=j)and(j!=k)and(k!=i)):
                    print(i,j,k)
                    total+=1
    print(total)
    

    简便方法 用itertools中的permutations即可。

    import itertools
    sum2=0
    a=[1,2,3,4]
    for i in itertools.permutations(a,3):
        print(i)
        sum2+=1
    print(sum2)
    
    

    实例002:“个税计算”

    题目 企业发放的奖金根据利润提成。利润(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,求应发放奖金总数?

    程序分析 分区间计算即可。

    profit=int(input('Show me the money: '))
    bonus=0
    thresholds=[100000,100000,200000,200000,400000]
    rates=[0.1,0.075,0.05,0.03,0.015,0.01]
    for i in range(len(thresholds)):
        if profit<=thresholds[i]:
            bonus+=profit*rates[i]
            profit=0
            break
        else:
            bonus+=thresholds[i]*rates[i]
            profit-=thresholds[i]
    bonus+=profit*rates[-1]
    print(bonus)
    

    实例003:完全平方数

    题目 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

    程序分析 因为168对于指数爆炸来说实在太小了,所以可以直接省略数学分析,用最朴素的方法来获取上限:

    n=0
    while (n+1)**2-n*n<=168:
        n+=1
    
    print(n+1)
    ----------
    
    85
    
    

    思路是:最坏的结果是n的平方与(n+1)的平方刚好差168,由于是平方的关系,不可能存在比这更大的间隙。
    至于判断是否是完全平方数,最简单的方法是:平方根的值小数为0即可。
    结合起来:

    n=0
    while (n+1)**2-n*n<=168:
        n+=1
    
    for i in range((n+1)**2):
        if i**0.5==int(i**0.5) and (i+168)**0.5==int((i+168)**0.5):
            print(i-100)
    

    实例004:这天第几天

    题目 输入某年某月某日,判断这一天是这一年的第几天?

    程序分析 特殊情况,闰年时需考虑二月多加一天:

    def isLeapYear(y):
        return (y%400==0 or (y%4==0 and y%100!=0))
    DofM=[0,31,28,31,30,31,30,31,31,30,31,30]
    res=0
    year=int(input('Year:'))
    month=int(input('Month:'))
    day=int(input('day:'))
    if isLeapYear(year):
        DofM[2]+=1
    for i in range(month):
        res+=DofM[i]
    print(res+day)
    
    

    实例005:三数排序

    题目 输入三个整数x,y,z,请把这三个数由小到大输出。

    程序分析 练练手就随便找个排序算法实现一下,偷懒就直接调函数。

    raw=[]
    for i in range(3):
        x=int(input('int%d: '%(i)))
        raw.append(x)
        
    for i in range(len(raw)):
        for j in range(i,len(raw)):
            if raw[i]>raw[j]:
                raw[i],raw[j]=raw[j],raw[i]
    print(raw)
    
    
    raw2=[]
    for i in range(3):
        x=int(input('int%d: '%(i)))
        raw2.append(x)
    print(sorted(raw2))
    
    

    实例006:斐波那契数列

    题目 斐波那契数列。

    程序分析 斐波那契数列(Fibonacci sequence),从1,1开始,后面每一项等于前面两项之和。图方便就递归实现,图性能就用循环。

    # 递归实现
    def Fib(n):
        return 1 if n<=2 else Fib(n-1)+Fib(n-2)
    print(Fib(int(input())))
        
    # 朴素实现
    target=int(input())
    res=0
    a,b=1,1
    for i in range(target-1):
        a,b=b,a+b
    print(a)
    
    

    实例007:copy

    题目 将一个列表的数据复制到另一个列表中。

    程序分析 使用列表[:],拿不准可以调用copy模块。

    import copy
    a = [1,2,3,4,['a','b']]
    
    b = a					# 赋值
    c = a[:]				# 浅拷贝
    d = copy.copy(a)		# 浅拷贝
    e = copy.deepcopy(a)	# 深拷贝
    
    a.append(5)
    a[4].append('c')
    
    print('a=',a)
    print('b=',b)
    print('c=',c)
    print('d=',d)
    print('e=',e)
    
    ============ RESTART: F:\PyWorkspace\Python100\100examples\007.py ============
    a= [1, 2, 3, 4, ['a', 'b', 'c'], 5]
    b= [1, 2, 3, 4, ['a', 'b', 'c'], 5]
    c= [1, 2, 3, 4, ['a', 'b', 'c']]
    d= [1, 2, 3, 4, ['a', 'b', 'c']]
    e= [1, 2, 3, 4, ['a', 'b']]
    

    实例008:九九乘法表

    题目 输出 9*9 乘法口诀表。

    程序分析 分行与列考虑,共9行9列,i控制行,j控制列。

    for i in range(1,10):
        for j in range(1,i+1):
            print('%d*%d=%2ld '%(i,j,i*j),end='')
        print()
    

    实例009:暂停一秒输出

    题目 暂停一秒输出。

    程序分析 使用 time 模块的 sleep() 函数。

    import time
    for i in range(4):
        print(str(int(time.time()))[-2:])
        time.sleep(1)
    

    实例010:给人看的时间

    题目 暂停一秒输出,并格式化当前时间。

    程序分析 同009.

    import time
    
    for i in range(4):
        print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))
        time.sleep(1)
    

    实例011:养兔子

    题目 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

    程序分析 我认为原文的解法有点扯,没有考虑3个月成熟的问题,人家还是婴儿怎么生孩子?考虑到三个月成熟,可以构建四个数据,其中:一月兔每个月长大成为二月兔,二月兔变三月兔,三月兔变成年兔,成年兔(包括新成熟的三月兔)生等量的一月兔。

    month=int(input('繁殖几个月?: '))
    month_1=1
    month_2=0
    month_3=0
    month_elder=0
    for i in range(month):
        month_1,month_2,month_3,month_elder=month_elder+month_3,month_1,month_2,month_elder+month_3
        print('第%d个月共'%(i+1),month_1+month_2+month_3+month_elder,'对兔子')
        print('其中1月兔:',month_1)
        print('其中2月兔:',month_2)
        print('其中3月兔:',month_3)
        print('其中成年兔:',month_elder)
    

    实例012:100到200的素数

    题目 判断101-200之间有多少个素数,并输出所有素数。

    程序分析 判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。 用else可以进一步简化代码.

    import math
    for i in range(100,200):
        flag=0
        for j in range(2,round(math.sqrt(i))+1):
            if i%j==0:
                flag=1
                break
        if flag:
            continue
        print(i)
    
    
    print('\nSimplify the code with "else"\n')
    
    
    for i in range(100,200):
        for j in range(2,round(math.sqrt(i))+1):
            if i%j==0:
                break
        else:
            print(i)
    

    实例013:所有水仙花数

    题目 打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。

    程序分析 利用for循环控制100-999个数,每个数分解出个位,十位,百位。

    for i in range(100,1000):
        s=str(i)
        one=int(s[-1])
        ten=int(s[-2])
        hun=int(s[-3])
        if i == one**3+ten**3+hun**3:
            print(i)
    

    实例014:分解质因数

    题目 将一个整数分解质因数。例如:输入90,打印出90=233*5。

    程序分析 根本不需要判断是否是质数,从2开始向数本身遍历,能整除的肯定是最小的质数。

    target=int(input('输入一个整数:'))
    print(target,'= ',end='')
    
    if target<0:
        target=abs(target)
        print('-1*',end='')
    
    flag=0
    if target<=1:
        print(target)
        flag=1
    
    
    while True:
        if flag:
            break
        for i in range(2,int(target+1)):
            if target%i==0:
                print("%d"%i,end='')
                if target==i:
                    flag=1
                    break
                print('*',end='')
                target/=i
                break
            
    

    实例015:分数归档

    题目 利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。

    程序分析 用条件判断即可。

    points=int(input('输入分数:'))
    if points>=90:
        grade='A'
    elif points<60:
        grade='C'
    else:
        grade='B'
    print(grade)
    

    实例016:输出日期

    题目 输出指定格式的日期。

    程序分析 使用 datetime 模块。

    import datetime
    print(datetime.date.today())
    print(datetime.date(2333,2,3))
    print(datetime.date.today().strftime('%d/%m/%Y'))
    day=datetime.date(1111,2,3)
    day=day.replace(year=day.year+22)
    print(day)
    

    实例017:字符串构成

    题目 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

    程序分析 利用 while 或 for 语句,条件为输入的字符不为 ‘\n’。

    string=input("输入字符串:")
    alp=0
    num=0
    spa=0
    oth=0
    for i in range(len(string)):
        if string[i].isspace():
            spa+=1
        elif string[i].isdigit():
            num+=1
        elif string[i].isalpha():
            alp+=1
        else:
            oth+=1
    print('space: ',spa)
    print('digit: ',num)
    print('alpha: ',alp)
    print('other: ',oth)
    
    

    实例018:复读机相加

    题目 求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。

    程序分析 用字符串解决。

    a=input('被加数字:')
    n=int(input('加几次?:'))
    res=0
    for i in range(n):
        res+=int(a)
        a+=a[0]
    print('结果是:',res)
    

    实例019:完数

    题目 一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。

    程序分析 将每一对因子加进集合,在这个过程中已经自动去重。最后的结果要求不计算其本身。

    def factor(num):
        target=int(num)
        res=set()
        for i in range(1,num):
            if num%i==0:
                res.add(i)
                res.add(num/i)
        return res
    
    for i in range(2,1001):
        if i==sum(factor(i))-i:
            print(i)
    

    实例020:高空抛物

    题目 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

    程序分析

    high=200.
    total=100
    for i in range(10):
        high/=2
        total+=high
        print(high/2)
    print('总长:',total)
    

    实例021:猴子偷桃

    题目 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。

    程序分析 按规则反向推断:猴子有一个桃子,他偷来一个桃子,觉得不够又偷来了与手上等量的桃子,一共偷了9天。

    peach=1
    for i in range(9):
        peach=(peach+1)*2
    print(peach)
    

    实例022:比赛对手

    题目 两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。

    程序分析 找到条件下不重复的三个对手即可。

    a=set(['x','y','z'])
    b=set(['x','y','z'])
    c=set(['x','y','z'])
    c-=set(('x','z'))
    a-=set('x')
    for i in a:
        for j in b:
            for k in c:
                if len(set((i,j,k)))==3:
                    print('a:%s,b:%s,c:%s'%(i,j,k))
    

    实例023:画菱形

    题目 打印出如下图案(菱形):

        *
       ***
      *****
     *******
      *****
       ***
        *

    程序分析 递归调用即可。

    def draw(num):
        a="*"*(2*(4-num)+1)
        print(a.center(9,' '))
        if num!=1:
            draw(num-1)
            print(a.center(9,' '))
    draw(4)
    

    实例024:斐波那契数列II

    题目 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。

    程序分析 就是斐波那契数列的后一项除以前一项。

    a = 2.0
    b = 1.0
    s = 0
    for n in range(1,21):
        s += a / b
        a,b = a + b,a
    print (s)
    
    

    实例025: 阶乘求和

    题目 求1+2!+3!+…+20!的和。

    程序分析 1+2!+3!+…+20!=1+2(1+3(1+4(…20(1))))

    res=1
    for i in range(20,1,-1):
        res=i*res+1
    print(res)
    

    实例026:递归求阶乘

    题目 利用递归方法求5!。

    程序分析 递归调用即可。

    def factorial(n):
        return n*factorial(n-1) if n>1 else 1
    print(factorial(5))
    

    实例027:递归输出

    题目 利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。

    程序分析 递归真是蠢方法。

    def rec(string):
        if len(string)!=1:
            rec(string[1:])
        print(string[0],end='')
    
    rec(input('string here:'))
    

    实例028:递归求等差数列

    题目 有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?

    程序分析 就一等差数列。

    def age(n):
        if n==1:
            return 10
        return 2+age(n-1)
    print(age(5))
    

    实例029:反向输出

    题目 给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

    程序分析 学会分解出每一位数,用字符串的方法总是比较省事。

    n=int(input('输入一个正整数:'))
    n=str(n)
    print('%d位数'%len(n))
    print(n[::-1])
    

    实例030:回文数

    题目 一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。

    程序分析 用字符串比较方便,就算输入的不是数字都ok。

    n=input("随便你输入啥啦:")
    a=0
    b=len(n)-1
    flag=True
    while a<b:
        if n[a]!=n[b]:
            print('不是回文串')
            flag=False
            break
        a,b=a+1,b-1
    if flag:
        print('是回文串')
    

    实例031:字母识词

    题目 请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。

    程序分析 这里用字典的形式直接将对照关系存好。

    weekT={'h':'thursday',
           'u':'tuesday'}
    weekS={'a':'saturday',
           'u':'sunday'}
    week={'t':weekT,
          's':weekS,
          'm':'monday',
          'w':'wensday',
          'f':'friday'}
    a=week[str(input('请输入第一位字母:')).lower()]
    if a==weekT or a==weekS:
        print(a[str(input('请输入第二位字母:')).lower()])
    else:
        print(a)
    
    

    实例032:反向输出II

    题目 按相反的顺序输出列表的值。

    程序分析 无。

    a = ['one', 'two', 'three']
    print(a[::-1])
    

    实例033:列表转字符串

    题目 按逗号分隔列表。

    程序分析 无。

    L = [1,2,3,4,5]
    print(','.join(str(n) for n in L))
    

    实例034:调用函数

    题目 练习函数调用。

    程序分析 无。

    def hello():
        print('Hello World!')
    def helloAgain():
        for i in range(2):
            hello()
    
    if __name__=='__main__':
        helloAgain()
    

    实例035:设置输出颜色

    题目 文本颜色设置。

    程序分析 无。

    class bcolors:
        HEADER = '\033[95m'
        OKBLUE = '\033[94m'
        OKGREEN = '\033[92m'
        WARNING = '\033[93m'
        FAIL = '\033[91m'
        ENDC = '\033[0m'
        BOLD = '\033[1m'
        UNDERLINE = '\033[4m'
    print(bcolors.WARNING + "警告的颜色字体?" + bcolors.ENDC)
    

    实例036:算素数

    题目 求100之内的素数。

    程序分析 用else执行for循环的奖励代码(如果for是正常完结,非break)。

    lo=int(input('下限:'))
    hi=int(input('上限:'))
    for i in range(lo,hi+1):
        if i > 1:
            for j in range(2,i):
                if (i % j) == 0:
                    break
            else:
                print(i)
    

    实例037:排序

    题目 对10个数进行排序。

    程序分析 同实例005。

    raw=[]
    for i in range(10):
        x=int(input('int%d: '%(i)))
        raw.append(x)
        
    for i in range(len(raw)):
        for j in range(i,len(raw)):
            if raw[i]>raw[j]:
                raw[i],raw[j]=raw[j],raw[i]
    print(raw)
    
    

    实例038:矩阵对角线之和

    题目 求一个3*3矩阵主对角线元素之和。

    程序分析 无。

    mat=[[1,2,3],
         [3,4,5],
         [4,5,6]
        ]
    res=0
    for i in range(len(mat)):
        res+=mat[i][i]
    print(res)
    

    实例039:有序列表插入元素

    题目 有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。

    程序分析 首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。

    lis=[1,10,100,1000,10000,100000]
    n=int(input('insert a number: '))
    lis.append(n)
    for i in range(len(lis)-1):
        if lis[i]>=n:
            for j in range(i,len(lis)):
                lis[j],lis[-1]=lis[-1],lis[j]
            break
    print(lis)
    

    实例040:逆序列表

    题目 将一个数组逆序输出。

    程序分析 依次交换位置,或者直接调用reverse方法。

    lis=[1,10,100,1000,10000,100000]
    for i in range(int(len(lis)/2)):
        lis[i],lis[len(lis)-1-i]=lis[len(lis)-1-i],lis[i]
    print('第一种实现:')
    print(lis)
    
    
    lis=[1,10,100,1000,10000,100000]
    print('第二种实现:')
    lis.reverse()
    print(lis)
    
    

    实例041:类的方法与变量

    题目 模仿静态变量的用法。

    程序分析 构造类,了解类的方法与变量。

    def dummy():
        i=0
        print(i)
        i+=1
    
    class cls:
        i=0
        def dummy(self):
            print(self.i)
            self.i+=1
    
    a=cls()
    for i in range(50):
        dummy()
        a.dummy()
    

    实例042:变量作用域

    题目 学习使用auto定义变量的用法。

    程序分析 python中的变量作用域。

    i=0
    n=0
    def dummy():
        i=0
        print(i)
        i+=1
    def dummy2():
        global n
        print(n)
        n+=1
    print('函数内部的同名变量')
    for j in range(20):
        print(i)
        dummy()
        i+=1
    print('global声明同名变量')
    for k in range(20):
        print(n)
        dummy2()
        n+=10
    

    实例043:作用域、类的方法与变量

    题目 模仿静态变量(static)另一案例。

    程序分析 综合实例041和实例042。

    class dummy:
        num=1
        def Num(self):
            print('class dummy num:',self.num)
            print('global num: ',num)
            self.num+=1
    
    n=dummy()
    num=1
    for i in range(5):
        num*=10
        n.Num()
    

    实例044:矩阵相加

    题目 计算两个矩阵相加。

    程序分析 创建一个新的矩阵,使用 for 迭代并取出 X 和 Y 矩阵中对应位置的值,相加后放到新矩阵的对应位置中。

    X = [[12,7,3],
        [4 ,5,6],
        [7 ,8,9]]
     
    Y = [[5,8,1],
        [6,7,3],
        [4,5,9]]
     
    res=[[0,0,0],
        [0,0,0],
        [0,0,0]]
    for i in range(len(res)):
        for j in range(len(res[0])):
            res[i][j]=X[i][j]+Y[i][j]
    print(res)
    
    

    实例045:求和

    题目 统计 1 到 100 之和。

    程序分析

    res=0
    for i in range(1,101):
        res+=i
    print(res)
    

    实例046:打破循环

    题目 求输入数字的平方,如果平方运算后小于 50 则退出。

    程序分析

    while True:
        try:
            n=float(input('输入一个数字:'))
        except:
            print('输入错误')
            continue
        dn=n**2
        print('其平方为:',dn)
        if dn<50:
            print('平方小于50,退出')
            break
    

    实例047:函数交换变量

    题目 两个变量值用函数互换。

    程序分析

    def exc(a,b):
        return (b,a)
    a=0
    b=10
    a,b=exc(a,b)
    print(a,b)
    

    实例048:数字比大小

    题目 数字比较。

    程序分析

    a=int(input('a='))
    b=int(input('b='))
    if a<b:
        print('a<b')
    elif a>b:
        print('a>b')
    else:
        print('a=b')
    

    实例049:lambda

    题目 使用lambda来创建匿名函数。

    程序分析

    Max=lambda x,y:x*(x>=y)+y*(y>x)
    Min=lambda x,y:x*(x<=y)+y*(y<x)
    
    a=int(input('1:'))
    b=int(input('2:'))
    
    print(Max(a,b))
    print(Min(a,b))
    

    实例050:随机数

    题目 输出一个随机数。

    程序分析 使用 random 模块。

    import random
    print(random.uniform(10,20))
    

    实例051:按位与

    题目 学习使用按位与 & 。

    程序分析 0&0=0; 0&1=0; 1&0=0; 1&1=1。

    a=0o77
    print(a)
    b=a&3
    print(b)
    b=b&7
    print(b)
    

    实例052:按位或

    题目 学习使用按位或 | 。

    程序分析 0|0=0; 0|1=1; 1|0=1; 1|1=1

    a=0o77
    print(a|3)
    print(a|3|7)
    

    实例053:按位异或

    题目 学习使用按位异或 ^ 。

    程序分析 0^0=0; 0^1=1; 1^0=1; 1^1=0

    a=0o77
    print(a^3)
    print(a^3^7)
    

    实例054:位取反、位移动

    题目 取一个整数a从右端开始的4〜7位。

    程序分析 可以这样考虑:
    (1)先使a右移4位。
    (2)设置一个低4位全为1,其余全为0的数。可用(0<<4)
    (3)将上面二者进行&运算。

    a=int(input('输入一个数字: '))
    b=0                 #     0
    b=~b                #     1
    b=b<<4              # 10000
    b=~b                #  1111
    c=a>>4
    d=c&b
    print('a:',bin(a))
    print('b:',bin(b))
    print('c:',bin(c))
    print('d:',bin(d))
    

    实例055:按位取反

    题目 学习使用按位取反~。

    程序分析 ~0=1; ~1=0;

    print(~234)
    print(~~234)
    

    实例056:画圈

    题目 画图,学用circle画圆形。

    程序分析 无。

    from tkinter import *
    canvas=Canvas(width=800,height=600,bg='yellow')
    canvas.pack(expand=YES,fill=BOTH)
    k=1
    j=1
    for i in range(26):
        canvas.create_oval(310-k,250-k,310+k,250+k,width=1)
        k+=j
        j+=0.3
    mainloop()
    

    实例057:画线

    题目 画图,学用line画直线。

    程序分析 无。

    if __name__ == '__main__':
        from tkinter import *
     
        canvas = Canvas(width=300, height=300, bg='green')   
        canvas.pack(expand=YES, fill=BOTH)                  
        x0 = 263
        y0 = 263
        y1 = 275
        x1 = 275
        for i in range(19):
            canvas.create_line(x0,y0,x0,y1, width=1, fill='red')
            x0 = x0 - 5
            y0 = y0 - 5
            x1 = x1 + 5
            y1 = y1 + 5
     
        x0 = 263
        y1 = 275
        y0 = 263
        for i in range(21):
            canvas.create_line(x0,y0,x0,y1,fill = 'red')
            x0 += 5
            y0 += 5
            y1 += 5
     
        mainloop()
    

    实例058:画矩形

    题目 画图,学用rectangle画方形。

    程序分析 无。

    if __name__ == '__main__':
        from tkinter import *
        root = Tk()
        root.title('Canvas')
        canvas = Canvas(root,width = 400,height = 400,bg = 'yellow')
        x0 = 263
        y0 = 263
        y1 = 275
        x1 = 275
        for i in range(19):
            canvas.create_rectangle(x0,y0,x1,y1)
            x0 -= 5
            y0 -= 5
            x1 += 5
            y1 += 5
            
        canvas.pack()
        root.mainloop()
    

    实例059:画图(丑)

    题目 画图,综合例子。

    程序分析 丑。

    if __name__  == '__main__':
        from tkinter import *
        canvas = Canvas(width = 300,height = 300,bg = 'green')
        canvas.pack(expand = YES,fill = BOTH)
        x0 = 150
        y0 = 100
        canvas.create_oval(x0 - 10,y0 - 10,x0 + 10,y0 + 10)
        canvas.create_oval(x0 - 20,y0 - 20,x0 + 20,y0 + 20)
        canvas.create_oval(x0 - 50,y0 - 50,x0 + 50,y0 + 50)
        import math
        B = 0.809
        for i in range(16):
            a = 2 * math.pi / 16 * i
            x = math.ceil(x0 + 48 * math.cos(a))
            y = math.ceil(y0 + 48 * math.sin(a) * B)
            canvas.create_line(x0,y0,x,y,fill = 'red')
        canvas.create_oval(x0 - 60,y0 - 60,x0 + 60,y0 + 60)
        
    
        for k in range(501):
            for i in range(17):
                a = (2 * math.pi / 16) * i + (2 * math.pi / 180) * k
                x = math.ceil(x0 + 48 * math.cos(a))
                y = math.ceil(y0 + 48 + math.sin(a) * B)
                canvas.create_line(x0,y0,x,y,fill = 'red')
            for j in range(51):
                a = (2 * math.pi / 16) * i + (2* math.pi / 180) * k - 1
                x = math.ceil(x0 + 48 * math.cos(a))
                y = math.ceil(y0 + 48 * math.sin(a) * B)
                canvas.create_line(x0,y0,x,y,fill = 'red')
        mainloop()
    

    实例060:字符串长度

    题目 计算字符串长度。

    程序分析 无。

    s='zhangguang101'
    print(len(s))
    

    实例061:杨辉三角

    题目 打印出杨辉三角形前十行。

    程序分析 无。

    def generate(numRows):
        r = [[1]]
        for i in range(1,numRows):
            r.append(list(map(lambda x,y:x+y, [0]+r[-1],r[-1]+[0])))
        return r[:numRows]
    a=generate(10)
    for i in a:
        print(i)
    

    实例062:查找字符串

    题目 查找字符串。

    程序分析 无。

    s1='aabbxuebixuebi'
    s2='ab'
    s3='xue'
    print(s1.find(s2))
    print(s1.find(s3))
    

    实例063:画椭圆

    题目 画椭圆。

    程序分析 使用 tkinter。

    if __name__ == '__main__':
        from tkinter import *
        x = 360
        y = 160
        top = y - 30
        bottom = y - 30
        
        canvas = Canvas(width = 400,height = 600,bg = 'white')
        for i in range(20):
            canvas.create_oval(250 - top,250 - bottom,250 + top,250 + bottom)
            top -= 5
            bottom += 5
        canvas.pack()
        mainloop()
    

    实例064:画椭圆、矩形

    题目 利用ellipse 和 rectangle 画图。。

    程序分析 无。

    if __name__ == '__main__':
        from tkinter import *
        canvas = Canvas(width = 400,height = 600,bg = 'white')
        left = 20
        right = 50
        top = 50
        num = 15
        for i in range(num):
            canvas.create_oval(250 - right,250 - left,250 + right,250 + left)
            canvas.create_oval(250 - 20,250 - top,250 + 20,250 + top)
            canvas.create_rectangle(20 - 2 * i,20 - 2 * i,10 * (i + 2),10 * ( i + 2))
            right += 5
            left += 5
            top += 10
    
        canvas.pack()
        mainloop()
    

    实例065:画组合图形

    题目 一个最优美的图案。

    程序分析 无。

    import math
    from tkinter import *
    
    class PTS:
        def __init__(self):
            self.x = 0
            self.y = 0
    points = []
    
    def LineToDemo():
        screenx = 400
        screeny = 400
        canvas = Canvas(width = screenx,height = screeny,bg = 'white')
    
        AspectRatio = 0.85
        MAXPTS = 15
        h = screeny
        w = screenx
        xcenter = w / 2
        ycenter = h / 2
        radius = (h - 30) / (AspectRatio * 2) - 20
        step = 360 / MAXPTS
        angle = 0.0
        for i in range(MAXPTS):
            rads = angle * math.pi / 180.0
            p = PTS()
            p.x = xcenter + int(math.cos(rads) * radius)
            p.y = ycenter - int(math.sin(rads) * radius * AspectRatio)
            angle += step
            points.append(p)
        canvas.create_oval(xcenter - radius,ycenter - radius,
                           xcenter + radius,ycenter + radius)
        for i in range(MAXPTS):
            for j in range(i,MAXPTS):
                canvas.create_line(points[i].x,points[i].y,points[j].x,points[j].y)
    
        canvas.pack()
        mainloop()
    if __name__ == '__main__':
        LineToDemo()
    

    实例066:三数排序

    题目 输入3个数a,b,c,按大小顺序输出。

    程序分析 同实例005。

    raw=[]
    for i in range(3):
        x=int(input('int%d: '%(i)))
        raw.append(x)
        
    for i in range(len(raw)):
        for j in range(i,len(raw)):
            if raw[i]>raw[j]:
                raw[i],raw[j]=raw[j],raw[i]
    print(raw)
    
    
    raw2=[]
    for i in range(3):
        x=int(input('int%d: '%(i)))
        raw2.append(x)
    print(sorted(raw2))
    
    

    实例067:交换位置

    题目 输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。

    程序分析 无。

    li=[3,2,5,7,8,1,5]
    
    li[-1],li[li.index(min(li))]=li[li.index(min(li))],li[-1]
    
    m=li[0]
    ind=li.index(max(li))
    li[0]=li[ind]
    li[ind]=m
    
    print(li)
    

    实例068:旋转数列

    题目 有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数

    程序分析 无。

    from collections import *
    li=[1,2,3,4,5,6,7,8,9]
    deq=deque(li,maxlen=len(li))
    print(li)
    deq.rotate(int(input('rotate:')))
    print(list(deq))
    

    实例069:报数

    题目 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。

    程序分析 无。

    if __name__ == '__main__':
        nmax = 50
        n = int(input('请输入总人数:'))
        num = []
        for i in range(n):
            num.append(i + 1)
     
        i = 0
        k = 0
        m = 0
     
        while m < n - 1:
            if num[i] != 0 : k += 1
            if k == 3:
                num[i] = 0
                k = 0
                m += 1
            i += 1
            if i == n : i = 0
     
        i = 0
        while num[i] == 0: i += 1
        print(num[i])
    

    实例070:字符串长度II

    题目 写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。

    程序分析 无。

    def lenofstr(s):
        return len(s)
    
    print(lenofstr('tanxiaofengsheng'))
    

    实例071:输入和输出

    题目 编写input()和output()函数输入,输出5个学生的数据记录。

    程序分析 无。

    N = 3
    #stu
    # num : string
    # name : string
    # score[4]: list
    student = []
    for i in range(5):
        student.append(['','',[]])
     
    def input_stu(stu):
        for i in range(N):
            stu[i][0] = input('input student num:\n')
            stu[i][1] = input('input student name:\n')
            for j in range(3):
                stu[i][2].append(int(input('score:\n')))
     
    def output_stu(stu):
        for i in range(N):
            print ('%-6s%-10s' % ( stu[i][0],stu[i][1] ))
            for j in range(3):
                print ('%-8d' % stu[i][2][j])
     
    if __name__ == '__main__':
        input_stu(student)
        print (student)
        output_stu(student)
    

    实例072:创建链表

    题目 创建一个链表。

    程序分析 原文不太靠谱。

    class Node:
    
        def __init__(self, data):
            self.data = data
            self.next = None
    
        def get_data(self):
            return self.data
    
    class List:
    
        def __init__(self, head):
            self.head = head
    
        def is_empty(self): 
            return self.get_len() == 0
    
        def get_len(self):  
            length = 0
            temp = self.head
            while temp is not None:
                length += 1
                temp = temp.next
            return length
    
        def append(self, node):
            temp = self.head
            while temp.next is not None:
                temp = temp.next
            temp.next = node
    
        def delete(self, index): 
            if index < 1 or index > self.get_len():
                print("给定位置不合理")
                return
            if index == 1:
                self.head = self.head.next
                return
            temp = self.head
            cur_pos = 0
            while temp is not None:
                cur_pos += 1
                if cur_pos == index-1:
                    temp.next = temp.next.next
                temp = temp.next
    
        def insert(self, pos, node):
            if pos < 1 or pos > self.get_len():
                print("插入结点位置不合理")
                return
            temp = self.head
            cur_pos = 0
            while temp is not Node:
                cur_pos += 1
                if cur_pos == pos-1:
                    node.next = temp.next
                    temp.next =node
                    break
                temp = temp.next
    
        def reverse(self, head):
            if head is None and head.next is None:
                return head
            pre = head
            cur = head.next
            while cur is not None:
                temp = cur.next
                cur.next = pre
                pre = cur
                cur = temp
            head.next = None
            return pre
    
        def print_list(self, head):
            init_data = []
            while head is not None:
                init_data.append(head.get_data())
                head = head.next
            return init_data
    
    if __name__=='__main__':
        head=Node('head')
        link=List(head)
        for i in range(10):
            node=Node(i)
            link.append(node)
        print(link.print_list(head))
    

    实例073:反向输出链表

    题目 反向输出一个链表。

    程序分析 无。

    class Node:
    
        def __init__(self, data):
            self.data = data
            self.next = None
    
        def get_data(self):
            return self.data
    
    class List:
    
        def __init__(self, head):
            self.head = head
    
        def is_empty(self): 
            return self.get_len() == 0
    
        def get_len(self):  
            length = 0
            temp = self.head
            while temp is not None:
                length += 1
                temp = temp.next
            return length
    
        def append(self, node):
            temp = self.head
            while temp.next is not None:
                temp = temp.next
            temp.next = node
    
        def delete(self, index): 
            if index < 1 or index > self.get_len():
                print("给定位置不合理")
                return
            if index == 1:
                self.head = self.head.next
                return
            temp = self.head
            cur_pos = 0
            while temp is not None:
                cur_pos += 1
                if cur_pos == index-1:
                    temp.next = temp.next.next
                temp = temp.next
    
        def insert(self, pos, node):
            if pos < 1 or pos > self.get_len():
                print("插入结点位置不合理")
                return
            temp = self.head
            cur_pos = 0
            while temp is not Node:
                cur_pos += 1
                if cur_pos == pos-1:
                    node.next = temp.next
                    temp.next =node
                    break
                temp = temp.next
    
        def reverse(self, head):
            if head is None and head.next is None:
                return head
            pre = head
            cur = head.next
            while cur is not None:
                temp = cur.next
                cur.next = pre
                pre = cur
                cur = temp
            head.next = None
            return pre
    
        def print_list(self, head):
            init_data = []
            while head is not None:
                init_data.append(head.get_data())
                head = head.next
            return init_data
    
    if __name__=='__main__':
        head=Node('head')
        link=List(head)
        for i in range(10):
            node=Node(i)
            link.append(node)
        print(link.print_list(head))
        print(link.print_list(link.reverse(head)))
    

    实例074:列表排序、连接

    题目 列表排序及连接。

    程序分析 排序可使用 sort() 方法,连接可以使用 + 号或 extend() 方法。

    a=[2,6,8]
    b=[7,0,4]
    a.extend(b)
    a.sort()
    print(a)
    

    实例075:不知所云

    题目 放松一下,算一道简单的题目。

    程序分析 鬼知道是什么。

    if __name__ == '__main__':
        for i in range(5):
            n = 0
            if i != 1: n += 1
            if i == 3: n += 1
            if i == 4: n += 1
            if i != 4: n += 1
            if n == 3: print (64 + i)
    

    实例076:做函数

    题目 编写一个函数,输入n为偶数时,调用函数求1/2+1/4+…+1/n,当输入n为奇数时,调用函数1/1+1/3+…+1/n

    程序分析 无。

    def peven(n):
        i = 0
        s = 0.0
        for i in range(2,n + 1,2):
            s += 1.0 / i
        return s
     
    def podd(n):
        s = 0.0
        for i in range(1, n + 1,2):
            s += 1.0 / i
        return s
     
    def dcall(fp,n):
        s = fp(n)
        return s
     
    if __name__ == '__main__':
        n = int(input('input a number: '))
        if n % 2 == 0:
            sum = dcall(peven,n)
        else:
            sum = dcall(podd,n)
        print (sum)
    

    实例077:遍历列表

    题目 循环输出列表

    程序分析 无。

    l=['moyu','niupi','xuecaibichi','shengfaji','42']
    for i in range(len(l)):
        print(l[i])
    

    实例078:字典

    题目 找到年龄最大的人,并输出。请找出程序中有什么问题。

    程序分析 无。

    if __name__ == '__main__':
        person = {"li":18,"wang":50,"zhang":20,"sun":22}
        m = 'li'
        for key in person.keys():
            if person[m] < person[key]:
                m = key
     
        print ('%s,%d' % (m,person[m]))
    

    实例079:字符串排序

    题目 字符串排序。

    程序分析 无。

    l=['baaa','aaab','aaba','aaaa','abaa']
    l.sort()
    print(l)
    

    实例080:猴子分桃

    题目 海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?

    程序分析 无。

    if __name__ == '__main__':
        i = 0
        j = 1
        x = 0
        while (i < 5) :
            x = 4 * j
            for i in range(0,5) :
                if(x%4 != 0) :
                    break
                else :
                    i += 1
                x = (x/4) * 5 +1
            j += 1
        print(x)
    
        for p in range(5):
            x=(x-1)/5*4
        print(x)
    

    实例081:求未知数

    题目 809*??=800*??+9*?? 其中??代表的两位数, 809*??为四位数,8*??的结果为两位数,9*??的结果为3位数。求??代表的两位数,及809*??后的结果。

    程序分析 无。

    a = 809
    for i in range(10,100):
        b = i * a
        if b >= 1000 and b <= 10000 and 8 * i < 100 and 9 * i >= 100:
            print(b,' = 800 * ', i, ' + 9 * ', i)
    
    
    for i in range(10,100):
        if 8*i>99 or 9*i<100:
            continue
        if 809*i==800*i+9*i:
            print(i)
            break
    

    实例082:八进制转十进制

    题目 八进制转换为十进制

    程序分析 无。

    n=eval('0o'+str(int(input('八进制输入:'))))
    print(n)
    

    实例083:制作奇数

    题目 求0—7所能组成的奇数个数。

    程序分析

    组成1位数是4个。1,3,5,7结尾

    组成2位数是7*4个。第一位不能为0

    组成3位数是7*8*4个。中间随意

    组成4位数是7*8*8*4个。

    if __name__ == '__main__':
        sum = 4
        s = 4
        for j in range(2,9):
            print (sum)
            if j <= 2:
                s *= 7
            else:
                s *= 8
            sum += s
        print('sum = %d' % sum)
    

    实例084:连接字符串

    题目 连接字符串。

    程序分析 无。

    delimiter = ','
    mylist = ['Brazil', 'Russia', 'India', 'China']
    print(delimiter.join(mylist))
    

    实例085:整除

    题目 输入一个奇数,然后判断最少几个 9 除于该数的结果为整数。

    程序分析 999999 / 13 = 76923。

    if __name__ == '__main__':
        zi = int(input('输入一个数字:'))
        n1 = 1
        c9 = 1
        m9 = 9
        sum = 9
        while n1 != 0:
            if sum % zi == 0:
                n1 = 0
            else:
                m9 *= 10
                sum += m9
                c9 += 1
        print ('%d 个 9 可以被 %d 整除 : %d' % (c9,zi,sum))
        r = sum / zi
        print ('%d / %d = %d' % (sum,zi,r))
    

    实例086:连接字符串II

    题目 两个字符串连接程序。

    程序分析 无。

    a='guangtou'
    b='feipang'
    print(b+a)
    

    实例087:访问类成员

    题目 回答结果(结构体变量传递)。

    程序分析 无。

    if __name__ == '__main__':
        class student:
            x = 0
            c = 0
        def f(stu):
            stu.x = 20
            stu.c = 'c'
        a= student()
        a.x = 3
        a.c = 'a'
        f(a)
        print(a.x,a.c)
    

    实例088:打印星号

    题目 读取7个数(1—50)的整数值,每读取一个值,程序打印出该值个数的*。

    程序分析 无。

    for i in range(3):
        print('*'*int(input('input a number: ')))
    

    实例089:解码

    题目 某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。

    程序分析 无。

    n=input()
    n = str(n)
    a=[]
    for i in range(4):
        a.append((int(n[i])+5)%10)
    a[0],a[3]=a[3],a[0]
    a[1],a[2]=a[2],a[1]
    print ("".join('%s' %s for s in a))
    
    

    实例090:列表详解

    题目 列表使用实例。

    程序分析 无。

    #list  
    #新建列表  
    testList=[10086,'中国移动',[1,2,4,5]]  
      
    #访问列表长度  
    print (len(testList)  )
    #到列表结尾  
    print (testList[1:])
    #向列表添加元素  
    testList.append('i\'m new here!')  
      
    print (len(testList)  )
    print (testList[-1]  )
    #弹出列表的最后一个元素  
    print (testList.pop(1)  )
    print (len(testList)  )
    print (testList  )
    #list comprehension  
    #后面有介绍,暂时掠过  
    matrix = [[1, 2, 3],  
    [4, 5, 6],  
    [7, 8, 9]]  
    print (matrix  )
    print (matrix[1]  )
    col2 = [row[1] for row in matrix]#get a  column from a matrix  
    print (col2  )
    col2even = [row[1] for row in matrix if  row[1] % 2 == 0]#filter odd item  
    print (col2even)
    

    实例091:time模块

    题目 时间函数举例1。

    程序分析 无。

    if __name__ == '__main__':
        import time
        print (time.ctime(time.time()))
        print (time.asctime(time.localtime(time.time())))
        print (time.asctime(time.gmtime(time.time())))
    

    实例092:time模块II

    题目 时间函数举例2。

    程序分析 如何浪费时间。

    if __name__ == '__main__':
        import time
        start = time.time()
        for i in range(3000):
            print(i)
        end = time.time()
     
        print (end - start)
    

    实例093:time模块III

    题目 时间函数举例3。

    程序分析 如何浪费时间。

    if __name__ == '__main__':
        import time
        start = time.clock()
        for i in range(100):
            print(i)
        end = time.clock()
        print('different is %6.3f' % (end - start))
    

    实例094:time模块IV

    题目 时间函数举例4。

    程序分析 如何浪费时间。

    if __name__ == '__main__':
        import time
        import random
        
        play_it = input('do you want to play it.(\'y\' or \'n\')')
        while play_it == 'y':
            c = input('input a character:\n')
            i = random.randint(0,2**32) % 100
            print ('please input number you guess:\n')
            start = time.clock()
            a = time.time()
            guess = int(input('input your guess:\n'))
            while guess != i:
                if guess > i:
                    print('please input a little smaller')
                    guess = int(input('input your guess:\n'))
                else:
                    print('please input a little bigger')
                    guess = int(input('input your guess:\n'))
            end = time.clock()
            b = time.time()
            var = (end - start) / 18.2
            print (var)
            # print 'It took you %6.3 seconds' % time.difftime(b,a))
            if var < 15:
                print ('you are very clever!')
            elif var < 25:
                print ('you are normal!')
            else:
                print ('you are stupid!')
            print ('Congradulations')
            print ('The number you guess is %d' % i)
            play_it = input('do you want to play it.')
    

    实例095:转换时间格式

    题目 字符串日期转换为易读的日期格式。

    程序分析 看看就得了,dateutil是个第三方库。

    from dateutil import parser
    dt = parser.parse("Aug 28 2015 12:00AM")
    print (dt)
    

    实例096:计算复读次数

    题目 计算字符串中子串出现的次数。

    程序分析 无。

    s1='xuebixuebixuebixuebixuebixuebixuebixue'
    s2='xuebi'
    print(s1.count(s2))
    

    实例097:磁盘写入

    题目 从键盘输入一些字符,逐个把它们写到磁盘文件上,直到输入一个 # 为止。

    程序分析 无。

    if __name__ == '__main__':
        from sys import stdout
        filename = input('输入文件名:\n')
        fp = open(filename,"w")
        ch = input('输入字符串:\n')
        while ch != '#':
            fp.write(ch)
            stdout.write(ch)
            ch = input('')
        fp.close()
    

    实例098:磁盘写入II

    题目 从键盘输入一个字符串,将小写字母全部转换成大写字母,然后输出到一个磁盘文件"test"中保存。

    程序分析 无。

    if __name__ == '__main__':
        fp = open('test.txt','w')
        string = input('please input a string:\n')
        string = string.upper()
        fp.write(string)
        fp = open('test.txt','r')
        print (fp.read())
        fp.close()
    

    实例099:磁盘读写

    题目 有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列), 输出到一个新文件C中。

    程序分析 无。

    if __name__ == '__main__':
        import string
        fp = open('test1.txt')
        a = fp.read()
        fp.close()
     
        fp = open('test2.txt')
        b = fp.read()
        fp.close()
     
        fp = open('test3.txt','w')
        l = list(a + b)
        l.sort()
        s = ''
        s = s.join(l)
        fp.write(s)
        fp.close()
    

    实例100:列表转字典

    题目 列表转换为字典。

    程序分析 无。

    i = ['a', 'b']
    l = [1, 2]
    print (dict(zip(i,l)))
    
    展开全文
  • [PYTHON]python编程100例

    2020-07-03 10:48:18
    题目: http://www.runoob.com/python/python-100-examples.html 一: 1. 有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少? # -*- coding: utf-8 -*- """ Created on Thu Jul 19 19...

    谢谢友情赞助~~

     

    另外,python交流群  302984355

     

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

    九、十 :

    #暂停一秒输出。 
    #暂停一秒输出,并格式化当前时间。 
    import time 
    a = [1,2,3,4,5,6,7]
    
    #for val in a:
    #    print (val)
    #    time.sleep(1)
    
    for i in range(10):
        print (i)
        time.sleep(1)
    
    print (time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))
     
    
    time.sleep(1)
     
    print (time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))
    

    十一:

    #古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假#如兔子都不死,问每个月的兔子总数为多少? 
    
    def fib(n):
        if(1 == n or 2 == n):
            return 1
        elif(n >= 2):
            return fib(n-2)+fib(n-1)
    
    print (fib(36)*2)

    十二:

    质数:在一般领域,对正整数n,如果用2到之间的所有整数去除,均无法整除,则n为质数。

    #判断101-200之间有多少个素数,并输出所有素数。
    import math
    def fun_12(n):
        if (n<101 or n>200):
            print ('number should be in [101,200]')
            return -1
        tmp = int(math.sqrt(n))
        for i in range(2,tmp+1):
            if(0==(n%i)):
              break
        if(tmp == i):
            return True
        else:
            return False
    
    cnt = 0
    for i in range(101,201):
        flg = fun_12(i)
        if(True == flg):
            cnt += 1
            print (i),
    print ('total is %d' %cnt)     

    这小小的代码还有bug,一般情况下,不会整除n,然后2,到都没有整除的然后这个数就判定是质数了,但是121开根号就是11,=11,if(0==(n%i)): 这个if语句满足,break退出这个时候i也已经是最后的一个了..然后满足条件就当质数了...以前在c语言写的时候用for循环,如果都不满足的时候i最后会+1退出,若正巧是最后一个比如121的11,退出i就是11,所以可以根据i == +1来判断,而python 这里就不行了,它不管,i正常退出就是m-1 (range(1,m)),和如果恰巧是最后一个不正常退出也是m-1这样就不好区分了

    改正如下:

    #判断101-200之间有多少个素数,并输出所有素数。
    import math
    def fun_12(n):
        if (n<101 or n>200):
            print ('number should be in [101,200]')
            return -1
        tmp = int(math.sqrt(n))
        flg = False
        for i in range(2,tmp+1):
            if(0==(n%i)):
              flg = True
              break
        if(True == flg):
            return False
        else:
            return True
    
    cnt = 0
    for i in range(101,201):
        flg = fun_12(i)
        if(True == flg):
            cnt += 1
            print (i),
    print ('total is %d' %cnt)     

    十三:

    #打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一#
    #个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
    
    def fun_12(m):
        n = m
        if(n<100 or n>999):
            print ('num should be in [100,999] ')
            return -1
        n1 = n%10
        L=[]
        while(0 != n):
            tmp = n%10
            L.append(tmp)
            n = int(n/10)
        a = L[0]
        b = L[1]
        c = L[2]
        if(a*a*a+b*b*b+c*c*c == m):
            return True
        else:
            return False
    
    for i in range(100,1000):
        if(True == fun_12(i)):
            print (i),
    #看到比较好的答案:
    for x in range(1,10):
        for y in range(0,10):
            for z in range(0,10):
                s1=x*100+y*10+z
                s2=pow(x,3)+pow(y,3)+pow(z,3)
                if s1==s2:
                    print "水仙花数有:%7ld" %(s1)
    
    for i in range(100, 1000):
        s = str(i)
        if int(s[0]) ** 3 + int(s[1]) ** 3 + int(s[2]) ** 3 == i:
            print(i)

    十四:

    将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

    这个题目卡了好几天,一是由于工作忙,二是分解质因数好像本身就是不太懂,然后看到百度百科上面的分解质因数的C代码,如下:

    #include <iostream>
    using namespace std;
    int main()
    {
        int n, n2;
        cin >> n;
        cout << n << "=";
        n2 = n;
        if(n<2) return 0;
        for(int i = 2;i*i<=n2;i++)
        {
            while(n2%i==0)
            {
                n2=n2/i;
                cout << i ;
                if(n2!=1)cout << "*";
            }
        }
        if(n2!=1) cout<<n2;
        return 0;
    }

    自己多看看,反正好绕,但是是正确的.然后仿着写的python如下:

    def fun_14(n):
        print (n),
        print ("="),
        n2 = n
        if(n<2):
            return -1
        tmp = 2
        
        while(tmp * tmp <= n2):
            while(0 == n2%tmp):
                  n2 = n2/tmp
                  print tmp,
                  if(1 != n2):
                      print ("*"),       
            tmp +=1
            
        if(1 != n2):
            print n2
    
    fun_14(90)

    十五:

    '''
    15:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
    '''
    def fun_15(score):
        if(score >= 90):
            print ('A')
        elif(score>=60 and score<=89):
            print('B')
        else:
            print('C')
            
    fun_15(90)

    十六:

    以下直接是答案:

    import datetime
     
    if __name__ == '__main__':
     
        # 输出今日日期,格式为 dd/mm/yyyy。更多选项可以查看 strftime() 方法
        print(datetime.date.today().strftime('%d/%m/%Y'))
     
        # 创建日期对象
        miyazakiBirthDate = datetime.date(1941, 1, 5)
     
        print(miyazakiBirthDate.strftime('%d/%m/%Y'))
     
        # 日期算术运算
        miyazakiBirthNextDay = miyazakiBirthDate + datetime.timedelta(days=1)
     
        print(miyazakiBirthNextDay.strftime('%d/%m/%Y'))
     
        # 日期替换
        miyazakiFirstBirthday = miyazakiBirthDate.replace(year=miyazakiBirthDate.year + 1)
     
        print(miyazakiFirstBirthday.strftime('%d/%m/%Y'))
        '''
        打印结果如下:
        15/08/2018
        05/01/1941
        06/01/1941
        05/01/1942
        '''

    十七:

    '''
    16:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
    '''
    def def_16(L):
        num_alpha=0
        num_space=0
        num_digit=0
        num_other=0
        for val in L:
            if(val.isalpha()):
                num_alpha += 1
            elif(val.isspace()):
                num_space += 1
            elif(val.isdigit()):
                num_digit += 1
            else:
                num_other += 1
        print 'alpha = %d, space = %d, digit = %d' %(num_alpha,num_space,num_digit)
    str = "0123456789 yang hai lin "
    def_16(str) 

    十八:

    '''
    求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。
    '''
    
    def fun_18(a,num):
        sum = 0
        for i in range(1,num+1):
            b = 0
            for j in range(1,i+1):
                b += a * (10 ** (j-1))
            if(i != num):
                print ('%d+') %b,
            else:
                print b,
            sum += b
        print '= %d' %sum   
    
    fun_18(5,9)
    # 打印:5+ 55+ 555+ 5555+ 55555+ 555555+ 5555555+ 55555555+ 555555555 = 617283945

    答案用了高级的 reduce lambda:

    Tn = 0
    Sn = []
    n = int(raw_input('n = '))
    a = int(raw_input('a = '))
    for count in range(n):
        Tn = Tn + a
        a = a * 10
        Sn.append(Tn)
        print Tn
     
    Sn = reduce(lambda x,y : x + y,Sn)
    print "计算和为:",Sn

    python的reduce()函数:https://www.cnblogs.com/XXCXY/p/5180245.html

    https://www.cnblogs.com/lonkiss/p/understanding-python-reduce-function.html

    十九:

    '''
    19:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。
    '''
    
    def fun_19():
        for i in range(1,1001):
            L_yinzi = []
            for j in range(1,i):
                if(i % j == 0):
                    L_yinzi.append(j)
    #        sum = 0
    #        if(0 != len(L_yinzi)):
    #            sum = reduce(lambda x,y : x+y,L_yinzi)
    #        if (i == sum):
    #            print i,
            sum_ = sum(L_yinzi)
            if(sum_ == i):
                print sum_,
             
    
    fun_19()
    #打印:6 28 496

    用了之前的reduce求和方法,list也自带sum求和

    注意报错: IndentationError: unindent does not match any outer indentation level  这个是缩进报错

    二十:

    '''
    20. 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
    '''
    
    def fun10_1():
        L=[100]
        h = 100.0
        for i in range(1,10):
            L.append(h)
            h = h*1.0/2.0
        sum_h = sum(L)
        
        rh =50
        for i in range(1,10):
            rh = rh/2.0
        
        print sum_h,rh
        
    fun10_1()
    #打印 299.609375 0.09765625

    二十一:

    '''
    21:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,
    又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
    以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再
    吃时,见只剩下一个桃子了。求第一天共摘了多少。
    '''
    def fun21():
        remain =1
        
        for i in range(0,9):
            remain = 2 * (1 + remain)
            
        print remain

    二十二:

    '''
    22:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。
    已抽签决定比赛名单。有人向队员打听比赛的名单。
    a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。 
    '''
    def fun_22():
        a = [1,2]
        b = [0,1,2]
        c = [1]
        
        for val_a in a:
            for val_b in b:
                for val_c in c:
                    if(val_a != val_b and val_a!=val_c and val_b!=val_c):
                        print val_a,val_b,val_c
    fun_22()

    二十三:

    '''
    23:打印如下样式:
       *
      ***
     *****
    *******
     *****
      ***
       *
    '''
    
    def fun_23():
        for i in range(0,7):
            if(i<=3):
                j = i
            else:
                j = 6-i
            num_blank = 3 -j
            num_obj = 2 * j + 1
            for b in range(0,num_blank):
                print ' ',
            for obj in range(0,num_obj):
                print '*',
            print 
    fun_23()   
    #打印如下:
         *
        * * *
      * * * * *
    * * * * * * *
      * * * * *
        * * *
          *
    
    
    #这个答案不错哦:  可以自由输入菱形的腰长,自定义大小,如果不输入值,
    #直接回车即是默认的如题目示例那样的图形
    def paintlx(l):
        for i in range(l / 2):
            print ' ' * (l / 2 - i) + '*' * (i * 2 + 1)
        print '*' * l
        for i in range(l / 2 - 1, -1, -1):
            print ' ' * (l / 2 - i) + '*' * (i * 2 + 1)
    while True:
        l = raw_input('请输入菱形腰长(奇数),默认为7:')
        if l == '':
            l = 7
            paintlx(int(l))
            break
        elif int(l) % 2 == 0:
            print '说了是奇数!'
        else:
            paintlx(int(l))
            break
                
    

    二十四:

    '''
    24:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
    '''
    
    def fun_24(n,m,L):
        L.append(n)
        L.append(m)
        for i in range(0,18):
            s = n + m
            n = m
            m = s
            L.append(s)
    
    L1=[]
    L2=[]
    fun_24(1,2,L1)
    fun_24(2,3,L2)
    #print L1
    #print L2
    sum = 0
    for i in range(0,20):
        item = (L2[i]*1.0)/(1.0*L1[i]*1.0)
        sum += item
        
    print 'sum=%d' %sum
    #打印 sum=32  这里有点问题,答案输出32后面还有小数 我这里没有,不知道为啥

    二十五:

    '''
    25:求1+2!+3!+...+20!的和。
    '''
    def fun_25_jiechen(num):
        if(1 == num):
            return 1
        s = 1
        for i in range(1,num+1):
            s *= i
        return s    
       
    
    def fun_25():
        s = 0
        for i in range(1,21):
            s += fun_25_jiechen(i)
        print s
        
    fun_25()
    #打印  2561327494111820313

    二十六:

    '''
    26: 利用递归方法求5!。
    '''
    def fun_25(n):
        if(1 == n):
            return 1
        return (fun_25(n-1)*n)
        
    m = fun_25(5)
    print m #120
    
    #答案
    
    def fact(j):
        sum = 0
        if j == 0:
            sum = 1
        else:
            sum = j * fact(j - 1)
        return sum
     
    print fact(5)

    二十八:

    #有5个人坐在一起,问第五个人多少岁?
    #他说比第4个人大2岁。
    #问第4个人岁数,他说比第3个人大2岁。
    #问第三个人,又说比第2人大两岁。
    #问第2个人,说比第一个人大两岁。
    #最后问第一个人,他说是10岁。请问第五个人多大?
    def fun(n):
        if(1 == n):
            return 10
        return 2+fun(n-1)
    
    print (fun(5))
    # 18

    二十九:

    '''
    29: 给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
    '''
    def fun_29(n):
        l=str(n)
        len_str = len(l)
        l_str = l[::-1]
        print "len:%d nixustr:%s" %(len_str,l_str)
         
    fun_29(1012)
    # len:4 nixustr:2101

    然后又写了一个不用库函数的:这个加了一个标志位Flg_comein 就是当数字中有0的时候那个if语句是存不为0的时候,因为一开始比如329与10000除所以前面都是0,不需要进if语句,但是当数字中有0的时候还是需要的,所以加一个标志位,进去之后就不需要看是否是0了

    def fun_29_1(n):
        m5 = n/10000
        m55 = n%10000
        t=10000
        L=[]
        Flg_comein = False
        while(0 != t):
            m = n / t
            if(0 != m or Flg_comein):
                Flg_comein = True
                L.append(m)
                n %= t
            t /= 10
            
        print L
        print "1::len=%d,inverted=%s"%(len(L),list(reversed(L)))
        print "2::len=%d,inverted=%s"%(len(L),L[::-1])
    
    fun_29_1(12307)
    #[1, 2, 3, 0, 7]
    #1::len=5,inverted=[7, 0, 3, 2, 1]
    #2::len=5,inverted=[7, 0, 3, 2, 1]
    注意这里面两种反序列表的方法:
    LL = list(reversed(L))
    LL = L[::-1]
    
    看了答案,感觉下面的这个也蛮好:
    
    print( '请输入大于10的数字:' )
    n=input()
    x=[]
    i=0;
    while(n!=0):
        x.append(n%10)
        i+=1
        n/=10
    print( '该数有 %d 位\n' %i )
    print( '逆序为:\n')
    print( x[::] )

    三十:

    '''
    30:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
    '''
    def fun_30(n):
        my_str = str(n)
        if(5 != len(my_str)):        
            print "num size should be 5\n"
            return 
        n_wan = n / 10000
        n_qian = n % 10000 / 1000
        n_shi = n / 10 % 10
        n_ge = n % 10
        
        print "wan:%d, qian:%d, shi:%d, ge:%d"%(n_wan,n_qian,n_shi,n_ge)
        if(n_wan == n_ge and n_shi == n_qian):
            print "is huiqenshu"
        else:
            print "not huiwenshu"
        
    fun_30(12321)
    #wan:1, qian:2, shi:2, ge:1
    #is huiqenshu
    #答案:
    (1):
    a = input("输入一串数字: ")
    b = a[::-1]
    if a == b:
        print("%s 是回文"% a)
    else:
        print("%s 不是回文"% a)
    (2):
    a = input("请输入一个数字:")
    b=list(a)
    m=1
    for i in range(len(a)//2):
        if a[i]!=a[-1-i]:
            print("不是")
            m=0
            break
    if m:
        print("是")

    三十一:

    '''
    31:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
    Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday
    '''
    def fun_31():
        letter1 = raw_input("please enter a latter(only one):")
        letter1 = letter1.lower()
        print letter1
        if(letter1 == 'm'):
            print "is Monday!"
        elif(letter1 == 'w'):
            print "is wednesday!"
        elif(letter1 == 'f'):
            print "is friday!"
        elif(letter1 == 't'):
            letter2 = raw_input("please enter a latter again:")
            letter2 = letter2.lower()
            if(letter2 == 'u'):
                print "is Tuesday!"
            elif(letter2 == 'h'):
                print "is thursday!"
        elif(letter1 == 's'):
            letter2 = raw_input("please enter a latter again:")
            letter2 = letter2.lower()
            if(letter2 == 'a'):
                print "is saturday!"
            elif(letter2 == 'u'):
                print "is sunday!"
    fun_31()
    #please enter a latter(only one):S
    #s
    #please enter a latter again:U
    #is sunday!

    好的答案:

    weeklist = {'M': 'Monday','T': {'u': 'Tuesday','h':'Thursday'}, 'W': 'Wednesday', 'F':'Friday','S':{'a':'Saturday','u':'Sunday'}}
    sLetter1 = input("请输入首字母:")
    sLetter1 = sLetter1.upper()
    
    if (sLetter1 in ['T','S']):
        sLetter2 = input("请输入第二个字母:")
        print(weeklist[sLetter1][sLetter2])
    else:
        print(weeklist[sLetter1])

    三十二:

    '''
    32:按相反的顺序输出列表的值。
    '''
    def fun_32(L):
        for i in range(0,len(L)): 
            sub_l = L[len(L) - 1 - i]
            print sub_l,
    
    LLLLL= [0,1,2,3,4,5,6,7,8,9]
    fun_32(LLLLL)
    print 
    print LLLLL[-1::-1]
    #9 8 7 6 5 4 3 2 1 0
    #[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

    答案:

    (1):
    a = ['one', 'two', 'three']
    for i in a[::-1]:
        print i
    
    (2):
    a=list(s)
    print a[-1::-1]
    (3):
    list_ = ['a', 'b', 'c', 'd']
    list_.reverse()
    print( list_ )
    (4):
    numbers=list(range(1,10))
    reversed_list=[]
    for i in range(1,10):
        reversed_list.append(numbers.pop())
    print(reversed_list)

    三十三:

    '''
    33:按逗号分隔列表。
    '''   
    def fun_33():
        L=[1,2,3,4,5,6,7,8,9]
        for i in range(0,len(L)):
            if(i != len(L)-1):
                print "%d,"%(L[i]),
            else :
                print L[i]
    fun_33()
    #  1, 2, 3, 4, 5, 6, 7, 8, 9

    看了答案,用join不错哦。注意join参数需要是string型的,int型的会报错

    L = [1,2,3,4,5]
    s1 = ','.join(str(n) for n in L)
    print s1

    三十四:

    '''
    34:练习函数调用
    '''
    def hello_world():
        print "hello world!"
    
    def three_hello():
        for i in range(0,3):
            hello_world()
    
    if __name__ == '__main__':
        three_hello()

    三十五:

    题目不太懂,跑答案也没有输出颜色效果,答案如下:

    '''
    35:文本颜色设置。
    '''
    class bcolors:
        HEADER = '\033[95m'
        OKBLUE = '\033[94m'
        OKGREEN = '\033[92m'
        WARNING = '\033[93m'
        FAIL = '\033[91m'
        ENDC = '\033[0m'
        BOLD = '\033[1m'
        UNDERLINE = '\033[4m'
    print bcolors.WARNING + "警告的颜色字体?" + bcolors.ENDC

    三十六:

    '''
    36:求100之内的素数。
    '''
    import math
    def fun_sushu(n):
        num_sqrt = int(math.sqrt(n))
        flg = False
        for i in range(2,num_sqrt+1):
            tmp = n % i
            if(0 == tmp):
                flg = True
                break
            
        if(True == flg):
            return False
        else:
            return True
    
    def fun_36():
        for i in range(2,101):
            if(True == fun_sushu(i)):
                print i,
    
    fun_36()
     
    #2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

    三十七:

    '''
    37:对10个数进行排序。
    '''
    def fun_37(L):
        for i in range(0,len(L)):
            for j in range(i+1,len(L)):
                if(L[i] >= L[j]):
                    t = L[i]
                    L[i] = L[j]
                    L[j] = t
        print "fun::L",
        print L
    L = [2,1,3,9,7,8,0,4]
    
    fun_37(L)
    print "src::L",L
    #fun::L [0, 1, 2, 3, 4, 7, 8, 9]
    #src::L [0, 1, 2, 3, 4, 7, 8, 9]

    想的最快的就是这个了,这叫冒泡排序?好像是的。看输出,说明python里面的函数调用是引用传递,会改变实参的值。之前的快排呢,当时还记得很溜的呢?

    三十八:

    '''
    38: 求一个3*3矩阵主对角线元素之和。
    '''
    def fun_38():
        matrix=[[1,2,3],[4,5,6],[7,8,9]]
        #print matrix
        sum=0
        for i in range(0,3):
            print matrix[i][i]
            sum += matrix[i][i]
        print sum
    fun_38()

    一开始不知道python里面多重数组怎么表示,看了答案

    if __name__ == '__main__':
        a = []
        sum = 0.0
        for i in range(3):
            a.append([])
            for j in range(3):
                a[i].append(float(raw_input("input num:\n")))
        for i in range(3):
            sum += a[i][i]
        print sum

    用元组字典来做的答案:

    A = {}
    for i in range(3):
        for j in range(3):
            A[i,j] = int(input('Enter a number:'))
    
    diag = []
    for m in A.keys():
        if m[0] == m[1]:
            diag.append(A[m])
    print(sum(diag))

    三十九:

    主要考虑了在中间和头尾两个地方

    '''
    39:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
    '''
    def fun_39(L,num):
        flg =True
        if(L[0] < L[len(L)-1]):
            flg = True
        else:
            flg = False
            
        if(flg):
            if(num <= L[0]):
                L.insert(0,num)
                return  
            elif(num >= L[len(L)-1]):
                L.insert(len(L),num)
                return  
        else:
             if(num >= L[0]):
                L.insert(0,num)
                return  
             elif(num <= L[len(L)-1]):
                L.insert(len(L),num)
                return  
            
    
            
        for i in range(0,len(L)-1):
            if((num >= L[i] and num <= L[i+1]) or (num >= L[i+1] and num <= L[i])):
                L.insert(i+1,num)
                break
    
    L = [1,2,3,4]
    fun_39(L,5)
    print L
    #[1, 2, 3, 4, 5]

     小弟不才,同时谢谢友情赞助:

     

    展开全文
  • Python练手经典100例

    2018-01-12 18:28:49
    本博文转载自:... 100Python练手小程序,学习python的很好的资料,覆盖了python中的每一部分,可以边学习边练习,更容易掌握python。【程序1】 题目:有1、

    本博文转载自:http://blog.csdn.net/dajiangtai007/article/details/65632987

    100个Python练手小程序,学习python的很好的资料,覆盖了python中的每一部分,可以边学习边练习,更容易掌握python。

    【程序1】
    题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
    1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去
          掉不满足条件的排列。
    2.程序源代码:

    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
    • 1
    • 2
    • 3
    • 4
    • 5

    【程序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,求应发放奖金总数?
    1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。      
    2.程序源代码:

    bonus1 = 100000 * 0.1
    bonus2 = bonus1 + 100000 * 0.500075
    bonus4 = bonus2 + 200000 * 0.5
    bonus6 = bonus4 + 200000 * 0.3
    bonus10 = bonus6 + 400000 * 0.15
    
    i = int(raw_input('input gain:\n'))
    if i <= 100000:
        bonus = i * 0.1
    elif i <= 200000:
        bonus = bonus1 + (i - 100000) * 0.075
    elif i <= 400000:
        bonus = bonus2 + (i - 200000) * 0.05
    elif i <= 600000:
        bonus = bonus4 + (i - 400000) * 0.03
    elif i <= 1000000:
        bonus = bonus6 + (i - 600000) * 0.015
    else:
        bonus = bonus10 + (i - 1000000) * 0.01
    print 'bonus = ',bonus
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    【程序3】
    题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
    1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后
          的结果满足如下条件,即是结果。请看具体分析:
    2.程序源代码:

    include "math.h"
    main()
    {
    long int i,x,y,z;
    for (i=1;i<100000;i++)
     { x=sqrt(i+100);   /*x为加上100后开方后的结果*/
      y=sqrt(i+268);   /*y为再加上168后开方后的结果*/
       if(x*x==i+100&&y*y==i+268)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/
        printf("\n%ld\n",i);
     }
    } 
    '''
    import math
    for i in range(10000):
        #转化为整型值
        x = int(math.sqrt(i + 100))
        y = int(math.sqrt(i + 268))
        if(x * x == i + 100) and (y * y == i + 268):
            print i
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    题目:输入某年某月某日,判断这一天是这一年的第几天?
    1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊
          情况,闰年且输入月份大于3时需考虑多加一天。
    2.程序源代码:

    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
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    【程序5】
    题目:输入三个整数x,y,z,请把这三个数由小到大输出。
    1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,
          然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。
    2.程序源代码:

    l = []
    for i in range(3):
        x = int(raw_input('integer:\n'))
        l.append(x)
    l.sort()
    print l
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    【程序6】
    题目:用*号输出字母C的图案。
    1.程序分析:可先用’*’号在纸上写出字母C,再分行输出。
    2.程序源代码:

    print 'Hello Python world!\n'
    print '*' * 10
    for i in range(5):
        print '*        *'
    print '*' * 10
    print '*\n' * 6
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    【程序7】
    题目:输出特殊图案,请在c环境中运行,看一看,Very Beautiful!
    1.程序分析:字符共有256个。不同字符,图形不一样。      
    2.程序源代码:

    a = 176
    b = 219
    print chr(b),chr(a),chr(a),chr(a),chr(b)
    print chr(a),chr(b),chr(a),chr(b),chr(a)
    print chr(a),chr(a),chr(b),chr(a),chr(a)
    print chr(a),chr(b),chr(a),chr(b),chr(a)
    print chr(b),chr(a),chr(a),chr(a),chr(b)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    【程序8】
    题目:输出9*9口诀。
    1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列。
    2.程序源代码:

    include "stdio.h"
    main()
    {
     int i,j,result;
     printf("\n");
     for (i=1;i<10;i++)
      { for(j=1;j<10;j++)
        {
         result=i*j;
         printf("%d*%d=%-3d",i,j,result);/*-3d表示左对齐,占3位*/
        }
       printf("\n");/*每一行后换行*/
      }
    }
    for i in range(1,10):
        for j in range(1,10):
            result = i * j
            print '%d * %d = % -3d' % (i,j,result)
        print ''
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    【程序9】
    题目:要求输出国际象棋棋盘。
    1.程序分析:用i控制行,j来控制列,根据i+j的和的变化来控制输出黑方格,还是白方格。
    2.程序源代码:

    include "stdio.h"
    main()
    {
    int i,j;
    for(i=0;i<8;i++)
     {
      for(j=0;j<8;j++)
       if((i+j)%2==0)
        printf("%c%c",219,219);
       else
        printf(" ");
       printf("\n");
     }
    }
    import sys
    for i in range(8):
        for j in range(8):
            if(i + j) % 2 == 0:
                sys.stdout.write(chr(219))
                sys.stdout.write(chr(219))
            else:
                sys.stdout.write(' ')
        print ''
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    【程序10】
    题目:打印楼梯,同时在楼梯上方打印两个笑脸。
    1.程序分析:用i控制行,j来控制列,j根据i的变化来控制输出黑方格的个数。
    2.程序源代码:

    import sys
    sys.stdout.write(chr(1))
    sys.stdout.write(chr(1))
    print ''
    
    for i in range(1,11):
        for j in range(1,i):
            sys.stdout.write(chr(219))
            sys.stdout.write(chr(219))
        print ''
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    【程序11】
    题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月
       后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
    1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21….
    2.程序源代码:

    main()
    {
    long f1,f2;
    int i;
    f1=f2=1;
    for(i=1;i<=20;i++)
     { printf("%12ld %12ld",f1,f2);
       if(i%2==0) printf("\n");/*控制输出,每行四个*/
       f1=f1+f2; /*前两个月加起来赋值给第三个月*/
       f2=f1+f2; /*前两个月加起来赋值给第三个月*/
     }
    }
    f1 = 1
    f2 = 1
    for i in range(1,21):
        print '%12d %12d' % (f1,f2)
        if (i % 2) == 0:
            print ''
        f1 = f1 + f2
        f2 = f1 + f2
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    【程序12】
    题目:判断101-200之间有多少个素数,并输出所有素数。
    1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,
          则表明此数不是素数,反之是素数。       
    2.程序源代码:

    h = 0
    leap = 1
    from math import sqrt
    from sys import stdout
    for m in range(101,201):
        k = int(sqrt(m + 1))
        for i in range(2,k + 1):
            if m % i == 0:
                leap = 0
                break
        if leap == 1:
            print '%-4d' % m
            h += 1
            if h % 10 == 0:
                print ''
        leap = 1
    print 'The total is %d' % h
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    【程序13】
    题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数
       本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
    1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
    2.程序源代码:

    for n in range(100,1001):
        i = n / 100
        j = n / 10 % 10
        k = n % 10
        if i * 100 + j * 10 + k == i + j ** 2 + k ** 3:
            print "%-5d" % n
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    【程序14】
    题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

    程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
    (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
    (2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,
     重复执行第一步。
    (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

    2.程序源代码:

    from sys import stdout
    n = int(raw_input("input number:\n"))
    print "n = %d" % n
    
    for i in range(2,n + 1):
        while n != i:
            if n % i == 0:
                stdout.write(str(i))
                stdout.write("*")
                n = n / i
            else:
                break
    print "%d" % n
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    【程序15】
    题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,
       60分以下的用C表示。
    1.程序分析:(a>b)?a:b这是条件运算符的基本例子。
    2.程序源代码:
    不支持这个运算符

    score = int(raw_input('input score:\n'))
    if score >= 90:
        grade = 'A'
    elif score >= 60:
        grade = 'B'
    else:
        grade = 'C'
    
    print '%d belongs to %s' % (score,grade)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    【程序17】
    题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
    1.程序分析:利用while语句,条件为输入的字符不为’\n’.
          
    2.程序源代码:

    import string
    s = raw_input('input a string:\n')
    letters = 0
    space = 0
    digit = 0
    others = 0
    for c in s:
        if c.isalpha():
            letters += 1
        elif c.isspace():
            space += 1
        elif c.isdigit():
            digit += 1
        else:
            others += 1
    print 'char = %d,space = %d,digit = %d,others = %d' % (letters,space,digit,others)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    题目:求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时
       共有5个数相加),几个数相加有键盘控制。
    1.程序分析:关键是计算出每一项的值。
    2.程序源代码:

    Tn = 0
    Sn = []
    n = int(raw_input('n = :\n'))
    a = int(raw_input('a = :\n'))
    for count in range(n):
        Tn = Tn + a
        a = a * 10
        Sn.append(Tn)
        print Tn
    
    Sn = reduce(lambda x,y : x + y,Sn)
    print Sn
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    【程序19】
    题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程
       找出1000以内的所有完数。
    1. 程序分析:请参照程序<–上页程序14.
    2.程序源代码:

    from sys import stdout
    for j in range(2,1001):
        k = []
        n = -1
        s = j
        for i in range(1,j):
                if j % i == 0:
                    n += 1
                    s -= i
                    k.append(i)
    
        if s == 0:
            print j
            for i in range(n):
                stdout.write(k[i])
                stdout.write(' ')
            print k[n]
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    【程序20】
    题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在
       第10次落地时,共经过多少米?第10次反弹多高?
    1.程序分析:见下面注释
    2.程序源代码:

    Sn = 100.0
    Hn = Sn / 2
    
    for n in range(2,11):
        Sn += 2 * Hn
        Hn /= 2
    
    print 'Total of road is %f' % Sn
    print 'The tenth is %f meter' % Hn
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    限于篇幅,这里只列出10个,更多Python程序请自行下载后阅读。
    http://www.dajiangtai.com/community/18316.do

                                    <link rel="stylesheet" href="http://csdnimg.cn/release/phoenix/production/markdown_views-10f5517761.css">
                                    </div>
    
    展开全文
  • 菜鸟教程 Python100例答案

    事实上,菜鸟教程100例每一例后都带有答案
    所以这篇博客主要还是给自己看的

    本人追求简洁、优美、锋利的代码
    虽然以下问题都不难,但是我还是想尽量写出最好的代码
    尤其希望用一行代码解决一个问题

    所以希望小伙伴们把你认为更好的代码留在留言区!


    2017/9/29
    工欲善其事,必先利其器。我决定先做一个计时器,用于测评代码的质量

    。。。。。。
    我把计时器做出来了,但是今天的算法时间已经用光了,还把学英语的时间占用了。。请看我的这篇博客,里面有计时器的源码http://blog.csdn.net/Super_Tiger_Lee/article/details/78137973

    只好只把第一题给做了

    #T1
    #题目:有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?(woc,题干是三位数,我写成四位数了,原理都差不多吧,就不改了)
    nums=range(4)
    for first in nums:
        for secound in nums:
            for third in nums:
                for fourth in nums:
                    if first!=secound and first!=third and first!=fourth and \
                        secound!=third and secound!=fourth and \
                        third!=fourth:
                        print first*1000+secound*100+third*10+fourth

    2017/9/30
    打卡,嘀~

    #T2
    # 企业发放的奖金根据利润提成。利润(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,求应发放奖金总数?
    w=int(raw_input('请输入利润:'))
    
    if w<0:
        print "your input is NaN"
    elif w<10:
        print w*0.1
    elif w<20:
        print (w-10)*0.075+1
    elif w<40:
        print 1.75+(w-20)*0.05
    elif w<60:
        print 2.75+(w-40)*0.03
    elif w<100:
        print 3.35+(w-60)*0.015
    else:
        print 3.95+(w-100)*0.01
    
    
    #给出的标准答案还挺有趣的
    
    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
    #T3
    # 题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
    
    def cansqur(num):
        num=num
        i=1
        while i*i<=num:
            if i*i==num:
                return True
            else:
                i+=1
        return False
    
    someint=-100
    while cansqur(someint+100)==False or cansqur(someint+168)==False:
        someint+=1
    print someint
    #T4
    # 题目:输入某年某月某日,判断这一天是这一年的第几天?
    
    year=int(raw_input('year:'))
    month=int(raw_input('month:'))
    day=int(raw_input('day:'))
    monthdaynum=[31,28,31,30,31,30,31,31,30,31,30,31]
    
    #判断闰年
    runnian=True if ((year%4==0 and year%100!=0) or year%400==0) else False
    #计算天数
    sumdata=sum(monthdaynum[0:month-1])+day
    #若是闰年
    if month>2 and runnian==True:
        print sumdata+1
    else:
        print sumdata

    2017/10/1
    为了给祖国母亲庆生我决定今天哪也不去,好好刷题 :-)

    #T5
    #这道题菜鸟给出的答案真是垃圾,居然直接用sort()函数,要是使用sort()函数,这题还用做么?
    # 题目:输入三个整数x,y,z,请把这三个数由小到大输出。
    
    
    #排序函数
    def so(nums):
        min =nums[0]
        order=0
        length=len(nums)
        for i in range(length):
            if nums[i] <min:
                min=nums[i]
                order=i
        del nums[order]
        return min
    
    #输入部分
    numbers=[]
    while True:
        num=raw_input('请输入数值,若输入完毕请按‘q’:')
        if num=='q':
            break
        numbers.append(int(num))
    print numbers
    
    while len(numbers)!=0:
        print so(numbers)
    #T6
    #题目:斐波那契数列
    
    nums=[]
    nums.append(0)
    nums.append(1)
    for i in range(100):
        nums.append(nums[i]+nums[i+1])
    
    print nums
    ===================================================
    #F2:
    nums=[0,1]
    while nums[-1]<=100000: nums.append(nums[-1]+nums[-2])
    print nums
    
    ===================================================
    #我在想怎么用一条语句输出斐波那契数列
    #没想出来,只想出来要用print,后面带个多重嵌套的列表生成式,但具体还不会实操
    #以下借鉴一位知乎上的仁兄的答案
    
    print [x[0] for x in [  (a[i][0], a.append((a[i][1], a[i][0]+a[i][1]))) for a in ([[0,1]], ) for i in xrange(100) ]]
    
    #T7
    # 题目:将一个列表的数据复制到另一个列表中。
    
    a=range(10)
    b=a[:]
    print b
    #T8
    # 题目:输出 9*9 乘法口诀表。
    for i in range(9):
        i+=1;j=1
        while j<=i:
            print '%d*%d=%d' %(i,j,i*j),
            j+=1
        print '\n'
    
    =======================================================
    #F2
    for i in range(1,10):
        for j in range(1,i+1):
            print '%d*%d=%d' %(i,j,i*j),
        print '\n'
    #T9
    # 题目:暂停一秒输出。
    # 程序分析:使用 time 模块的 sleep() 函数。
    from time import sleep
    print 'i lv '
    sleep(1)
    print 'u'
    #T10
    # 题目:暂停一秒输出,并格式化当前时间。
    import time
    print 'now the time is :'
    print time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
    time.sleep(1)
    print time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
    #T11
    #题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
    
    。。。。
    这不就是第6题斐波那契数列么?只是从第二项开始罢了

    #T12
    # 题目:判断101-200之间有多少个素数,并输出所有素数。
    ###注意这个答案中的For...if...else...的语句,这个是固定用法,不明白的话参看http://blog.csdn.net/churximi/article/details/51043595 
    
    import math
    
    col=0
    for num in range(100,201):
        for i in range(2,int(math.sqrt(num))+1):
            if num%(i)==0:
                break
        else:
            print num
            col+=1
    print '\n',col
    #T13
    # 题目:打印出所有的"水仙花数",
    # 所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。
    # 例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方
    
    for num in range(100,1000):
        if num==(num/100)**3+((num/10)%10)**3+(num%10)**3:
            print num
    #T14
    # 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
    
    num=int(raw_input('input a number:'))
    print num,'=',
    yins=[]
    while num!=1:
        i=2
        while num%i!=0:
            i+=1
        num /= i
        yins.append(i)
    print yins[0],
    for yin in yins[1:]:
        print '*',yin,
    #T15
    # 题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
    
    score=int(raw_input('input the score:'))
    if 0<=score<=100:
        if score>=90:
            print 'A'
        elif score>=60:
            print 'B'
        else:
            print 'C'
    else:
        print 'not an available score'
    #T16
    # 题目:输出指定格式的日期。
    
    from datetime import datetime
    now=datetime.now()
    print now.strftime('%Y年%m月%d日')
    #T17
    # 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
    strr=raw_input('please input a strings:')
    letters=0
    spaces=0
    numbers=0
    others=0
    for character in strr:
        if 'a'<=character<='z' or 'A'<=character<='Z':
            letters+=1
        elif character==' ':
            spaces+=1
        elif '0'<=character<='9':
            numbers+=1
        else:
            others+=1
    print 'letters:',letters
    print 'spaces:',spaces
    print 'numbers:',numbers
    print 'others:',others
    #T18
    # 题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。
    
    num=int(raw_input('input your number:'))
    time=int(raw_input('input the times:'))
    sum=0
    for i in [10**x for x in range(time)]:
        sum+=num*time*i
        time-=1
    print sum
    #T19
    # 题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。
    
    def yinzi(num):
        yins=[]
        i=1
        while i<num:
            while num%i==0:
                yins.append(i)
                i+=1
            i+=1
        return yins
    
    for num in range(1,1001):#100以内包括100
        if sum(yinzi(num))==num:
            print num
    #T20
    # 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
    #这不是等比数列么?我口算都比编程算来的快
    
    now=100.0
    sum=100.0
    for i in range(9):
        now/=2
        sum+=now*2
    print sum
    print now/2
    #T21
    # 题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾(还不瘾是什么意思,菜鸟还犯这种低级错误呢?),又多吃了一个
    # 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
    # 以后每天早上都吃了前一天剩下的一半零一个。
    # 到第10天早上想再吃时,见只剩下一个桃子了。
    # 求第一天共摘了多少。
    #《奥赛经典举一反三》小学三年级版上的题--看来我小学奥数班还没白上
    
    peaches=1
    for i in range(9):
        peaches=(peaches+1)*2
    print peaches

    2017/10/2

    #T22
    #菜鸟下面的一个答案,看起来挺好的
    # 题目:两个乒乓球队进行比赛,各出三人。
    # 甲队为a,b,c三人,乙队为x,y,z三人。
    # 已抽签决定比赛名单。
    # 有人向队员打听比赛的名单。
    # a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
    
    for a in ['x','y','z']:
        for b in ['x', 'y', 'z']:
            for c in ['x', 'y', 'z']:
                if(a!=b)and(b!=c)and(c!=a) and (a!='x') and (c!='x') and (c!='z'):
                    print 'a和%s比赛,b和%s比赛,c和%s比赛' %(a,b,c)
    #T23
    # 题目:打印出如下图案(菱形):
    #    *
    #   ***
    #  *****
    # *******
    #  *****
    #   ***
    #    *
    
    for i in range(7):
        print (' '*((3-i))+'*'*(2*i+1)) if (3-i)>=0 else (' '*(i-3)+'*'*(-2*i+13))
    #T24
    # 题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
    
    sum=0
    Q=[x[0] for x in [  (a[i][0], a.append((a[i][1], a[i][0]+a[i][1]))) for a in ([[1,2]], ) for i in xrange(100) ]]
    for i in range(20):
        num=float(Q[i+1])/Q[i]
        sum+=num
    print sum
    #T25
    # 求1+2!+3!+...+20!的和。
    
    def jiecheng(num):
        mul=1
        while num!=1:
           mul*= num
           num-=1
        return mul
    
    sum=0
    for i in range(1,21):
        sum+=jiecheng(i)
    print sum
    #T26
    # 利用递归方法求5!
    
    def jiecheng(num):
        mul=1
        while num!=1:
           mul*= num
           num-=1
        return mul
    
    print jiecheng(5)
    #T27
    # 题目:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
    print raw_input('input five chats:')[::-1]
    #T28
    # 题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。
    # 问第4个人岁数,他说比第3个人大2岁。
    # 问第三个人,又说比第2人大两岁。
    # 问第2个人,说比第一个人大两岁。
    # 最后问第一个人,他说是10岁。
    # 请问第五个人多大?
    
    def fun(age,rank):       #age 年龄,rank 递归第几个人
        if rank == 1:
            return age
        else:
            return fun(age+2,rank-1)
    print (fun(10,5))
    #T29
    # 题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
    
    num=raw_input('please input a number:')
    while num[0]=='0':
        num=num[1:]
    print num
    print '该数字为',len(num),'位'
    print num[::-1]
    #T30
    # 题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
    
    num=raw_input('please input a number:')
    length=len(num)
    for i in range(length/2):
        if num[i]!=num[-i-1]:
            print 'NO'
            break
    else:
        print 'YES'
    #T31
    # 题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
    #我在想,怎么用列表生成式做这道题,但是没想出来。有思路的同学请留言。
    
    weeks=['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']
    for i in range(2):
        t=raw_input('input:')
        inner=[]
        for day in weeks:
            if day[i]==t:
                inner.append(day)
        if len(inner)==1:
            print inner[0]
            break
        else:
            weeks=inner

    2017/10/3

    #T32
    #题目:按相反的顺序输出列表的值。
    a = ['one', 'two', 'three']
    for i in a[::-1]:
        print i
    #T33
    # 题目:按||分隔列表。
    
    L = [1,2,3,4,5]
    s1 = '||'.join(str(n) for n in L)
    print s1
    #T34
    #题目:练习函数调用。
    此处略去10
    #T35
    # 题目:文本颜色设置。
    # 居然还有这种功能!
    
    class bcolors:
        HEADER = '\033[95m'
        OKBLUE = '\033[94m'
        OKGREEN = '\033[92m'
        WARNING = '\033[93m'
        FAIL = '\033[91m'
        ENDC = '\033[0m'
        BOLD = '\033[1m'
        UNDERLINE = '\033[4m'
    print bcolors.WARNING + "警告的颜色字体?" + bcolors.ENDC
    #T36
    #题目:求100之内的素数
    #求素数的题不是都做了几道了么,怎么还要我做?差评!
    #T37
    #题目:对10个数进行排序。
    等我过两天再研究研究排序再说
    #T38
    题目:求一个3*3矩阵对角线元素之和。
    if __name__ == '__main__':
        a = []
        sum = 0.0
        for i in range(3):
            a.append([])
            for j in range(3):
                a[i].append(float(raw_input("input num:\n")))
        for i in range(3):
            sum += a[i][i]
        print sum
    #T39
    # 题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中
    
    if __name__ == '__main__':
        # 方法一 : 0 作为加入数字的占位符
        a = [1,4,6,9,13,16,19,28,40,100,0]
        print '原始列表:'
        for i in range(len(a)):
            print a[i],
        number = int(raw_input("\n插入一个数字:\n"))
        end = a[9]
        if number > end:
            a[10] = number
        else:
            for i in range(10):
                if a[i] > number:
                    temp1 = a[i]
                    a[i] = number
                    for j in range(i + 1,11):
                        temp2 = a[j]
                        a[j] = temp1
                        temp1 = temp2
                    break
        print '排序后列表:'
        for i in range(11):
            print a[i],
    #T40
    # 题目:将一个数组逆序输出。
    # 菜鸟真是有毒吧,同样的题想让我做几遍?
    if __name__ == '__main__':
        a = [9,6,5,4,1]
        N = len(a) 
        print a
        for i in range(len(a) / 2):
            a[i],a[N - i - 1] = a[N - i - 1],a[i]
        print a
    #T41
    #题目:模仿静态变量的用法。
    def varfunc():
        var = 0
        print 'var = %d' % var
        var += 1
    if __name__ == '__main__':
        for i in range(3):
            varfunc()
    
    # 类的属性
    # 作为类的一个属性吧
    class Static:
        StaticVar = 5
        def varfunc(self):
            self.StaticVar += 1
            print self.StaticVar
    
    print Static.StaticVar
    a = Static()
    for i in range(3):
        a.varfunc()
    #T42
    # 题目:学习使用auto定义变量的用法。
    
    num = 2
    def autofunc():
        num = 1
        print 'internal block num = %d' % num
        num += 1
    for i in range(3):
        print 'The num = %d' % num
        num += 1
        autofunc()

    菜鸟真是辣鸡,怎么越到后面的题越辣鸡呢?
    没有出现的题都是不想写的题
    看到了55题


    2017/10/4

    #T61
    #题目:打印出杨辉三角形(要求打印出10行如下图)。
    # 1
    # 1 1
    # 1 2 1
    # 1 3 3 1
    # 1 4 6 4 1
    # 1 5 10 10 5 1
    # 1 6 15 20 15 6 1
    # 1 7 21 35 35 21 7 1
    # 1 8 28 56 70 56 28 8 1
    # 1 9 36 84 126 126 84 36 9 1
    
    nums=[[]]
    for i in range(10):
        nums.append([])
        nums[i].append(1)
        if i>=1:
            for j in range(1,i):
                nums[i].append(nums[i-1][j-1]+nums[i-1][j])
            nums[i].append(1)
        nums[i].append('\n')
    for row in nums:
        for num in row:
            print num,
    #T85
    #题目:输入一个正整数,然后判断最少几个 9 除于该数的结果为整数。
    
    num=int(raw_input('input a int:'))
    nines=9
    many=1
    while (nines>=num and nines%num==0)==False:
        nines=nines*10+9
        many+=1
    print nines
    print many

    结束了,后面的题没什么可做的,还有很多重复的题目

    展开全文
  • python经典100案例

    2020-07-30 23:32:00
    python学习100个经典案例
  • python 100例之例三

    2017-11-29 17:00:07
    题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? 解题思路:此题表面信息量少之又少,看上去很不好解。并且只是说一个整数,并没有给边界,所以自定义边界值为1000,...
  • 准备写一篇Python爬虫的教学文章,从urllib,requests,selenium,Appium,scrapy,这些主要方面讲解。其中包括了re,xpath,bs4,javascript代码破解的一些心得。基本会涵盖Python爬虫的方方面面,如果大家有些什么...
  • Python 新手练习100例

    2016-08-07 22:23:03
    从网络上找来50例python练习题,供大家一起学习研究。
  • Python 实例教程100例

    2019-12-20 10:23:36
    Python 100例-01题目:输有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数? Python 100例-02题目:企业发放的奖金根据利润提成。 Python 100例-03题目:一个整数,它加上100和加上268后都是一个完全...
  • 题目51:学习使用按位与 &amp; 。 if __name__ == '__main__': a = 1 b = 3 c=a&amp;b print ('a &amp; b = %d' % c) b &amp;= 0 print ('a &amp; b = %d' % b) a &amp; b = 1 a...
  • python如今很流行,AI的首选工具;python趣味编程100例(99个),学习编程不枯燥。
  • Python练习案例100例

    2019-11-30 08:38:37
    题目1:有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少? 题目2:输入某年某月某日,判断这一天是这一年的第几天? 题目3:输入三个整数x,y,z,请把这三个数由小到大输出。...
  • 目录 11-进阶的三元运算符 12--基本的判断用户名和密码 13-while循环 14-for循环 15-猜数 16-range用法 17-乘法表 ...学习一门语言,最好的方法就是多敲!!! 11-进阶的三元运算符 #...
  • 目录 前言 01-hello world! 02-print.py 03-基本运算.py 04-input.py 05-字符串的使用 06-列表基础 07-元组基础 ...学习一门语言,最好的方法就是多敲!!! 01-hello world! #!/usr/l...
  • Python3 100例 | 菜鸟教程 习题链接 题41:静态变量(类变量) 题目:模仿静态变量的用法。 Python语言并不支持静态变量。因为Python是动态语言,不存在完全静态的变量。 Python中,静态成员变量称为类变量,非静态...
  • 题目1:有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少? 程序分析: 可填在百位、十位、个位的数字都是1、2、3、4。.../usr/bin/python # -*- coding: UTF-8...
  • Python 初学者

    2020-02-05 08:50:02
    来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门...
  • 海龟变身孙悟空,迷宫寻宝讲相声!...可爱的金币天使朗诵起了秋天的诗句还玩着用Python的海龟画图模块制作的3D物理互碰弹球。 奥特曼原来很喜欢玩跳跃方块游戏和星际赛车游戏啊。后羿射日之前在干什么呢?原来...
  • 搜语法的时候无意间在这里发现了个python100题。 本着复习python的想法做了一下,过程中发现有些题不像是python的,网上一搜才知道这东西原名叫做《C语言程序设计100个经典例子》,果然好坑。 挑能做的做了一遍,...
  • python 经典100例(41-60) ''' 【程序41】 题目:学习static定义静态变量的用法  1.程序分析: 2.程序源代码: ''' # python没有这个功能了,只能这样了:) def varfunc():  var = 0  print 'var = ...
1 2 3 4 5 ... 20
收藏数 34,412
精华内容 13,764
热门标签
关键字:

python学习100例