初識python(條件判斷、循環控制、循環次數限制、常用數據類型、字符串格式化、列表常用操作、二進制運算、嵌套循環)


第一天學習

1、pycharm使用遇到的問題:

如果想運行程序A,一定要右鍵去執行程序A,而不能直接左下角run,那樣的話可能會出現運行之前其他程序

 

pycharm小技巧:

1、多行全選,shift+tab整體往前縮進一個tab

2、多行全選,tab整體向后縮進一個tab

3、多行全選,ctrl+/注釋所選代碼,再次按ctrl+/注釋取消所選代碼

4、pycharm中切換3.5和2.7:file菜單-settings-project pycharmPreject--project interpreter選項,可以切換2.7和3.5版本

參考:http://jingyan.baidu.com/article/fec4bce25f677df2618d8be8.html

 

python2.7和3.5兩個版本同時安裝(windows),liniux下自帶python(2.6需要升級到2.7)

1、官網下載這2個版本

2、分別安裝到c盤的根目錄下,去不同的名字,例如c:\python2.7  c:\python3.5

     安裝3.5的時候,有個選擇勾選后,就不用單獨配置環境變量了,會自動加環境變量

3、2.7版本安裝完后,需要手動配置環境變量

     【右鍵計算機】--》【屬性】--》【高級系統設置】--》【高級】--》【環境變量】--》【在第二個內容框中找到 變量名為Path 的一行,雙擊】 --> 【Python安裝目錄追加到變值值中,用 ; 分割】

     如:原來的值;C:\python27,切記前面有分號
4、環境變量配置完畢后, 在cmd下輸入python進入的版本是2.7,輸入python3進入的版本是3.5
參考:http://jingyan.baidu.com/article/b87fe19e94ca95521935686e.html
 
python2.7和3.5的語法主要區別
3.5中
1. 1 / 2 =0.5(2.7中 1/2=0)
2.print(),必須加上小括號(2.7可以不加小括號,也可以加)
3.raw_input沒了,變成了input---這里輸入的都是字符串,2.7中的input相當於3.5中的eval(input())
4.class Foo:經典類沒了,只能是新式類class Foo(object)
 
變量起名:
1.顯式(通俗易懂)    只能字母,數字,下划線
2.nums_of_alex_gf = 19 #下划線
3.NumsOfAlexGf = 2   #駝峰
 
變量命錯誤(注意):
1  .names-of-alex-gf = 22   #錯誤- 減號
2.5name = 數字不能開頭,
3.!name 特殊字符不能有 上一排
4.name of teacher = 不能有空格
5.關鍵字聲明變量名 ['and','class'......]
 

輸入(把用戶輸入的東西存入內存)

輸入 3.5寫法是input  2.7是raw_input(2.7的input,輸入的字符串必須是字符串,"sun"才行,輸入sun不行
# 但是raw_input是可以輸入jack)
# 3.5的input相當於2.7的 raw_input()

流程控制(if-else\while\for\break\continue)
需求:猜數lucky num  num=6 ,猜的數字比6大,打印猜的數太大,猜的數字比6小,打印猜的數太小,
# 三次輸入錯誤,鎖定,要求用for來實現
num = 6

for i in range(3):
s = int(input('請輸入數字:'))#必須放入循環里面才能實現多次
if s > num:
print('太大了')
elif s < num:
print('太小了')
else:
print('猜對了')
break#跳出整個循環
else:#上面的循環正常執行完畢,else才會執行,如果是不正常退出(break),else不會執行
print('3次輸入錯誤,鎖定')

continnue和break的區別:

1、break是跳出整個循環,跳出后,while或者for后面的else也不會執行

2、continue不是跳出整個循環,而是只是跳出當前這次循環(也叫當前迭代),回到循環條件判斷處,繼續下次循環

 

#簡單的嵌套循環(兩層或者多層循環)
# for j in range(2):
#     for i in range(10):
#         if i<5:
#             continue  #跳出本次迭代,繼續下一次迭代
#         if j>1:
#             break  #跳出整個循環
#         print i

 

#如何實現一次跳出多層循環(尤其是多層都是死循環的情況),break一次只能跳出一層循環

loop1 = 0
loop2 = 0
while True:
    loop1 += 1
    print "loop1:",loop1
    break_flag = False  #設置一個跳出flag,用於控制外循環跳出
    while True:
        loop2 += 1
        if loop2 == 5:
            break_flag = True  #跳出內循環前,先把跳出flag置為True
            break   #跳出內循環(第一層),但是外循環還是在循環
        print "loop2:",loop2
    if break_flag:   #外循環跳出的條件具備了 注意這里的if必須和內循環的while同級,而不能在內循環代碼塊中
        print "內循環跳出了,外循環也該跳出了"
        break   #跳出外循環 

 

循環小結:

#輸入正確跳出整個循環的的方式:

    # 1 break

    # 2 flag

#指定3次數鎖定的方式

    # 1 while count<3 count=0 count += 1   else:

  # 2 for i in range(2)  else:

字符串

字符串格式化

#1字符串格式化--推薦下面這個(不推薦加號拼接,浪費內存)   %s字符串  %d數字(%s也能表示字符串) %f浮點數
name = raw_input("name:").strip()  #strip()去掉兩邊的空格  參數默認是去空格  strip("A") 去掉兩邊的"A"
age  = raw_input("age:").strip()
job = raw_input("job:").strip()
msg = """
information of %s:
    name:%s
    age:%s
    job:%s
"""  % (name,name,age,job)  #這里是4個參數,兩個name
print msg
# 輸出
# information of jack:
#     name:jack
#     age:15
#     job:it

 

字符串拆分

name_str = "jack_tom_bob"
print  name_str.split("_")  #['jack', 'tom', 'bob'] (字符串變列表,對字符串進行切片)

 

列表

#列表的作用是為了在一個變量中存儲多個信息

#1列表和字符串、元組間的互相轉換

name_str = "jack_tom_bob"

print  name_str.split("_")  #['jack', 'tom', 'bob'] (字符串變列表)

 

name_list = ["jack","18","jack","tom","jack","18"]  #創建列表

print tuple(name_list)  #('jack', '18', 'jack', 'tom', 'jack', '18')  #列表轉換成元組

 

str1 = "_".join(name_list)   #jack_18_jack_jack_18(列表變字符串)

print str1

 

print dir(name_list)  #輸出列表中包含的內置方法,主要關注不是2個下划線開頭的 ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__doc__', '__eq__',  '__format__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__',  '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__',  '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__',    '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__',  

'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

 

#列表切片:

name_list = ['jack','18','sex','nan','ff','ee','cc']
print(name_list[:3])
print(name_list[1:4])
print(name_list[:-1])
print(name_list[:6:2])
print(name_list[:])

name_list = ['jack','18','sex','18']
name_list1 = ['ff','ee','cc']

name_list.append('cc')

print (name_list = ['jack','18','sex','nan','cc']) #增加元素到列表,最后一位
print(name_list.count('18'))   #18在列表中次數    2次

name_list.extend(name_list1)
print(name_list) #['jack','18','sex','18','ff','ee','cc'] 將列表name_list1 合並到nam_list里面

print(name_list.index('sex')) #列表中元素的索引 2

name_list1 = ['ff','ee','cc']
name_list1.insert(1,'cc')
print(name_list1) # 在索引是1的地方插入一個元素['ff', 'cc', 'ee', 'cc']
name_list1.pop()       #刪除最后一個元素 ['ff', 'ee']  
name_list1.remove('ff')      #刪除"ff"這個元素  ['ee', 'cc']
name_list1.reverse()         #列表元素進行反轉   ['cc', 'ee', 'ff']
name_list1.sort()           #按照asci順序排序列表的所有元素  ['cc', 'ee', 'ff']


#需求:如何刪除一個擁有比如400w個元素的列表中的指的元素,例如:"jack"        參考  http://www.cnblogs.com/wangtp/articles/5079839.html

for i in range(name_list.count("jack")):

# 思路:先計算列表中想要刪除的字符串"jack"一共是多少個count,如果是3個, 那么遍歷列表的時候,刪除remove3次"jack"即可    

  name_list.remove("jack")

print name_list

 

name_list = ["jack","18","jack","jack","18"]

for i in range(3):    

  name_list.remove("jack")

print name_list

 
         

元組

 
         

#元組和列表的區別:元組是只讀的,不能修改

 
         

tuple_name = (1,3)  #創建元組

 
         

print dir(tuple_name)  #顯示元組的內置方法

 
         

['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__',  '__getattribute__', '__getitem__', '__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__',  '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__',  '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__',  'count', 'index']

 
         

print list(tuple_name)  #[1, 3]  元組轉換成列表

 
 
         

位運算

 
         

# a = 60            # 60 = 0011 1100
# b = 13            # 13 = 0000 1101
# c = 0
# c = a & b;        # 12 = 0000 1100   位與"&" 2個都是真1,結果才是真1
# print "Line 1 - Value of c is ", c

# c = a | b;        # 61 = 0011 1101    或"|"只有一個是真1,結果就是真1
# print "Line 2 - Value of c is ", c

# c = a ^ b;        # 49 = 0011 0001     異或"^" 只有一真1一假0,結果就是真1
# print "Line 3 - Value of c is ", c

# c = ~a;           # -61 = 1100 0011    #相當於1取反是0,,0取反是1
# print "Line 4 - Value of c is ", c

# c = a << 2;       # 240 = 1111 0000  #左移2位
# print "Line 5 - Value of c is ", c

# c = a >> 2;       # 15 = 0000 1111   #右移兩位
# print "Line 6 - Value of c is ", c

 

文件操作(寫、讀、追加、光標移動)

打開文件:# #   

file_obj = file("文件路徑","模式") #      

obj = open("文件路徑","模式") # #

打開文件的模式有:# #

r,以只讀方式打開文件 # 

w,打開一個文件只用於寫入。如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件。 # 

a,打開一個文件用於追加。如果該文件已存在,文件指針將會放在文件的結尾。 #      也就是說,新的內容將會被寫入到已有內容之后。如果該文件不存在,創建新文件進行寫入。 # 

w+,打開一個文件用於讀寫。如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件。 # #

 

讀取文件的內容: # #

一次性加載所有內容到內存 # obj.read() # # #

一次性加載所有內容到內存,並根據行分割成字符串,每個行字符串作為列表的一個元素 # obj.readlines() # # #

每次僅讀取一行數據,遍歷文件的每行 # for line in obj:# #   print line # # 寫文件的內容: # obj.write('內容')

 

關閉文件句柄:# #

obj.close() # obj = open("log","w")   #

 

寫的模式新建一個文件對象

obj.write("first\n")    #

寫入2行文本

obj.write("second line\n")  #\n是換行符

obj = open("log","a")   #追加的模式往文件追加2行 obj.write("third\n")    #追加寫入2行文本 obj.write("fourth line\n")

obj = open("log","r")   #只讀的模式,將文件內容讀入到內存 #

print obj.read()  #讀出文件所有的內容 #

print obj.readlines()    #每個行字符串作為列表的一個元素,包含換行符(空格和換行符可以用strip去掉) #['first\n', 'second line\n', 'third\n', 'fourth line\n']

for i in obj:    

  print i,  #這里加上逗號,可以去掉空行 print obj.tell()  #40 顯示光標目前的位置,是第40個字符

 

# 文件的光標定位 #

obj.seek(0)   光標回到文件的最開始處 #

obj.tell()   顯示當前光標在文件的位置 #

 

#文件的光標的移動

# obj.seek(0)   #光標回到文件最開始處,第二個參數可以不寫,默認就是文件開始0

# obj.seek(0,0)  #光標回到文件最開始處

obj.seek(12,0) #光標回到以文件0開始,第12個字符處

print obj.tell()

obj.seek(6,1)  #光標從當前位置1開始,第6個字符處

print obj.tell()

obj.seek(3,2)  #光標從文件最后2開始,第3個字符處

print obj.tell()  #0 顯示光標目前的位置,是第0個字符

 

# seek小結

# 第二個參數,0代表文件開始,1代表文件當前,2代表文件結尾

# 第一個參數,代表位移的字符個數

 
 


 
 
         
 


 





 
 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM