Python入門一:基本數據類型

来源:http://www.cnblogs.com/EdwardTang/archive/2016/08/20/5786007.html
-Advertisement-
Play Games

作為一個剛入門編程的大一狗,第一次寫博客,希望能對自己學的知識進行鞏固和提升,也希望記錄自己成長的過程。 學習Python,一是因為暑假學的c++頭疼,聽說Python簡單,那我就試試吧,二是因為Python形勢一片大好,算是附和潮流吧! 一、初識Python 1、第一個Python代碼 依然是熟悉 ...



 

作為一個剛入門編程的大一狗,第一次寫博客,希望能對自己學的知識進行鞏固和提升,也希望記錄自己成長的過程。

學習Python,一是因為暑假學的c++頭疼,聽說Python簡單,那我就試試吧,二是因為Python形勢一片大好,算是附和潮流吧!


 一、初識Python

1、第一個Python代碼

1 print("Hello World")

 依然是熟悉的Hello World, 對於只學過c和c++的我來說,著實有點奇怪,怎麼main()沒了(其實是有的),頭文件也沒了,甚至連一句語句的末尾標識逗號也不見蹤影。

2、概覽

用下麵一段猜大小的代碼碼來解釋一下python與c(c++)的區別

c:

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<time.h>
 4 
 5 int main(void)
 6 {
 7     int try_num, true_num, x, count;
 8 
 9     while(1)
10     {
11         printf("請選擇: 1.猜大小 2.退出: ");
12         scanf("%d", &x);
13         if(x == 2)
14             break;
15
srand(time(0)); 15 true_num = rand() % 100 + 1; 16 printf("請輸入你猜的數字(1-100): "); 17 scanf("%d", &try_num); 18 count = 1; 19 while(try_num != true_num) 20 { 21 if(try_num >= 1 && try_num <= 100) 22 { 23 if(try_num > true_num) 24 printf("你猜大了!\n"); 25 else 26 printf("你猜小了!\n"); 27 } 28 else 29 printf("你輸入的數字有誤!\n"); 30 printf("請再次輸入你猜的數字: "); 31 scanf("%d", &try_num); 32 count++; 33 } 34 printf("你終於猜對了, 共用了%d次.\n", count); 35 } 36 37 return 0; 38 }

Python:

 1 import random
 2 
 3 
 4 while True:
 5     x = int(input("請選擇: 1.猜大小 2.退出: "))
 6     if x == 2:
 7         break
 8     true_num = random.randint(1, 100)
 9     try_num = int(input("請輸入你猜的數字(1-100): "))
10     count = 1
11     while try_num != true_num:
13         if try_num in range(1, 101):
14             if try_num > true_num:
15                 print("你猜大了!")
16             else:
17                 print("你猜小了!")
18         else:
19             print("你輸入的數字有誤!")
20         try_num = int(input("請再次輸入你猜的數字: "))
21         count += 1
22     print("你終於猜對了, 共用了%d次" % count)

 能清楚的看出,用Python寫出的代碼較c簡潔美觀,沒有冗餘,在語法上的幾點區別總結如下:

  • 變數沒有類型的聲明,而是根據右側表達式推斷
  • 語句結尾沒有分號
  • 迴圈語句和條件語句均以冒號標誌其內部
  • 以縮進而不是大括弧來區分作用域
  • ...

兩者也具有高級語言的類似特點:

  • 都有條件語言,迴圈語言,判斷語言等,大體用法相同,最大區別是in的使用,類似於c++11中的範圍for
  • 都有基本的運算符,但是python增加了**,//,<>,去掉了邏輯運算符中的符號表達,全部由and,or,not等關鍵詞表示
  • ...

 


二、基本數據類型

與c不同,Python的面向對象特征更加明顯,連int,float等也有自己的方法;

與c++相比,Python的list,tuple,dict 等相較與STL的容器更容易使用,內置的方法也較豐富

1、int, float, complex

 1 # int 方法
 2 def bit_length(self):
 3     pass
 4 # 返回該整數用二進位表示時的最小位數
 5 
 6 def __divmod__(self, *args, **kwargs):
 7     pass
 8 # 返回一個tuple, 包含兩個元素,分別為self 與 argument相除的商和餘數
 9 
10 
11 # float 方法
12 def as_integer_ratio(self):
13     pass
14 # 返回一個tuple, 即將float轉化為分數形式
15 
16 def fromhex(self, string):
17     pass
18 # 返回16進位表示的string轉化為的float
19 
20 def hex(self): 
21     pass
22 # 與fromhex()相反
23 
24 def is_integer(self, *args, **kwargs):
25     pass
26 # 返回 bool,判斷float是否為整數
27 
28 
29 # complex 方法
30 def conjugate(self):
31     pass
32 # 返回覆數的共軛複數
int, float,complex方法

 對於complex a, 可以通過a.real和a.imag使用其實部和虛部

2、bool: True, False

例如, 可以

1 a = True
2 while a:
3     # ...
4     if ...:
5         a = False

 3、str: 通過'', "" 或 str()構建

  1 def capitalize(self):
  2     pass
  3 # 返回str的首字母大寫,其餘小寫的形式, str不變
  4 
  5 def casefold(self):
  6     pass
  7 # 返回str的所有字母變為小寫的形式, str不變
  8 
  9 def center(self, width, fillchar=None):
 10     pass
 11 # 返回str居中,長度為width,左右以fillchar填充的形式,str不變
 12 
 13 def count(self, sub, start=None, end=None):
 14     pass
 15 # 返回str中[start, end)範圍內sub的數目
 16 
 17 def endswith(self, suffix, start=None, end=None): 
 18     pass
 19 # 返回str的[start, end) 子序列是否以suffix結尾
 20 
 21 def expandtabs(self, tabsize=8):
 22     pass
 23 # 返回str的所有tab變成tabsize長度的空格, str不變
 24 
 25 def find(self, sub, start=None, end=None):
 26     pass
 27 # 返回str的[start, end) 範圍內sub的位置, 未找到返回-1
 28 
 29 def rfind(self, sub, start=None, end=None): 
 30     pass
 31 # 與find()不同的是從右向左
 32 
 33 def format(self, *args, **kwargs):
 34     pass
 35 # 返回str的格式化的字元串, 使用{}而非%,str不變
 36 
 37 def index(self, sub, start=None, end=None):
 38     pass
 39 # 返回str的[start, end) 子序列的sub所在的下標, 未找到報錯
 40 
 41 def rindex(self, sub, start=None, end=None): 
 42     pass
 43 # 與index()不同的是從右向左
 44 
 45 def isalnum(self): 
 46     pass
 47 # 返回str是否全部由字母和數字構成
 48 
 49 def isalpha(self):
 50     pass
 51 # 返回str是否全部由字母構成
 52 
 53 def isdigit(self):
 54     pass
 55 # 返回str是否全部由數字構成
 56 
 57 def islower(self):
 58     pass
 59 # 返回str是否所有字母都是小寫
 60 
 61 def isupper(self):
 62     pass
 63 # 返回str是否所有字母都是大寫
 64 
 65 def isspace(self):
 66     pass
 67 # 返回str是否全部由空白字元構成
 68 
 69 def istitle(self):
 70     pass
 71 # 返回是否所有單詞都是大寫開頭
 72 
 73 def join(self, iterable):
 74     pass            
 75 # 返回通過指定字元str連接序列iterable中元素後生成的新字元串
 76 
 77 def ljust(self, width, fillchar=None): 
 78     pass
 79 # 返回str左對齊,不足width的以fillchar填充, str不變
 80 
 81 def rjust(self, width, fillchar=None): 
 82     pass
 83 # 返回str右對齊,不足width的以fillchar填充, str不變
 84 
 85 def lower(self):
 86     pass
 87 # 返回str全部小寫的拷貝, str不變
 88 
 89 def upper(self):
 90     pass
 91 # 返回str全部大寫的拷貝, str不變
 92 
 93 def swapcase(self): 
 94     pass
 95 # 返回str全部大小寫交換的拷貝, str不變
 96 
 97 def strip(self, chars=None):
 98     pass
 99 # 返回str移除左右兩側所有chars的拷貝,str不變
100 
101 def lstrip(self, chars=None): 
102     pass
103 # 返回str移除左側所有chars的拷貝,str不變
104 
105 def rstrip(self, chars=None):
106     pass
107 # 返回str移除右側所有chars的拷貝,str不變
108 
109 def partition(self, sep):
110     pass
111 # 返回str以sep分割的前,sep,後部分構成的tuple,
112 # 未發現返回sep和兩個空字元構成的tuple
113 
114 def rpartition(self, sep):
115     pass
116 # 和partition()不同的是從右向左
117 
118 def replace(self, old, new, count=None):
119     pass
120 # 返回str把count數目的old替換為new的拷貝,str不變
121 
122 def split(self, sep=None, maxsplit=-1):
123     pass
124 # 返回一個以sep分隔str的maxsplit(預設最大)的list,str不變
125 
126 def rsplit(self, sep=None, maxsplit=-1):
127     pass
128 # 和split()不同的是從右向左
129 
130 def splitlines(self, keepends=None):
131     pass
132 # 返回一個以\n或\r或\r\n分隔的list,若keepends=true,保留換行
133 
134 def startswith(self, prefix, start=None, end=None):
135     pass
136 # 返回str的[start, end)範圍內是否以prefix開頭
137 
138 def title(self):     
139     pass
140 # 返回所有單詞是大寫開頭的拷貝,str不變
141 
142 def zfill(self, width):
143     pass
144 # 返回str的以width為長度,不夠左側補0的拷貝(不會截短),str不變
145 
146 def maketrans(self, *args, **kwargs):
147     pass
148 # 返回生成的一個翻譯表,與translate()搭配使用
149 
150 def translate(self, table): 
151     pass
152 # 根據maketrans()生成的table來翻譯str,返回拷貝,str不變
str方法

 a.對str中的方法的總結:

  • 大小寫,空格與table,特定格式等的轉化,替換: capitalize,casefold,expandtabs,format,lower,upper,swapcase,replace,title,maketrans,translate
  • 填充與移除字元串,連接與分隔字元串: center,strip,lstrip,rstrip,join,ljust,rjust,partition,rpartition,split,rsplit,splitlines,zfill
  • 子序列數目,位置:count,find,rfind,index,rindex
  • 判斷字母,數字,大小寫,空格,開頭,結尾 :endswith,isalnum,isalpha,isdigit,islower,isupper,isspace,istitle,startswith
  • 和左右掃描方向有關的方法一般還包括一個r__()方法,表示從右向左掃描
  • 所有方法均不改變str,只是返回一個拷貝或bool

b.幾個方法詳解:

  • format:
 1 # 通過位置
 2 string1 = "{0} is the most {1} teacher of life"
 3 str1 = string1.format("Suffering", "powerful")
 4 # str1 = "Suffering is the most powerful teacher of life"
 5 string2 = "{0}, {1}, {0}"
 6 str2 = string2.format("Edward", "Tang"}
 7 # str2 = "Edward, Tang, Edward"
 8 
 9 # 通過關鍵詞
10 string = "{name} is  {age}"
11 str = string.format(name="Edward", age=19)
12 # str = "Edward is 19"
13 
14 # 填充和對齊
15 # ^、<、>分別是居中、左對齊、右對齊,後面帶寬度
16 # :號後面帶填充的字元,只能是一個字元,不指定的話預設是用空格填充
17 string1 = "{: >6}"
18 str1 = string1.format("Ed")
19 # str1 = "    Ed"
20 string2 = "{:*<6}"
21 str2 = string2.format("Ed")
22 # str2 = "Ed****"
23 
24 # 控制精度
25 string = “{:.2f}”
26 str1 = string.format(3.1415926)
27 # str1 = "3.14"
28 
29 # 金額分隔符
30 string = "{:,}"
31 str = string.format(1234567)
32 # str = "1,234,567"
  •  maketrans和translate:
1 # s.maketrans('s1', 's2') s1 和 s2 的長度必須一致,生成一個轉換表
2 # s.translate(table) 對字元串s按照table里的字元映射關係替換
3 s = "I was a handsome boy"
4 table = s.maketrans("abcde", "12345")
5 str = s.translate(table)
6 # str = "I w1s 1 h1n4som5 2oy"
  •  join和split:
 1 # join用於用指定str連接參數的str序列
 2 lst = ['a', 'b', 'c', 'd']
 3 s = '-'.join(lst)
 4 # s = "a-b-c-d"
 5 
 6 def accum(s):
 7     return '-'.join(c.upper() + c.lower() * i for i, c in enumerate(s))
 8 # s = "abcd",返回 “A-Bb-Ccc-Dddd”
 9 
10 # split用於用指定參數拆分str
11 s = "a-b-c-d"
12 lst = s.split('-')
13 # lst = ['a', 'b', 'c', 'd']

 c.索引和切片:

Python中的索引和C類似,但是可以從右邊開始:

1 word = "python"
2 # word[0] = 'p'
3 # word[5] = 'n'
4 # word[-1] = 'n', 表示最後一個, -0和0一樣

 除了索引, 還支持切片:

1 word = "python"
2 # word[0: 2] = 'py'
3 # word[2: 5] = 'tho'
4 # word[: 2] = 'py', 等同於[0: 2]
5 # word[3:] = 'hon', 等同於[3: len(word)]

 切片和c++中的迭代器類似,都是為單閉合區間;

切記str是const的, 不可以通過賦值等改變它們

4、list:通過[]或list()構建

 1 def append(self, p_object):
 2     pass
 3 # 添加元素p_object到list末尾,p_object可以是任何類型
 4 
 5 def clear(self):
 6     pass
 7 # 清空list中的元素
 8 
 9 def copy(self):
10      pass
11 # 返回一個list的淺拷貝
12 
13 def count(self, value):
14     pass
15 # 返回list中的value的個數
16 
17 def extend(self, iterable)
18     pass
19 # 添加整個iterable到list末尾,擴展list
20 
21 def index(self, value, start=None, stop=None):
22     pass
23 # 返回子序列[start, stop)中value第一次出現的下標,未找到報錯
24 
25 def insert(self, index, p_object):
26     pass
27 # 插入一個p_object到下標為index的元素之前
28 
29 def pop(self, index=None):
30     pass
31 # 彈出index位置的元素並返回此元素, list為空或index超出範圍會報錯
32 
33 def remove(self, value):
34     pass
35 # 清除list中第一個值為value的元素,不返回此值
36 
37 def reverse(self):
38     pass
39 # 反轉整個list
40 
41 def sort(self, key=None, reverse=False):
42     pass
43 # 排序list,key可以為lambda或cmp,reverse為True需要反轉
list方法

 a.對list中方法的總結:

  • 添加:append, extend, insert
  • 刪除:clear, pop, remove
  • 搜素:count, index
  • 拷貝:copy
  • 排序:sort
  • 反轉:reverse
  • 與str不同,list中元素大都直接修改list,返回None而不是拷貝

b.幾個方法詳解:

  • append和extend:
1 lst = [1, 5, 4, 3, 8]
2 lst.append(3) 
3 # lst = [1, 5, 4, 3, 8, 3]
4 lst.append([1, 2, 3]) 
5 # lst = [1, 5, 4, 3, 8, 3, [1, 2, 3]],始終把參數當做一個元素
6 lst.extend([1, 2, 3])
7 #[1, 5, 4, 3, 8, 3, [1, 2, 3], 1, 2, 3],合併為一個list

 c.索引和切片:

與str基本一致,但是由於list可變,還存在一個del語言:

1 lst = [3, 4, 5, 6, 7]
2 del lst[0]
3 # lst = [4, 5, 6, 7]
4 del lst[1:3]
5 # lst = [4, 7]
6 del lst[:]
7 # lst = []

 5.tuple:通過()或tuple()構建(括弧可以省略), 只包含一個元素時,在元素後面添加逗號

def count(self, value):
    pass
# 返回tuple中value的個數

def index(self, value, start=None, stop=None):
    pass
# 返回子序列[start, stop)中第一個值為value的下標
tuple方法

tuple和list的區別在於其不能改變,所有很多方法沒有

tuple也有索引和切片,不再贅述

要想對tuple進行強制修改,可以通過list()構造

6.dict:通過{}或dict()構建

 1 def clear(self): 
 2     pass
 3 # 清空dict中的元素
 4 
 5 def copy(self):
 6     pass
 7 # 返回dict的一個拷貝
 8 
 9 def fromkeys(*args, **kwargs):
10     pass
11 # 返回一個dict,所有的key都對應同一個value(預設為None)
12 
13 def get(self, k, d=None):
14     pass
15 # 返回key為k時對應的value,如果不存在,返回d
16 
17 def setdefault(self, k, d=None):
18     pass
19 # 返回key為k時對應的value,如果不存在,添加一個k: d
20 
21 def items(self): 
22     pass
23 # 返回dict中所有key, value構成的dict_items()
24 
25 def keys(self):
26     pass
27 # 返回dict中所有key構成的dict_keys()
28 
29 def values(self):
30     pass
31 # 返回dict中所有value構成的dict_values()
32 
33 def pop(self, k, d=None):
34     pass
35 # 彈出dict中k所對應的value,沒找到返回d
36 
37 def popitem(self):
38     pass
39 # 隨機彈出dict中一個(key, value),dict為空時出錯
40 
41 def update(self, E=None, **F):
42     pass
43 # 用另一個dict F 來更新原dict, 返回None
dict方法

 a.對dict中方法的總結:

  • 添加:直接用dic[key] = value即可添加
  • 刪除:clear, pop, popitem
  • 查找, 引用:get, setdefault, items, keys, values
  • 構建:copy, fromkeys, update
  • 與list類似,但由於是無序的,所有沒有下標的操作,且popitem彈出的元素也是隨機的

b.幾個方法詳解:

  • pop和popitem: 
1 dic = {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}
2 # key為str的構建時也可以寫成 dic = dict(k1 = 'v1', k2 = 'v2', k3 = 'v3)
3 k = dic.pop('k1')
4 # k = 'v1'且 dic = {'k2': 'v2', 'k3': 'v3'}
5 item = dic.popitems()
6 # item = (‘k2’, 'v2')或('k3', v3') 因為dic是無序的,且dic會隨之變化
  •  get和setdefault: 
1 dic = {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}
2 s1 = get('k1')  # s1 = dic['k1']
3 s2 = get('k4', 'v4')  # s2 = 'v4'

              
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 可以先看看代碼對比: 基於類的方式改寫: http://git.oschina.net/web3d/DeCMF/commit/58f915b9d24ab5ffe40adf4ad4ed769fdb6ebe6e 原來的函數形式: http://git.oschina.net/web3d/DeCMF/co ...
  • 來源:http://www.jianshu.com/p/e09d2370b796 ...
  • 註意: 還要學習一個 ↑↑↑↑ 這樣的方框里的片段完全不來自於原書,而是我自己的理解。 Item 2 Understand auto type deduction - auto類型推導 在C++11之前,auto 關鍵字一直是用於聲明自動儲存類型的變數時使用的,基本上沒有什麼實際作用,地位和 exp ...
  • getopt和getoptlong被用來解析命令行參數。 一、getopt #include <unistd.h> extern char *optarg; extern int optind, extern int opterr, extern int optopt; int getopt(int ...
  • 這篇博客總結了半天,希望自己以後返回來看的時候理解更深刻,也希望可以起到幫助初學者的作用. 轉載請註明 出自 : "luogg的博客園" , 設計模式 在長期開發過程中,為瞭解決某些固定問題, 總結出的固定套路. 目前為止, java中的設計模式有23種, 例如: 單例模式, 適配器模式, 工廠模式 ...
  • 註:1. 僅從http(Hypertext Transfer Portocol)角度闡述,不涉及語言層面的類庫。 2. 以下內容均參考《Http權威指南》一書。 一、萬維網構成 Web內容都是存儲在Web伺服器上的。Web伺服器所使用的是HTTP 協議,因此經常會被稱為HTTP伺服器。這些HTTP ...
  • 處理事情: 數據處理過程中,速度很慢,無法準確定位分析是DB問題還是客戶端處理問題,所以增加計時統計日誌; Delphi計時首次使用,查閱資料,予以記錄: ...
  • 現在程式員愈發的不容易了,想要精通,必然要尋本溯源,這其實與目前泛濫的愈發高級的語言以及眾多的框架剛好相反,因為它們在儘可能的掩蓋本源使其簡單,個人稱之為程式員學習悖論。 註:作者接觸web開發和php兩周左右,以下內容適合初學者。 1、導讀 從文題目看,<簡單PHP會話(Session)說明> 是 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...