菜鳥教程 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

結束了,後面的題沒什麼可做的,還有很多重複的題目

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章