淺談Python在信息學競賽中的運用及Python的基本用法 前言 眾所周知,Python是一種非常實用的語言。但是由於其運算時的低效和解釋型編譯,在信息學競賽中並不用於完成演算法程式。但正如LRJ在《演算法競賽入門經典 訓練指南》中所說的一樣,如果會用Python,在進行一些小程式的編寫,如數據生成器 ...
淺談Python在信息學競賽中的運用及Python的基本用法
前言
眾所周知,Python是一種非常實用的語言。但是由於其運算時的低效和解釋型編譯,在信息學競賽中並不用於完成演算法程式。但正如LRJ在《演算法競賽入門經典-訓練指南》中所說的一樣,如果會用Python,在進行一些小程式的編寫,如數據生成器時將會非常方便,它的語法決定了其簡約性。本文主要介紹一下簡單的Python用法,不會深入。
Python的安裝和實用
Linux(以Ubuntu系統為例)
一般的Linux都自帶了Python,在命令行中輸入Python即可進入
如果沒有出現上圖的文字,可以使用下麵的安裝方法:
sudo apt-get install python2.7
sudo apt-get install python3.4
…………
Windows系統
(筆者目前在Ubuntu系統上,等有時間上Windows再補)
兩種使用Python的方法
直接在命令行中寫
因為Python是解釋型編譯,所以可以一行一行地在命令行中寫。這在初學時用來測試某個語句很實用。比如下麵這個例子:
在>>>
的後面輸入print "yyb love lrh"
,這條語句的作用是輸出一個字元串,然後我們就可以在後面看到結果了。確實輸出了一個字元串(不要在意內容)
文件
我們把Python代碼存在文件中,通常以.py結尾。比如下麵這個例子
我們在一個try.py
中輸入下麵的代碼
print "hello world!"
然後在命令行中編譯python 文件名
我們發現其正確的輸出了。
Python的基本語法
下麵來介紹一些Python的基本語法
註釋
Python中的註釋分單行註釋和多行註釋
print "Hello world" #這是一個單行註釋
'''
這是多行註釋
是多行註釋
多行註釋
行註釋
註釋
釋
。
'''
變數及類型
Python的變數聲明不需要指定類型
用=來給變數賦值,用法與C++一致。比如
yyb=141905 #這是一個整數
lrh=141936.0 #這是一個實數
str="This is a apple.I like apples.Apples are good for our health." #這是一個字元串
Python的字元串可以像字元數組一樣使用(就像C++一樣)比如
str="This is a apple.I like apples.Apples are good for our health."
print str[0] #輸出第一個字元
print str[2:] #輸出從第三個字元開始的字元串
print str[1:3] #輸出從第二個到第三個的字元串,註意是左開右閉
Python的列表可以看做是一個存下任何數據類型(可以混用!)的數組,比如
List=['%',19260817,'frog',666.6]
#調用
print List[0]
print List[2]
Python的字典可以看做是一個映射(類似於C++STL中的map),同樣可以混著用
Map={'name':'yyb','weight':'---','height':3.6}
#調用的時候可以
print Map['name']
print Map['yyb']
以上就是Python常用的幾種數據類型。
另:Python的數類型是非常大的,不需要手寫高精度
數據類型轉換(常見)
函數 | 轉換類型 |
---|---|
int(a) | 轉換成整數 |
long(a) | 轉換成長整數 |
str(n) | 轉換成字元串 |
標準輸入和輸出
使用print輸出。可以是任意類型(列表和字典都可以哦)
print 123
print 'helloworld'
print 123.2
使用input輸入。
number=input("read a int:")
運算符
+
,-
,×
,/
與其意義一致
**
表示冪,a**b
表示\(a^b\)
比較運算符(如==
,!=
,<>
)與C++語言一致
位運算(如&
,|
.~
)與C++語言一致
條件語句
即if,基本語法如下:
if a==b:
print a+b
註意if後面的冒號,並且註意,Python是以縮進來判斷代碼塊的,也就是說如果要在if中執行多個操作,要這樣寫
if a==b:
print a+b
print b+a
print a**b
while迴圈
與if的語法非常類似
i=1
while i<100:
i=i+1
隨機數
數據生成器中最重要的就是隨機數啦,一般來說我會這麼寫
import random
a=int(random.uniform(1,100)) #這裡是生成[1,100]的隨機整數
#如果不加int強制轉換,將會生成隨機小數
一般而言,使用Python的好處就是不要像C++一樣指定隨機數種子,一般取系統時間。而在隨機生成數據對拍時1s內隨機數種子不會變,這樣會導致生成大量重覆數據。
文件操作
open用來打開文件
比如下麵這個例子
fin=open("read.txt","r") #打開一個文件讀入
fout=open("output.txt","w") #打開一個文件寫出
str=fin.read(10) #從read.txt中讀入長度為10的字元串
fout.write(str) #輸出str到output.txt中
# 註意輸入輸出都是字元串,所以如果要輸出一個整數要採用這種方式
a=100
fout.wrote(str(a))
fin.close()
fout.close()
進階內容
以上就是在競賽時常用的Python語法和技巧。但實際操作時難免會碰到其他問題,更多內容可以參考,你會更多地看到Python的方便之處
http://www.runoob.com/python/python-tutorial.html
另外需要註意的是,因為Python運行比較慢,如果要對拍的話,儘量不要寫Python版的。筆者一般只用Python寫數據生成器和簡單的小程式。
本人初學Python,如果還有錯誤,請諸位讀者大佬指出,感激不盡。
PS:後期可能會增加一些內容,有任何建議也可以在評論給出,謝謝