似乎很難找到OJ允許提交Python,好不容易發現NEUQ的OJ可以交Python,但是隻支持2.7,這……就比較尷尬了……
迫於無奈,只好上網搜題目做,然後自己測試(畢竟我還只是個Hello World水平的Python小白)
然後就看到一道小時候難住了很多人的題(當老師說這道題是用枚舉法做的時候,我……(╯‵□′)╯︵┻━┻)
題面如下:
題目:有四個數字:1、2、3、4,能組成多少個互不相同且無重複數字的三位數?各是多少?
分析:
其實,這道題……好像只能暴力解(即使是用c++寫,也會毫不猶豫的使用暴力法解)
代碼如下:
for i in range(1,5):
for j in range(1,5):
for t in range(1,5):
if((i!=j)and(j!=t)and(i!=t)):
print (i,j,t)
輸出:
1 2 3
1 2 4
1 3 2
1 3 4
1 4 2
1 4 3
2 1 3
2 1 4
2 3 1
2 3 4
2 4 1
2 4 3
3 1 2
3 1 4
3 2 1
3 2 4
3 4 1
3 4 2
4 1 2
4 1 3
4 2 1
4 2 3
4 3 1
4 3 2
‘’‘
如上↑是3.0版的
下面提供2.7版的↓
‘’’
for i in range(1,5):
for j in range(1,5):
for t in range(1,5):
if((i!=j)and(j!=t)and(i!=t)):
print i,j,t
(1, 2, 4)
(1, 3, 2)
(1, 3, 4)
(1, 4, 2)
(1, 4, 3)
(2, 1, 3)
(2, 1, 4)
(2, 3, 1)
(2, 3, 4)
(2, 4, 1)
(2, 4, 3)
(3, 1, 2)
(3, 1, 4)
(3, 2, 1)
(3, 2, 4)
(3, 4, 1)
(3, 4, 2)
(4, 1, 2)
(4, 1, 3)
(4, 2, 1)
(4, 2, 3)
(4, 3, 1)
(4, 3, 2)
其實,這段代碼初看沒覺得有什麼問題,但是……由於之前用的是c++,所以特別不能理解爲什麼是range(1,5),還有爲什麼range(1,5)之後最大隻到了4,如果說()這樣是開區間,那又爲什麼取得到1?
出於好奇,我就把所有的5都改成了4,輸出:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
由此可見,這個5應該是小於5的意思。
把所有的1都改爲0之後輸出如下:
0 1 2
0 1 3
0 1 4
0 2 1
0 2 3
0 2 4
0 3 1
0 3 2
0 3 4
0 4 1
0 4 2
0 4 3
1 0 2
1 0 3
1 0 4
1 2 0
1 2 3
1 2 4
1 3 0
1 3 2
1 3 4
1 4 0
1 4 2
1 4 3
2 0 1
2 0 3
2 0 4
2 1 0
2 1 3
2 1 4
2 3 0
2 3 1
2 3 4
2 4 0
2 4 1
2 4 3
3 0 1
3 0 2
3 0 4
3 1 0
3 1 2
3 1 4
3 2 0
3 2 1
3 2 4
3 4 0
3 4 1
3 4 2
4 0 1
4 0 2
4 0 3
4 1 0
4 1 2
4 1 3
4 2 0
4 2 1
4 2 3
4 3 0
4 3 1
4 3 2
猜測:這裏的1是大於等於1的意思
(╯‵□′)╯︵┻━┻,不要告訴我這還有左必有開區間
以下,附for循環相關基礎知識:
Python for 循環語句
Python for循環可以遍歷任何序列的項目,如一個列表或者一個字符串。
語法:
for循環的語法格式如下:
for iterating_var in sequence:
statements(s)
實例:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
for letter in 'Python': # 第一個實例
print '當前字母 :', letter
fruits = ['banana', 'apple', 'mango']
for fruit in fruits: # 第二個實例
print '當前水果 :', fruit
print "Good bye!"
以上實例輸出結果:
當前字母 : P 當前字母 : y 當前字母 : t 當前字母 : h 當前字母 : o 當前字母 : n 當前水果 : banana 當前水果 : apple 當前水果 : mango Good bye!
通過序列索引迭代
另外一種執行循環的遍歷方式是通過索引,如下實例:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
fruits = ['banana', 'apple', 'mango']
for index in range(len(fruits)):
print '當前水果 :', fruits[index]
print "Good bye!"
以上實例輸出結果:
當前水果 : banana 當前水果 : apple 當前水果 : mango Good bye!
以上實例我們使用了內置函數 len() 和 range(),函數 len() 返回列表的長度,即元素的個數。 range返回一個序列的數。
循環使用 else 語句
在 python 中,for … else 表示這樣的意思,for 中的語句和普通的沒有區別,else 中的語句會在循環正常執行完(即 for 不是通過 break 跳出而中斷的)的情況下執行,while … else 也是一樣。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
for num in range(10,20): # 迭代 10 到 20 之間的數字
for i in range(2,num): # 根據因子迭代
if num%i == 0: # 確定第一個因子
j=num/i # 計算第二個因子
print '%d 等於 %d * %d' % (num,i,j)
break # 跳出當前循環
else: # 循環的 else 部分
print num, '是一個質數'
以上實例輸出結果:
10 等於 2 * 5 11 是一個質數 12 等於 2 * 6 13 是一個質數 14 等於 2 * 7 15 等於 3 * 5 16 等於 2 * 8 17 是一個質數 18 等於 2 * 9 19 是一個質數