Python 零基础入门到实战(一)笔记:内置对象、浅拷贝、深拷贝、计算圆面积、凯撒密码、英文大小写转换、输入国家打印出国家名和首都、输入数字英文输出、统计句子中的字母数量、猜随机数
Python入門到實戰(一)
- 為什么寫這篇文章
- Part 1 入門部分
- 什么是編程語言?
- Python的優勢
- 目前應用
- 特點
- Part 2 6種內置對象
- 1 整數、浮點數
- 2 字符串
- 3 列表
- 4 元組
- 5 字典
- 一個例題
- 6 集合
- 什么是淺拷貝shallow copy
- 案例2.1 編寫程序,根據輸入的半徑,計算圓的面積
- 案例2.2 編寫程序,實現凱撒密碼,按照規定的偏移位加密
- 案例2.3 編寫程序,實現英文大小寫轉換
- 作業一 用戶輸入國家名稱,打印出所輸入的國家名稱和首都
- 作業二 用戶輸入數字,顯示對應的英文
- Part 3 基本編程語句
- 布爾類型
- 比較運算
- 邏輯運算(布爾運算)
- 賦值語句
- 條件語句
- for循環語句
- while循環語句
- 小例題:創建一個數據及,包含1到10的隨機整數,總共100個數。統計每個數字的次數
- 案例3.1創建一個列表,其中的元素是100以內的能被3整除的正整數
- 案例3.2 字符串 s='Life is short You need python'。統計這個字符串中每個單詞的字母數量
- 案例3.3 制作一個滿足下功能的猜數游戲
為什么寫這篇文章
這是第一天學習python ,由于本科基礎不太好,又是學習新知識內容、故決定從寫文章開始做到一定量的輸出,以便對知識進行鞏固、消化吸收。同時也希望給希望快速學習了解python的朋友一點幫助、小弟水平有限,文中有理解不對,不到位的地方,還請指正!
Part 1 入門部分
什么是編程語言?
編程語言也是一門語言,它在面向人類所熟知的自然語言的語義空間同面向機器的機器語義空間架起了一座橋梁,進行映射、
從最早的機器語言Machine Language,即二進制代碼發展到了匯編語言Assembly Language,封裝了諸多關鍵字,提升了一定可讀性,但匯編語言與機器語言仍是一一對應的。雖效率高,但若進行大規模編程,那將是極為痛苦的、故發展出了高級語言High level Language,如圖C/C++,JAVA,PYHON等流行的語言。高級語言不論從各維度都更符合人類學習,符合建模堅決問題的思維習慣,滿足應用場景的需求、
Python的優勢
選擇Python是因為其用途相對廣泛、且簡單易學
目前應用
從官網中:
Python’s convenience has made it the most popular language for machine learning and artificial intelligence. Python’s flexibility has allowed Anyscale to make ML/AI scalable from laptops to clusters.(https://www.python.org/)
可見Python對人工智能領域和機器學習領域是十分便捷的、能結合本專業使用到的方向有網絡爬蟲、機器學習、數據分析、神經網絡等
特點
開源、簡單、不斷進化
Part 2 6種內置對象
1 整數、浮點數
整數int顧名思義,0,1,2,3這些沒有小數點的都是整數范疇、
浮點數float就是帶有小數點的數,之所以叫浮點數,是因為小數點可通過科學計數法表示時浮動、
python不需要像C++,java制定類型聲明變量,如int a=0;int b=0.3;
可以直接賦值,如a=3 a=3.0
結尾也不需要; 封號
但是如果要浮點數的3.0也可以聲明float(3),輸出即為3.0,十分方便
需要掌握四則運算+ -;* / 和 % ;divmod ()得到除數和被除數;round() 可以四舍五入保留小數; type()可以獲取類型;
發現計算中存在的諸多異常,并通過標準庫中的math和其他工具解決之
如以下異常
可以這樣解決:(當然也有很多別的解決方法)
>>> import decimal >>> a=decimal.Decimal('0.1') >>> b=decimal.Decimal('0.2') >>> a+b Decimal('0.3')需要掌握
dir([object]) 可以返回模塊的屬性列表(查看對象的屬性和方法)
help([object])的用法 可以返回函數和模塊用途的詳情說明!
2 字符串
字母、標點符號、控制符都是字符、
字符編碼: ACSII、Unicode、UTF-8
使用引號(“”或’’)創建字符串即可
需要在字符串中使用特殊字符時可以用反斜杠(\)轉義字符,如下表示:
索引(左右開始)
>>> help(str.index) Help on method_descriptor: index(...)S.index(sub[, start[, end]]) -> intReturn the lowest index in S where substring sub is found,such that sub is contained within S[start:end]. Optionalarguments start and end are interpreted as in slice notation.Raises ValueError when the substring is not found.>>> s="I love python" >>> s 'I love python' >>> s.index('love') 2 >>> s.index('o',6) 11切片
>>> s.split(" ")//拆分成列表 ['I', 'love', 'python'] // >>> q="good" >>> q[1:3]//按照下表為1到2切片 'oo' python // >>> q 'abcdefg' >>> q[2:5] 'cde'//切片2-4位(第一位是0)切片再通過制定字符連接
>>> lst=s.split(" ") >>> lst ['I', 'love', 'python'] >>> "~".join(lst) 'I~love~python'此外,學習了兩個內置函數,input() output()、外加字符串格式化輸出format()
3 列表
順口溜:列表是個筐,什么都能裝。
列表是一個序列,也是容器、其中的元素是可變的。
與字符串相同地存在索引(也可從右往左,即-1開始)
和 切片,
>>> p ['a', 'b', 1, 'd'] >>> p[1:3] ['b', 1]方法差不多在此不贅述
列表和字符串不同的地方:不可以按照索引修改值
>>> q="abcdefg" >>> q[2]=w Traceback (most recent call last):File "<stdin>", line 1, in <module> NameError: name 'w' is not defined//字符串按照索引改值失敗 >>> p=['a','b','c','d'] >>> p[2]=1 >>> p ['a', 'b', 1, 'd'] //相反,列表成功其余均相同,如加法,乘法,len() ,in 等
列表中增加元素有append(),insert(),extend(),注意何為可迭代對象、多參照幫助文檔
刪除元素有 remove(),pop(),clear()
排序sort() 反序reverse() 等等、需要用的時候在了解
與字符串相互轉化list(x); “”.join(lst)
>>> st='this is a test string' >>> st 'this is a test string' >>> lst=list(st) >>> lst//成功從string轉到list ['t', 'h', 'i', 's', ' ', 'i', 's', ' ', 'a', ' ', 't', 'e', 's', 't', ' ', 's', 't', 'r', 'i', 'n', 'g'] >>> "".join(lst) 'this is a test string'//從list轉到string4 元組
需要注意的是,只有一個元素的元組這樣定義tuple(‘a’,)
>>> b=tuple('a',) >>> b ('a',) >>> c=['a'] >>> c ['a']元組是一個序列,容器、區別是在于其中的元素不可修改值,也帶來了其優點:運算速度快、
索引(正向,反向)和切片
基本操作+、*、len()、in與列表基本相同,不多做介紹
元組與列表相互轉換lst=list(X)/u=tuple(X)
>>> t=('ts',1,2,[1,2,3]) >>> t ('ts', 1, 2, [1, 2, 3]) >>> lst=list(t) >>> lst ['ts', 1, 2, [1, 2, 3]] >>> u=tuple(lst) >>> u ('ts', 1, 2, [1, 2, 3]) >>>5 字典
字典是一組組映射關系,也可以理解為鍵值對 ,即 key-value(key不可重復)
d = {key1 : value1, key2 : value2 }
讀d.get(‘a’,‘lanqiao’)
其他/setdefault/update/pop/popitem
字典和列表:字典不是序列,列表是序列
兩者都是容器類對象,可變對象,從Python3.6開始,字典也有順序
一個例題
寫函數,檢查傳入字典的每一個value的長度,如果大于2那么僅保留前兩個長度的內容,并將新內容返回給調用者:PS字典中的value只能是字符串或列表
def check(**kwargs):n={}for k,v in kwargs.items():if len(v)>2:#篩子v=v[:2]n[k]=vreturn nempty={} flag=1 while(flag):i=input("k-v:")if i=='exit':flag=0print("exit")else:a,b=map(str,i.split('-'))empty[a]=bprint(empty)s=check(**empty) print(s)測試:
k-v:tom-basketball {'tom': 'basketball'} k-v:alice-23234 {'tom': 'basketball', 'alice': '23234'} k-v:bob-23jiojf {'tom': 'basketball', 'alice': '23234', 'bob': '23jiojf'} k-v:exit exit {'tom': 'ba', 'alice': '23', 'bob': '23'}6 集合
集合是一個擁有確定(唯一)的,且元素無序的可變的數據組織形式
分為可變集合(集合中的元素可以動態的增加或刪除–set)和非可變集合(集合中的元素不可改變–frozenset)
可變集合的定義:
>>> s=set('aabbcded') >>> s {'d', 'c', 'b', 'a', 'e'}add,pop,remove,discard
不可變集合的定義:
>>> ss=frozenset('qiwsir') >>> ss frozenset({'r', 's', 'q', 'i', 'w'})集合的特點:里頭的對象應該是不可變對象、列表中是可變的。即集合中不能包含列表
關系和運算:is superser() is superset(b) sisubset(a) union 交并補差集等等
什么是淺拷貝shallow copy
>>> help(list.copy) Help on method_descriptor:copy(self, /)Return a shallow copy of the list.>>> help(dict.copy) Help on method_descriptor:copy(...)D.copy() -> a shallow copy of D>>> help(set.copy) Help on method_descriptor:copy(...)Return a shallow copy of a set.>>>可以發現,觀察幫助文檔,三種容器(列表、字典、集合)所提供的copy()方法都是做的shallow copy,也就是淺拷貝,那么到底什么是淺拷貝?先給出結論:淺在哪里?拷貝的是第一層、里面的層并未拷貝
以列表為例,觀察如下代碼:
首先創建了一個lst1,并通過type()查看到了其中類型為list
通過列表中的拷貝函數、拷貝出了lst2,可以發現顯示結果一樣
觀察lst1和lst2的地址,是不同的
且通過 is 來比較,得知lst1和lst不是一個對象
這個時候對第一層的內容進行修改,修改lst1中的第一個元素為100,發現lst2中第一個元素仍然是brian
可以知第一層確實不存在引用關系
當把lst1中的第一個元素java改為C#后
再輸出lst2,發現lst2中的[2][0]元素也被改變了、故這就是淺拷貝
如何解決呢、可以通過 import copy、調用deepcopy()來實現深拷貝
如上代碼,這時你就會發現,lst3與lst1不存在引用了,即消除了淺拷貝的隱患
案例2.1 編寫程序,根據輸入的半徑,計算圓的面積
import math radius=(float)(input("請輸入半徑")) res=math.pi*radius*radius print(round(res,3)) //運行結果 請輸入半徑2 12.566案例2.2 編寫程序,實現凱撒密碼,按照規定的偏移位加密
利用凱撒密碼方案,實現對用戶輸入文字的加密操作 凱撒密碼(Caesar cipher),是一種替換加密的技術,明文中的所有字母都在字母表上向后(向前) 按照一個固定數目進行偏移后背替換成密文。如:偏移量是3時,所有的子母A被替換成D,B變成E 由于知識結構缺陷,先做單個字母 s=str(input("input a letter:")) n=3 o=chr(ord(s)+3) print(s,"后移動",n,"位之后是:",o) //測試結果 input a letter:a a 后移動 3 位之后是: d案例2.3 編寫程序,實現英文大小寫轉換
s=input("輸入英文:") lst=[] for i in s:if i.islower():lst.append(i.upper())else:lst.append(i.lower()) n="".join(lst) print(s,"==>",n)//結果 輸入英文:Apple Apple ==> aPPLE作業一 用戶輸入國家名稱,打印出所輸入的國家名稱和首都
a=input("input country:") d={'china':'beijing','japan':'tokyo','russia':'莫斯科','england':'london','german':'柏林'} print(a,"\'s captial is:",d.get(a)) //結果 input country:china china 's captial is: beijing作業二 用戶輸入數字,顯示對應的英文
a=input("input number:") lst=list(a) re=[] d={'1':'one','2':'two','3':'three','4':'four','5':'five','6':'six','7':'seven','8':'eight','9':'nine','0':'zero'} for i in lst:re.append(d.get(i)) n=" ".join(re) print(n) //結果 input number:1024 one zero two fourPart 3 基本編程語句
布爾類型
True 1 真
False 0 假
比較運算
比較運算就是比較兩個對象的大小
如 >、 <、 ==、 !=、 >=、 <=
邏輯運算(布爾運算)
邏輯運算多用于復合條件的判斷 and or not
>>> 3>2 and 3>1 True >>> 3<2 and 3>10 False >>> 1 or 0 1 >>> 0 or 0 0 >>> 1 or 1 1 >>> not 3 False >>> not 0 True賦值語句
基本形式:variable =object
其他花樣:
條件語句
不同之處是不需要括號,通過:和縮進來判斷
if(<expr>):<statment> elif(<expr>):<statement> else:<statement> <following_statment>for循環語句
for(循環規則):
[ 空四格 ]語句塊
常用函數: range() zip() enumerate() 列表解析
while循環語句
while [condition]:
[ 空四格 ]statements
小例題:創建一個數據及,包含1到10的隨機整數,總共100個數。統計每個數字的次數
import random lst=[] for i in range(100):n=random.randint(1,10)lst.append(n)d={} for n in lst:if n in d:d[n]+=1else:d[n]=1 print(d) //結果如下 {2: 9, 4: 6, 3: 14, 7: 8, 9: 12, 1: 7, 8: 12, 5: 13, 10: 13, 6: 6}案例3.1創建一個列表,其中的元素是100以內的能被3整除的正整數
r=[] for i in range(100):if ((i+1)%3)==0:r.append(i+1) print(r) //結果 [3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99] PS C:\Users\ASUS\Desktop\MLCode\python>案例3.2 字符串 s=‘Life is short You need python’。統計這個字符串中每個單詞的字母數量
s='Life is short You need python' d={} for i in s:if i.isalpha():if i in d:d[i]+=1else:d[i]=1 print(d) //結果 {'L': 1, 'i': 2, 'f': 1, 'e': 3, 's': 2, 'h': 2, 'o': 3, 'r': 1, 't': 2, 'Y': 1, 'u': 1, 'n': 2, 'd': 1, 'p': 1, 'y': 1}案例3.3 制作一個滿足下功能的猜數游戲
計算機隨機生成一個100以內的正整數;
用戶通過鍵盤輸入數字,猜測計算機所生成的隨機數;
注意:對用戶的輸入次數不做限制;
一下學的有點多、就先到這里~ 未完待續
總結
以上是生活随笔為你收集整理的Python 零基础入门到实战(一)笔记:内置对象、浅拷贝、深拷贝、计算圆面积、凯撒密码、英文大小写转换、输入国家打印出国家名和首都、输入数字英文输出、统计句子中的字母数量、猜随机数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BZOJ 2037: [Sdoi2008
- 下一篇: [搜片神器]BT种子下载超时很多的问题分