python下幾個簡單實例代碼

注意:我用的python2.7,大家如果用Python3.0以上的版本,請記得在print()函數哦!如果因爲版本問題評論的,不做回覆哦!!!

1.題目:有1、2、3、4個數字,能組成多少個互不相同且無重複數字的三位數?都是多少?

程序分析:可填在百位、十位、個位的數字都是1、2、3、4。組成所有的排列後再去 掉不滿足條件的排列。
程序源代碼:

-- coding: UTF-8 --

for i in range(1,5):
for j in range(1,5):
for k in range(1,5):
if (i != j) and (i != k) and (j != k):
print i,j,k
1
2
3
4
5
6
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,求應發放獎金總數?

程序分析:請利用數軸來分界,定位。注意定義時需把獎金定義成長整型。

方法一: 這種方法是我用數學的原理做的,就是把每種情況都列出一個表達式,最後簡化表達式,然後直接根據輸入的利潤 I 來計算表達式的值,也就是獎金總數。就是把獎金疊加起來,具體算法還是要在紙上計算,這種方法適用於初學編碼的人,比如我,用最笨的數學思路解決問題,就是說在數學上你是按照什麼方法做的,然後把他轉化成代碼,就比較容易理解了。

-- coding: UTF-8 --

while True:
I = input("pls input the lirun:")
if I <= 10:
a = I 0.01
print a
elif I <= 20 and I > 10:
b =0.25 + I
0.075
print b
elif I <= 40 and I > 20:
c = 0.75 + I 0.05
print c
elif I <= 60 and I > 40:
d = 0.95 + I
0.03
print d
elif I <= 60 and I > 100:
e = 2 + I 0.015
print e
else:
f = 2.95 + I
0.01
print f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
方法二:這種方法就比較難懂了,適合於基礎好的人

-- 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
#有6個分界值當然要循環6次
for idx in range(0,6):
if I > arr[idx]:
r = r + (I - arr[idx]) rat[idx]
print (I - arr[idx])
rat[idx]
I = arr[idx]
print r
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
3.題目:一個整數,它加上100和加上268後都是一個完全平方數,請問該數是多少?

程序分析:在10000以內判斷,將該數加上100後再開方,加上268後再開方,如果開方後的結果滿足如下條件,即是結果。這裏要用到數學中的開方函數 sqrt。

-- coding: UTF-8 --

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
4.題目:輸入某年某月某日,判斷這一天是這一年的第幾天?

程序分析:以3月5日爲例,應該先把前兩個月的加起來,然後再加上5天即本年的第幾天,特殊情況,閏年且輸入月份大於3時需考慮多加一天。

思路:先把輸入的日期進行分割,分割成年,月,日三個數字,再按照實際情況依次編寫。

-- coding: UTF-8 --

x = raw_input("請輸入日期,比如20160506:")
year = int(x[:4])
month = int(x[4:6])
day = int(x[6:8])
month_day = [31,28,31,30,31,30,31,31,30,31,30,31]
data = sum(month_day[:(month-1)],day)
if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
if month > 2:
data = data + 1
print "it is the %dth day"% (data)
1
2
3
4
5
6
7
8
9
10
11
5.題目:輸入三個整數x,y,z,請把這三個數由小到大輸出。

程序分析一:我們想辦法把最小的數放到x上,先將x與y進行比較,如果x>y則將x與y的值進行交換,然後再用x與z進行比較,如果x>z則將x與z的值進行交換,這樣能使x最小。

-- coding: UTF-8 --

l = []
for i in range(3):
x = int(raw_input('integer:\n'))
l.append(x) #這裏用append()函數,意思是追加元素
l.sort()
print l
1
2
3
4
5
6
7
程序分析二:用一個變量來存儲最小值,三個數進行比較後兩兩交換,這是最常用的思路。

-- coding: UTF-8 --

x = input("input a num:")
y = input("input a num:")
z = input("input a num:")
temp = 0
if x < y:
temp = x
x = y
y = temp
if x < z:
temp = x
x = z
z = temp
if y < z:
temp = y
y = z
z = temp
print z,y,x #由於上面是由小到大來比較和交換的,所以這裏需要逆序輸出
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
程序分析三:用函數sort進行排序,sort函數可以把數字按照從小到大的順序進行重新排列。

-- coding: UTF-8 --

x = input("input a num:")
y = input("input a num:")
z = input("input a num:")
y = [x,y,z] #注意,這裏只能是列表,不能是元組,因爲元組是不可改變的,你懂得!!
y.sort()
print y
1
2
3
4
5
6
7
6.題目:將一個列表的數據複製到另一個列表中。

注意: 有些同學想到使用append()函數,這裏要特別注意,append()函數是每次追加一個元素,如果使用append()函數,會把需要追加的那個列表當成一個數據來使用,不信你看下面這個:

方法一:

-- coding: UTF-8 --

l1 = [1,2,3]
l2 = [4,5,6]
l1.append(l2)
print l1

輸出:[1, 2, 3, [4, 5, 6]]
1
2
3
4
5
6
7
方法二:使用“+”來連接兩個列表,即就是把l2列表的數據複製到l1列表中。

-- coding: UTF-8 --

l1 = [1,2,3]
l2 = [4,5,6]
print l1 + l2

輸出:[1, 2, 3, 4, 5, 6]
1
2
3
4
5
6
方法三:使用列表[:]。切片的方法,大家都知道如果不指定start和end,則表示輸出該列表的所以元素。

-- coding: UTF-8 --

a = [1, 2, 3] #把列表a複製到列表b
b = a[:]
print b
1
2
3
4
7.題目:輸出9*9乘法口訣表。

程序分析:分行與列考慮,共9行9列,i控制行,j控制列。如果不要求格式的話,就簡單了,可以任意格式輸出,如下:

-- coding: UTF-8 --

for i in range(1,10):
for j in range(1,10):
x = i j
print "%d
%d = %d" % (i,j,x)
1
2
3
4
5
如果需要考慮輸出格式,我們後面的文章會講到,嘿嘿。

8.題目:暫停一秒輸出。

程序分析:暫停時間的函數爲 time.sleep(),此處可隨意舉例,列表,元組,字典均可。

-- coding: UTF-8 --

import time
d = {"a":1,"b":2}
for i in d:
print i
time.sleep(1) #暫停一秒輸出
1
2
3
4
5
6
9.題目:斐波那契數列。

程序分析:外匯分析 http://www.gendan5.com/tech.html 斐波那契數列(Fibonacci sequence),又稱黃金分割數列,指的是這樣一個數列:0、1、1、2、3、5、8、13、21、34、……。
貨幣符號在數學上,費波那契數列是以遞歸的方法來定義:

n = 1 時 f(1) = 1
n = 2 時 f(2) = 1
n = 3 時 f(3) = f(3-1) + f(3-2)
= f(2) + f(1)
= 1 + 1
= 2
n = 4 時 f(4) = f(4-1) + f(4-2)
= f(3) + f(2)
= 2 + 1
= 3
n = 5 時 f(5) = f(5-1) + f(5-2)
= f(4) + f(3)
= 3 + 2
= 5
..... ...

所以,當 n >= 2 時,表達式爲f(n) = f(n-1) + f(n-2)
n = 1 時 f(1) = 1
n = 2 時 f(2) = 1
n = 3 時 f(3) = f(3-1) + f(3-2)
= f(2) + f(1)
= 1 + 1
= 2
n = 4 時 f(4) = f(4-1) + f(4-2)
= f(3) + f(2)
= 2 + 1
= 3
n = 5 時 f(5) = f(5-1) + f(5-2)
= f(4) + f(3)
= 3 + 2
= 5
..... ...
所以,當 n >= 2 時,表達式爲f(n) = f(n-1) + f(n-2)
1
2
3
4
5
6
7

方法一:

-- coding: UTF-8 --

def fib(n):
a,b = 1,1
for i in range(n-1):
a,b = b,a+b
return a

輸出了第10個斐波那契數列

print fib(10)
1
2
3
4
5
6
7
8
9
10
方法二:

-- coding: UTF-8 --

使用遞歸

def fib(n):
if n==1 or n==2:
return 1
return fib(n-1)+fib(n-2)

輸出了第10個斐波那契數列

print fib(10)
1
2
3
4
5
6
7
8
9
10
方法三:如果你需要輸出指定個數的斐波那契數列,可以使用以下代碼:

-- coding: UTF-8 --

def fib(n):
if n == 1:
return [1]
if n == 2:
return [1, 1]
fibs = [1, 1]
for i in range(2, n):
fibs.append(fibs[-1] + fibs[-2])
return fibs

輸出前 10 個斐波那契數列

print fib(10)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
10.題目:古典問題:有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數爲多少?

程序分析:經過計算和尋找規律得到,兔子的規律爲數列1,1,2,3,5,8,13,21….典型的斐波那契數列,這就是爲什麼我要把斐波那契數列數列放在第九題的原因,那麼根據上一題的方法三,我們就非常輕鬆的求得每月兔子的數量。

此外,還有一種比較漂亮的輸出:

-- coding: UTF-8 --

f1 = 1
f2 = 1
for i in range(1,21):
print '%12ld %12ld' % (f1,f2),
if (i % 3) == 0:
print ''
f1 = f1 + f2
f2 = f1 + f2
1
2
3
4
5
6
7
8
9
10
輸出
1 1 2 3 5 8
13 21 34 55 89 144
233 377 610 987 1597 2584
4181 6765 10946 17711 28657 46368
75025 121393 196418 317811 514229 832040
1346269 2178309 3524578 5702887 9227465 14930352
24157817 39088169 63245986 102334155 165580141 267914296

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