菜鸟教程 Python100例答案

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Super_Tiger_Lee/article/details/78137948

事实上,菜鸟教程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

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

展开阅读全文

没有更多推荐了,返回首页