1. 程式人生 > >python 闖關之路一(語法基礎)

python 闖關之路一(語法基礎)

英文 下劃線 .... 保存數據 bject 分用 alex 否則 變化

1,什麽是編程?為什麽要編程?

  答:編程是個動詞,編程就等於寫代碼,那麽寫代碼是為了什麽呢?也就是為什麽要編程呢,肯定是為了讓計算機幫我們搞事情,代碼就是計算機能理解的語言。

2,編程語言進化史是什麽?

  答:機器語言  ------>   匯編語言   ------>  高級語言

  機器語言:由於計算機內部只能接受二進制代碼,因此,用二進制代碼0和1描述的指令稱為機器指令,全部機器指令的集合構成計算機的機器語言,機器語言屬於低級語言。

  匯編語言:其實質和機器語言是相同的,都是直接對硬件操作,只不過指令采取了英文縮寫的標識符,更容易識別和記憶。

  高級語言:是大多數編程人員的選擇,和匯編語言相比,他不但將許多相關的機器指令合成為單條指令,並且去掉了與具體操作相關但與完成工作無關的細節,高級語言主要是相對於匯編語言而言,它並不是特指某一種具體的語言,而是包含了許多編程語言。如C/C++,JAVA,PHP,PYTHON等都屬於高級語言。

  機器語言:優點是最底層,速度快,缺點是復雜,開發效率低

  匯編語言:優點是比較底層,速度快,缺點是復雜,開發效率低

  高級語言:編譯型語言執行速度快,不依賴語言環境運行,跨平臺差

       解釋型跨平臺比較好,一份代碼,到處使用,缺點是執行效率慢,依賴解釋器運行

相比於機器和匯編語言,高級語言對開發人員更友好,在開發效率上大大提高。

3,簡述編譯型與解釋型語言的區別,且分別列出你知道的哪些語言屬於編譯型,那些屬於解釋型

  高級語言所編制的程序不能被計算機所知別,必須講過轉換才能被執行,按照轉換方式,可以將其分為兩類,一類是編譯類,一類是解釋類

  編譯類:就是在應用源碼程序執行之前,就將程序源代碼“翻譯”成目標代碼(機器語言),因此其目標程序可以脫離其語言環境獨立執行。使用比較方便,效率也高,但是應用程序一旦需要修改,必須先修改源代碼,再重新編譯生成新的目標(*.obj ,也就是OBJ文件)才能執行,只有目標文件而沒有源代碼,修改很不方便。

  特點:編譯後程序運行時不需要重新翻譯,直接使用編譯的結果就行了。程序執行效率高,依賴編譯器,跨平臺性比較差,如C,C++,Delphi等

  優點:1,執行程序時候,不需要源代碼,不依賴語言環境,因為執行的是機器源文件。

      2,執行速度快,因為程序代碼已經翻譯成計算機可以理解的機器語言。

  缺點:1,每次修改了源代碼,需要重新編譯,生成機器編碼文件

      2,跨平臺性不好,不同操作系統,調用底層的機器指令不同,需要為不同的平臺生成不同的機器碼文件。

  解釋類:執行方式類似於我們生活中的“同聲翻譯”,應用程序源代碼一邊由相應語言的解釋器“翻譯”成目標代碼(機器語言),一邊執行,一邊翻譯,因此效率比較低。

  特點:效率低,不能生成獨立的可執行文件,應用程序不能脫離其解釋器,但是這種方式比較靈活,可以動態的調整,修改應用程序。如Python,Java,PHP,Ruby等語言。

  優點:1,用戶調用解釋器,執行源碼文件,而且可以隨時修改,立即見效,改完源代碼,直接運行看結果

      2,解釋器把源碼文件一邊解釋成機器指令,一邊交給CPU執行,天生跨平臺,因為解釋器已經做好了對不同平臺的交互處理,用戶寫的源代碼不需要考慮平臺差異性。

  缺點:1,代碼是明文

      2,運行效率低,所有的代碼是需要解釋器邊解釋邊執行,速度比編譯型慢很多。

4,執行python腳本的兩種方式是什麽?

  1,交互器執行,在控制臺上運行臨時輸入的代碼

  2,文件操作,執行一個保存好的py文件

  兩者的區別是:一個是內存操作,一個是硬盤操作,

  內存的特點是:讀取速度快,但是斷電就丟失數據

  硬盤的特點是:速度慢,但可以保存數據

5,聲明變量註意事項是什麽?

  變量定義規則:

    1,變量名只能是字母,數字或者下劃線的任意組合

    2,變量名的第一個字符不能是數字

    3,關鍵字不能生命問變量名

  註意事項:

    1,變量名不能過長

    2,變量名詞不達意思

    3,變量名為中文,拼音

6,什麽是常量?

  常量指不變的量,或者在程序運行過程中不會改變的量

  在python中沒有一個專門的語法代表常量,程序員約定俗成用變量名全部大寫代表常量

7,python的單行註釋和多行註釋分別用什麽?

  單行註釋# 多行註釋"""

  代碼註釋原則:

    1,不用全部加註釋,只需要在自己覺得重要或者不好理解的部分加註釋即可

    2,註釋可以用中文或者英文,但絕對不要拼音

8,布爾值分別有什麽?

  布爾類型很簡單,就兩個值,一個是True(真),一個是False(假),主要用於邏輯判斷

9,如何查看變量在內存中的地址?

這裏使用id

print(id.__doc__)
Return the identity of an object.
This is guaranteed to be unique among simultaneously existing objects.
(CPython uses the object‘s memory address.)

10,寫代碼

  10-1,實現用戶輸入用戶名,當用戶名為james,密碼是123456,顯示登陸成功,否則登陸失敗。

_username = "james"
_password = "123456"
username = input("請輸入名字>>>")
password= input("請輸入密碼>>>")

if username==_username and password==_password:
    print("登陸成功")
else:
    print("登陸失敗")

  

  10-2,實現用戶輸入用戶名,當用戶名為james,密碼是123456,顯示登陸成功,否則登陸失敗,失敗次數允許重復三次

_username = "james"
_password = "123456"

count =0

while count<3:
    username = input("請輸入名字>>>")
    password = input("請輸入密碼>>>")
    if username==_username and password==_password:
        print("登陸成功")
        break
    else:
        print("登陸失敗")
    count +=1

 

  10-3,實現用戶輸入用戶名,當用戶名為james,密碼是123456,顯示登陸成功,否則登陸失敗,失敗次數允許重復三次

_username = "james"
_password = "123456"

count =0

while count<3:
    username = input("請輸入名字>>>")
    password = input("請輸入密碼>>>")
    if username==_username or password==_password:
        print("登陸成功")
        break
    else:
        print("登陸失敗")
    count +=1

11,寫代碼

a,使用while循環實現輸出2-3+4-5+6....+100的和

count =2
num =0
while count<=100:
    if count%2==0:
        num = num+count
    else:
        num = num -count
    count+=1
print(num)

  

b,使用while循環實現輸出1,2,3,4,5,7,8,9,11,12

count =1
while count<=12:
    if count==6 or count==10:
        pass
    else:
        print(count)
    count+=1

c,使用while循環輸出100-50,從大到小,如100,99,98...,到50時候再從0循環輸出到50,然後結束

count =100
while count > 50:
    print(count)
    count -=1
    if count==50:
        count=1
        while count<=50:
            print(count)
            count+=1
        break

  

d,使用while循環實現輸出1-100內所有的奇數

count =0
while count <=100:
    if count %2!=0:
        print(count)
    count +=1

  

e,使用while循環實現輸出1-100內所有的偶數

count =0
while count <=100:
    if count %2==0:
        print(count)
    count +=1

  

12,編程題:輸入一年份,判斷該年份是否屬於閏年並輸出結果

(註意閏年條件:1,能被四整除但不能被一百整除,2,能被四百整除)

if number%4==0 and number%100!=0 or number%400==0:
    print("%s 是閏年"%number)
else:
    print("%s 不是閏年" % number)

  

13,編程題:假設一年期定期利率為3.24%,計算一下需要經過多少年,一萬元的一年定期存款連本帶息能翻倍?

money =10000
rate = 0.0324
years =0
while money <20000:
    years+=1
    money  = money*(1+rate)
print(str(years))

14,什麽是運算符?

  計算機可以進行的運算有很多種,可不止加減乘除那麽簡單,運算按種類可以分為算數運算,比較運算,邏輯運算,賦值運算,成員運算,身份運算,位運算等

  下面簡單介紹算術運算,比較運算,邏輯運算,賦值運算

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

15,什麽是循環終止語句?

  如果在循環的過程中,因為某些原因,你不想繼續循環了,怎麽把它終止掉呢?這就用到了break或者continue語句了

  break用於完全結束一個循環,跳出循環體執行循環後面的語句

  continue和break有點類似,區別在於continue只是終止本次循環,接著還執行後面的循環,break則完全終止循環

16,python中斷多重循環的方法exit_flag

常見的方法:
exit_flag = flase
for 循環:
    for 循環:
        if 條件
            exit_flag = true
            break   #跳出裏面的循環
        if exit_flag:
            break  #跳出外面的循環

17,基本數據類型和擴展數據類型的分類?

基本數據類型:

  可變數據類型:列表,字典,集合

  不可變數據類型:字符串,元祖,數字

擴展性數據類型:

  1,namedtuole():生成可以使用名字來訪問元素內容的tuple子類

  2,deque:雙端隊列,可以快速的從另一側追加和推出對象

  3,counter:計數器,主要用來計數

  4,orderdict:有序字典

  5,defaultdict:帶有默認值的字典

18,元組的特點和功能

特點:

  不可變,所以又稱只讀列表

  本身不可變,但是如果元祖中還包含了其他可變元素,這些可變元素可以改變

功能:

  索引

  count

  切片

19,簡單講一下hash

  hash,一般翻譯做“散列”,也有直接音譯為“哈希”的,就是把任意長度的輸入,通過散列算法,變化成固定長度的輸出,該輸出就是散列值,這種轉換是一種壓縮映射,也就是,散列值的空間通常遠小於輸入的空間,不同的輸入可能散列成相同的輸出,所以不可能從散列值來唯一的確定輸入值,簡單的說就是有一種將任意長度的消息壓縮到某一固定長度的函數。

  特性:hash值的計算過程是依據這個值的一些特性計算的,這就要求被hash的值必須固定,因此被hash的值是不可變的。

20,為什麽使用16進制

  1,計算機硬件是0101二進制,16進制剛好是2的倍數,更容易表達一個命令或者數據,十六進制更簡短,因為換算的時候一位16進制數可以頂4位二進制數,也就是一個字節(8位進制可以用兩個16進制表示)

  2,最早規定ASCII字符采取的就是8bit(後期擴展了,但是基礎單位還是8bit),8bit用兩個16進制直接就能表達出來,不管閱讀還是存儲逗逼其他進制更方便。

  3,計算機中CPU計算也是遵循ASCII字符串,以16,32,64這樣的方法在發展,因此數據交換的時候16進制也顯得更好

  4,為了統一規範,CPU,內存,硬盤我們看到的都是采取的16進制計算

21,字符編碼轉換總結

python2.x

    內存中字符默認編碼是ASCII,默認文件編碼也是ASCII

    當聲明了文件頭的編碼後,字符串的編碼就按照文件編碼來,總之,文件編碼是什麽,那麽python2.x的str就是什麽

    python2.x的unicode是一個單獨的類型,按u"編碼"來表示

    python2.x str==bytes,bytes直接是按照字符編碼存成2進制格式在內存裏

python3.x

    字符串都是unicode

    文件編碼都默認是utf-8,讀到內存會被python解釋器自動轉成unicode

    bytes和str做了明確的區分

    所有的unicode字符編碼後都會編程bytes格式

22,請用代碼實現,查找列表中元素,移除每個元素的空格,並查找以a或者A開頭並且以c結尾的所有元素

li =[‘alex‘,‘eric‘,‘rain‘]
tu =(‘alex‘,‘aric‘,‘Tony‘,‘rain‘)
dic = {‘k1‘:‘alex‘,‘aroc‘:‘dada‘,‘k4‘:‘dadadad‘}
for i in li:
    i_new = i.strip().capitalize()
    if i_new.startswith(‘A‘) and i_new.endswith(‘c‘):
        print(i_new)

for i in tu:
    i_new0 = i.strip().capitalize()
    if i_new0.startswith(‘A‘) and i_new.endswith(‘c‘):
        print(i_new0)

for i in dic:
    i_new1 = i.strip().capitalize()
    if i_new1.startswith(‘A‘) and i_new.endswith(‘c‘):
        print(i_new1)

23,利用for循環和range輸出9*9乘法表

for i in range(1,10):
    for j in range(1,i+1):
        print(str(i)+"*"+str(j) +"="+str(i*j),end=‘ ‘)
    print( )

  

24,利用for循環和range循環輸出:

  1,for循環從大到小輸出1-100

  2,for循環從小到大輸出100-1

  3,while循環從大到小輸出1-100

  4,while循環從小到大輸出100-1

a =info.setdefault(‘age‘)
print(a)
print(info)
b =info.setdefault(‘sex‘)
print(b)
print(info)

for i in range(1,101):
    print(i)
value =list(range(1,101))
print(value)
for i in range(100,0,-1):
    print(i)
value =list(range(100,1,-1))
i =1
while i<101:
    print(i)
    i+=1

i =100
while i>0:
    print(i)
    i-=1

25,有兩個列表,l1和l2 l1 =[11,22,33] l2 = [22,33,44]

  1,獲取內容相同的元素列表

  2,獲取l1中有,l2中沒有的元素

  3,獲取l2中有,l1中沒有的元素

  4,獲取l1中沒有,l2中沒有的元素

l1 = [11,22,33]
l2 = [22,33,44]
a =[]
for i1 in l1:
    for i2 in l2:
        if i1==i2:
            a.append(i1)
print(a)

a =[]
for i1 in l1:
   if i1 not in l2:
            a.append(i1)
print(a)


a =[]
for i1 in l2:
   if i1 not in l1:
            a.append(i1)
print(a)


a1 =set(l1)&set(l2)
print(a1)
a2 =set(l1)^set(l2)
print(a2)

26,列舉布爾值為False的所有值

  所有標準對象均可用於布爾測試,同類型的對象之間可以比較大小,每個對象天生具有布爾值,空對象,值為0的任何數字或者Null對象None的布爾值都是False

下面對象的布爾值為False:
        所有值為0的數
        0(整數)
        0(浮點數)
        0L(長整形)
        0.0+0.0j(復數)
        “”(空字符串)
        [](空列表)
        ()(空元組)
        {}(空字典)

  值不是上面列出來的都是True.

27,輸入商品列表,用戶輸入序號,顯示用戶選中的商品,商品=【‘手機’,‘電腦’,‘電視’,‘冰箱’】允許用戶添加內容,用戶輸入序號顯示內容

print("輸出商品列表,用戶輸入序號,顯示用戶選中的商品")
li = ["手機", "電腦", ‘鼠標墊‘, ‘遊艇‘]
for i,j in enumerate(li,1): #自定義列表索引下標,從1開始,將列表索引下標賦值給i,將列表值賦值給j
    print(i,j)#打印出列表的索引下標,和列表的值
a = input("請輸入商品序號") #要求用戶輸入商品序號
if a.isdigit():#判斷用戶輸入的是否是純數字
    pass
else:
    exit("你輸入的不是有效的商品序號")#如果不是純數字打印提示信息,並且退出程序,不在往下執行
a = int(a) #將用戶輸入的序號轉換成數字類型
b = len(li)#統計li列表的元素個數
if a > 0 and a <= b: #判斷
    c = li[a-1]
    print(c)
else:
    print("商品不存在")

  

28,元素分類,有如下集合 [11,22,33,44,55,66,77,88,99],將所有大於66的值保存到第一個key的值中,將所有小於66的值保存到第二個key的值中,{‘k1‘:大於66的值,‘k2’:‘小於66的值}

list1 = [11,22,33,44,55,66,77,88,99]

b =[]
c=[]
for i in list1:
    if i>66:
        b.append(i)
    else:
        c.append(i)
print(b)
print(c)
dict1 = {‘k1‘:b,‘k2‘:c}

  

29,元素分類,有如下集合 [11,22,33,44,55,66,77,88,99],將所有大於66的值保存到一個列表,小於66的保存到另一個列表

list1 = [11,22,33,44,55,66,77,88,99]
dict1 = {‘k1‘:{},‘k2‘:{}}
b =[]
c=[]
for i in list1:
    if i>66:
        b.append(i)
    else:
        c.append(i)
print(b)
print(c)

30,查找列表,元組,字典,中元素,移除每個元素的空格,並查找以 a或A開頭 並且以 c 結尾的所有元素。

  li = ["alec", " aric", "Alex", "Tony", "rain"] tu = ("alec", " aric", "Alex", "Tony", "rain") dic = {‘k1‘: "alex", ‘k2‘: ‘ aric‘, "k3": "Alex", "k4": "Tony"}
print("查找列表中元素,移除每個元素的空格,並查找以 a或A開頭 並且以 c 結尾的所有元素。")
li = ["aleb", " aric", "Alex", "Tony", "rain"]
for i in li:
    b = i.strip() #移除循環到數據的兩邊空格
    #判斷b變量裏以a或者A開頭,並且以c結尾的元素
    #註意:如果一個條件語句裏,or(或者),and(並且),都在條件判斷裏,將前面or部分用括號包起來,當做一個整體,
    #不然判斷到前面or部分符合了條件,就不會判斷and後面的了,括起來後不管前面符不符合條件,後面的and都要判斷的
    if (b.startswith("a") or b.startswith("A")) and b.endswith("c"):
        print(b) #打印出判斷到的元素
tu = ("aleb", " aric", "Alex", "Tony", "rain")
for i in tu:
    b = i.strip()
    if (b.startswith(‘a‘) or b.startswith("A")) and b.endswith("c"):
        print(b)
dic = {‘k1‘: "alex", ‘k2‘: ‘ aric‘,"k3": "Alex","k4": "Tony"}
for i in dic:
    b =dic[i].strip()
    if( b.startswith(‘a‘) or b.startswith("A") )and b.endswith("c"):
        print(b)

31,寫代碼:有如下列表,請按照功能要求實現每一功能

  li=[‘hello‘,‘seveb‘,[‘mon‘,[‘h‘,‘key‘],‘all‘,123,446]

  1,請根據索引輸出‘kelly’

  2,請使用索引找到”all“元素,並將其修改為”ALL“,如”li[0][1][9]...

li =[‘hello‘,‘seven‘,[‘mon‘,[‘h‘,‘kelly‘],‘all‘],123,446]
print(li[2][1][1])

print(li[2][2])
li[2][2] = "ALL"
print(li[2][2])
a = li[2][2].upper()
print(a)
li[2][index] ="ALL"
print(li)

32,寫代碼,要求實現下面每一個功能

  li=[‘alex‘,‘eric‘,‘rain‘]

  1,計算列表長度並輸出

  2,列表中追加元素“servn",並輸出添加後的列表

  3,請在列表的第一個位置插入元素‘tony’,並輸出添加後的列表

  4,請修改列表位置元素‘kelly’,並輸出修改後的列表

  5,請在列表刪除元素‘eric’,並輸出刪除後的列表

  6,請刪除列表中的第2個元素,並輸出刪除後的元素的值和刪除元素後的列表

  7,請刪除列表中的第三個元素,並輸出刪除後的列表

  8,請刪除列表的第2到4個元素,並輸出刪除元素後的列表

  9,請用for len range輸出列表的索引

  10,請使用enumrate輸出列表元素和序號

  11,請使用for循環輸出列表中的所有元素

li = [‘alex‘,‘eric‘,‘rain‘]
# 1,計算列表長度並輸出
# print(len(li))
# 列表中追加元素“seven”,並輸出添加後的列表
# li.append(‘seven‘)
# print(li)
# 請在列表的第1個位置插入元素“Tony”,並輸出添加後的列表
# li.insert(1,‘tony‘)
# print(li)
#請修改列表第2個位置的元素為“Kelly”,並輸出修改後的列表
# li[1] =‘kelly‘
# print(li)
# 請刪除列表中的元素“eric”,並輸出修改後的列表
# a =li.pop(2)
# print(li)
# li.remove(‘eric‘)
# print(li)
# 請刪除列表中的第2個元素,並輸出刪除元素後的列表
# b =li.pop(1)
# print(b)
# print(li)
# 請刪除列表中的第2至4個元素,並輸出刪除元素後的列表
# c = li[2:4]
# d = set(li)-set(c)
# # print(list(d))
# del li[1:4]
# print(li)
# 請將列表所有的元素反轉,並輸出反轉後的列表
# e = li.reverse()
# print(li)
# 請使用for、len、range輸出列表的索引
# for i in range(len(li)):
#     print(i)
# 請使用enumrate輸出列表元素和序號(序號從100開始)
# for index in enumerate(li):
#     print(index)
# for index,i in enumerate(li,100):
#     print(index,i)
# for i in li:
#     print(i)

33,寫代碼,有如下元組,請按照功能要求實現每一個功能

  tu = (‘alex‘,‘eric,‘rain‘)

  1,計算元組的長度並輸出

  2,獲取元祖的第二個元素,並輸出

  3,獲取元祖的第1-2個元素,並輸出

  4,請用for輸出元祖的元素

  5,請使用for,len,range輸出元組的索引

  6,請使用enumerate輸出元組元素和序號,(從10開始)

 

tu = (‘alex‘,‘eric‘,‘rain‘)
#   1,計算元組的長度並輸出
print(len(tu))
#   2,獲取元祖的第二個元素,並輸出
print(tu[1])
#   3,獲取元祖的第1-2個元素,並輸出
print(tu[0:2])
#   4,請用for輸出元祖的元素
for i in tu:
    print(i)
#   5,請使用for,len,range輸出元組的索引
for i in range(len(tu)):
    print(i)
#   6,請使用enumerate輸出元組元素和序號,(從10開始)
for index,i in enumerate(tu,10):
    print(index,i)

三十四,有如下變量,請實現要求的功能
  tu=("alex",[11,22,{"k1":‘v1‘,"k2":["age","name"],"k3":(11,22,33)},44])

  a.講述元祖的特性
  答:元組具有列表的全部特性,不同的是,元組的元素不能修改

  b.請問tu變量中的第一個元素“alex”是否可被修改?
  答:不能


  c.請問tu變量中的"k2"對應的值是什麽類型?是否可以被修改?如果可以,請在其中添加一個元素“Seven”

  答:列表 ,可以

tu = ("alex", [11, 22, {"k1": ‘v1‘, "k2": ["age", "name"], "k3": (11, 22, 33)}, 44])
tu[1][2]["k2"].append("Seven")
print(tu)

  

  d.請問tu變量中的"k3"對應的值是什麽類型?是否可以被修改?如果可以,請在其中添加一個元素“Seven”

  答: 元組,不能

三十五,練習字典

  dic={‘k1‘:"v1","k2":"v2","k3":[11,22,33]}

  a.請循環輸出所有的key

  b.請循環輸出所有的value

  c.請循環輸出所有的key和value

  d.請在字典中添加一個鍵值對,"k4":"v4",輸出添加後的字典

  e.請在修改字典中“k1”對應的值為“alex”,輸出修改後的字典

  f.請在k3對應的值中追加一個元素44,輸出修改後的字典

  g.請在k3對應的值的第1個位置插入個元素18,輸出修改後的字典

dic={‘k1‘:"v1","k2":"v2","k3":[11,22,33]}
#   a.請循環輸出所有的key
for i in dic :
    print(i)
for i in dic.keys():
    print(i)
#   b.請循環輸出所有的value
for i in dic.values():
    print(i)
#  c.請循環輸出所有的key和value
for i,j in dic.items():
    print(i,j)
#   d.請在字典中添加一個鍵值對,"k4":"v4",輸出添加後的字典
dic2 = {‘k4‘:‘v4‘}
dic.update(dic2)
print(dic)
dic[‘k4‘] = ‘v4‘
print(dic)

#   e.請在修改字典中“k1”對應的值為“alex”,輸出修改後的字典
dic[‘k1‘] =‘alex‘
print(dic)
#   f.請在k3對應的值中追加一個元素44,輸出修改後的字典
dic[‘k3‘].append(44)
print(dic)
#   g.請在k3對應的值的第1個位置插入個元素18,輸出修改後的字典
dic[‘k3‘].insert(0,18)
print(dic)

  

python 闖關之路一(語法基礎)