Python100例實訓(一)
昨天晚上,想到自己作為21世紀的大學生,程式設計能力居然基本為0,這是一件令人遺憾的事情,如果現在好好學好一門程式語言,一定會在未來有用武之地。否則,將會有很多遺憾。
所以決定從python入手。都說python入手容易,但是堅持和毅力是目前大多數人所缺乏的。
古人之觀於天地、山川、草木、蟲魚、鳥獸,往往有得,以其求思之深而無不在也。
夫夷以近,則遊者眾;
險以遠,則至者少。
而世之奇偉、瑰怪,非常之觀,常在於險遠,而人之所罕至焉,故非有志者不能至也。
有志矣,不隨以止也,然力不足者,亦不能至也。
有志與力,而又不隨以怠,至於幽暗昏惑而無物以相之,亦不能至也。
然力足以至焉,於人為可譏,而在己為有悔;
盡吾志也而不能至者,可以無悔矣,其孰能譏之乎?
正如上文所說,盡吾志也不能至者,可以無悔矣!
Practice makes perfect
所以下決心,一定要把python100例項擼一遍,雖然,這些題目對於大佬們來說太容易了,可是小白擼一遍的話,理解,記憶,思維,應該都有很大的提升的。在此立貼為誓,本人誓將python100個例項在2018.09.01之前認真擼一遍,並且做好筆記,如果做不到,單身狗永不脫單!
Python 例項
點選開啟連結Python 例項1
有四個數字:1、2、3、4,能組成多少個互不相同且無重複數字的三位數?各是多少?
本題很容易。需要注意range等後跟圓括號,昨天在寫程式的時候,把list,dict等後跟的也錯寫成了(),應該是中括號。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
Python 例項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,求應發放獎金總數?
#p = 120000 p = int(input('請輸入利潤:')) profit = [1000000,600000,400000,200000,100000,0] ratio = [0.01,0.015,0.03,0.05,0.075,0.1] r = 0 for idx in range(0,6): if p>profit[idx]: r += (p - profit[idx])*ratio[idx] print ((p - profit[idx])*ratio[idx]) p = profit[idx] print(r)
必須承認,自己一開始想的演算法很常規也很笨,就是用很多個if-else條件判斷,然後計算。
構思之後,看了一下答案,驚為天人,很巧妙!
尤其是 for迴圈中的if判斷,令p = profit[idx]免去了很多麻煩。
Python 例項3
一個整數,它加上100後是一個完全平方數,再加上168又是一個完全平方數,請問該數是多少?
import math
x = range(0,1000000)
for i in x:
y = i+100
if math.sqrt(y)%2 == 1 or math.sqrt(y)%2 == 0:
z = y + 168
if math.sqrt(z)%2 == 1 or math.sqrt(z)%2 == 0:
print(i,y,z)
首先,看到這種題目還是有點怵的,之前基本上是零基礎,遇到這種需要數學的題,心裡有莫名的恐懼感。可是,真正一分析下來,其實並不需要多高深的數學知識就可以解決。完全平方數開根號後必須要是一個整數,怎麼保證一個數是整數?整數除以2的餘數一定為1或0,所以通過這個判斷,用迴圈一個個整數遍歷,滿足條件的就是答案。Python 例項4
輸入某年某月某日,判斷這一天是這一年的第幾天?
dayth = 0
inputyear = int(input('Please enter the YEAR:\n'))
inputmonth = int(input('Please enter the MONTH:\n'))
inputday = int(input('Please enter the DAY:\n'))
daysOFmonthP = {1: 31, 2: 28, 3: 31, 4: 30, 5: 31, 6: 30, 7: 31, 8: 31, 9: 30, 10: 31, 11: 30, 12: 31}
daysOFmonthR = {1: 31, 2: 29, 3: 31, 4: 30, 5: 31, 6: 30, 7: 31, 8: 31, 9: 30, 10: 31, 11: 30, 12: 31}
if (inputyear % 4 == 0 or inputyear % 400 == 0) and inputyear % 100 != 0:
alldays = 366
monthDaydict = daysOFmonthR
else:
alldays = 365
monthDaydict = daysOFmonthP
for i in range(1, inputmonth):
dayth = dayth + monthDaydict[i]
print('The day is %dth day in the year' % (dayth+inputday))
字典的鍵居然還可以是int,之前一直以為只能是 字串型別,比如:{'a':1}。果然實踐出真知。
記得之前的程式課上,遇到這種題是很害怕的,覺得自己不可能寫出來。然而,仔細看看,發現其實不難。從中明白了一個道理,其實很多事情是被事物的表面嚇到了,根本沒有那麼可怕。不動手去做,怎麼就知道自己做不出來?王侯將相寧有種乎?(
一本正經的胡說八道,手動滑稽)
Python 例項5
第一種:用sorted函式
a = int(input('Please enter the first number:\n'))
b = int(input('Please enter the first number:\n'))
c = int(input('Please enter the first number:\n'))
list1 = [a,b,c]
list2 = sorted(list1)
print(list2)
第二種:用sort
a = int(input('Please enter the first number:\n'))
b = int(input('Please enter the first number:\n'))
c = int(input('Please enter the first number:\n'))
list1 = [a,b,c]
list2 = list1[:]
d = list2
e = list2.sort()
#print(type(d))
print(e)
在寫程式時,發現list2 = list1.sort()之後,list2還是None!出人意料。通過切片操作就好了。
y = x[:] 通過分片操作將列表x的元素全部拷貝給y,如果簡單的把x賦值給y:y = x,y和x還是指向同一個列表,並沒有產生新的副本。
下面的寫法就可以打印出來
#p = 120000 但是這一種就打印不出來!?
python3中list用了sort()方法後是None