掉進懸崖的小白,撿到python基礎祕籍,學習第一週——語法基礎,小遊戲,無腦循環
人生苦短,我用python
語言的種類:
機器語言:機器指令,直接執行
彙編語言:符號化
高級程序設計語言(編譯型)
高級程序設計語言(解釋型)
語言的發展:
第一代:
打孔機(機器語言)和彙編,編程效率不高
第二代:
C,Basic,Pascal等爲主,命令式語言
第三代:
C++,Delphi等面向對象爲主要語言
第四代:
Java,C#自帶垃圾回收,中間指令編譯
第五代:
Python,Java,JS,PHP,Objective+C等
主要爲了解決互聯網網站,及App應用的編程
從上面的歷史,除了C,其它的語言都會逐步進入歷史
什麼是python
Python 是一個高層次的結合瞭解釋性、編譯性、互動性的面向對象的、動態的、強類型的、腳本式的語言。
Python 的設計具有很強的可讀性,相比其他語言經常使用英文關鍵字,其他語言的一些標點符號,它具有比其他語言更有特色語法結構。
Python 是一種解釋型語言: 這意味着開發過程中沒有了編譯這個環節。類似於PHP 和Lua 語言。
Python 是交互式語言: 這意味着,您可以在一個Python提示符,直接互動執行寫你的程序。
Python 是初學者的語言:Python 對初級程序員而言,是一種偉大的語言,它支持廣泛的應用程序開發,從簡單的文字處理到 WWW 瀏覽器再到數據採集、數據分析、人工智能。
搭建 Python開發環境:
因爲Python是跨平臺的,它可以運行在Windows 、Mac和各種Linux/Unix 系統上。在Windows 上寫Python程序,放到Linux上也是能夠運行的。要開始學習Python編程,首先就得把Python安裝到你的電腦裏。
安裝後,你會得到Python解釋器(就是負責運行Python程序的),一個命令行交互環境,還有一個簡單的集成開發環境。
Python的作者說了這樣一句話 Python2.x已經是遺產,SO請使Python3.x
Python:https://www.python.org/
注意:
安裝時若未勾選設置環境變量可以使用py指令
安裝時若勾選設置環境變量可以使用python、py指令
環境變量可以手動配置
推薦使用py指令,方便多版本間切換 如:py -3.6
集成開發環境(IDE):
推薦:
pycharm:
官方地址:
https://www.jetbrains.com/pycharm/
其他IDE:
1.Eclipse+Pydev
2.Sublime Text
3.python自帶的IDLE
4.vscode
…
Python代碼的組織結構
項目(project):模塊及程序包之家
程序包(package) : 模塊之家
模塊(.py):數據量、函數、類、語句之家
類(class):數據量、函數、類、語句之家
函數(function):語句塊之家
存儲結構:
1.物理結構
代碼保存在以.py結束的後綴文件中
同一個項目中可以有很多個程序文件
2.邏輯結構
程序以模塊的形式來劃分
模塊的區分不能單看其短名稱 需要帶上其所在的包名稱/目錄來進行區分
一般建議模塊放置在包中 便於管理
代碼模塊的結構
1.
“”“
模塊的說明性文字
”“”
2.
1.import 包/模塊
2.from 包/模塊 import 包/模塊中的部分內容
作用:
1.自己沒有想使用別人的 就需要先導入
2.被導入的包或模塊會自動被解釋器解釋執行
注意包執行的是包內的__init__.py這個模塊
例:
import math
print(math.pi)
from math import pi
print(pi)
3.數據量
程序中存儲數據的容器
例:
age = 21
level = 17
4.函數
存放系列語句的地方
例:
def area®:
return pi * r * r
c1 = area(10)
print(c1)
5.類
面向對象的核心 後續會細講
例:
class Circle:
r = 0
def area(self):
return self.r * self.r * pi
6.語句/指令:目前的重點
程序需要執行的命令
可以命令程序執行很多條指令
執行次序要記牢:自上向下 自左向右
print(“劇情開始”)
print(“劇情發展”)
print(“劇情結束”)
注意:
1.可以使用當前行以前的內容
2.注意前後文的邏輯影響
如何插入一段漂亮的代碼片
Python崇尚自由,但爲了真正的自由,我們必須自我約束:約定和規定(PEP8部分)
通過pycharm的使用會慢慢養成標準的編程習慣,一定要堅持
一般ctrl+alt+L即可搞定格式問題
數據類型
整型
整數:關鍵字int
Python 可以處理任意大小的整數,當然包括負整數,在程序中的表示方法和數學上的寫法一模一樣;例如:1,100 ,-8080 ,0等等。
計算機由於使用二進制,所以,有時候用十六進制表示整數比較方便,十六進制用0x前綴0-9,a-f表示; 例如:0xff00 ,0xa5b4c3d2,等等。
浮點型
浮點數:關鍵字float
浮點數也就是小數,之所以稱爲浮點數,是因爲按照科學記數法表示時,一個浮點數的小數點位置是可變的,比如,1.23x109和12.3x108是完全相等的。浮點數可以用數學寫法,如1.23 ,3.14 ,-9.01等等。但是對於很大或很小的浮點數,就必須用科學計數法表示,把10用e替代,1.23x109就是1.23e9,或者12.3e8,0.000012可以寫成1.2e-5 等等。
布爾值
布爾值:邏輯上的真和假 關鍵字bool
布爾值和布爾代數的表示完全一致,一個布爾值只有True、False兩種值,要麼是True,要麼是False,在Python中,可以直接用True、False表示布爾值(請注意大小寫),也可以通過布爾運算計算出來。
字符串
字符串 關鍵字str
字符串是以單引號’或雙引號"括起來的任意文本,比如’abc’ ,“xyz"等等。請注意,’’ 或”" 本身只是一種表示方式,不是字符串的一部分,因此,字符串’abc’ 只有a,b,c這3個字符。如果’本身也是一個字符,那就可以用"" 括起來,比如"I’m OK" 包含的字符是I,’,m,空格,O,K這6個字符。
空值
空值是Python裏一個特殊的值,用None表示。None不能理解爲0,因爲0是有意義的,而None是一
個特殊的空值。
類型轉換
數據類型轉換:爲了運算方便
轉換條件:數據具備可轉換性 例如這樣就會錯誤:int(“abc”)
轉換方式:類型關鍵字(x) 例:int(“111”) str(123)等
例:
float() 從一個字符串或整數創建一個新的浮點數(小數)。
#聲明變量
number=“12”
#轉換爲浮點型
new_num=float(number)
#打印結果
print(new_num)
#打印類型
print(type(new_num))
int() 從一個字符串或浮點數創建一個新的整數。
聲明變量
str_num = “12”
f_num = 1.9
轉換爲整數
str_int = int(str_num)
浮點數的小數部分將被捨棄
f_int = int(f_num)
打印結果
print(str_int)
print(f_int)
打印類型
print(type(str_int))
print(type(f_int))
str()從一個數(可以是任何其他類型)創建一個新的字符串。
聲明變量
num1 = 17.2
num2 = 11
num3 = True
轉換爲字符串
f_str = str(num1)
int_str = str(num2)
bool_str = str(num3)
打印結果
print(f_str)
print(int_str)
print(bool_str)
打印類型
print(type(f_str))
print(type(int_str))
print(type(bool_str))
技巧:可以利用字符串求得數字位數:len(x)表示求x的字符數量
print(len(int_str))
bool() 從一個數(可以是任何其他類型)創建一個新的布爾值。
注意:
非True、False的數據也可以轉換爲布爾值:
0、None、“”均轉換爲False,以外的轉換爲True
聲明變量
str1 = “”
str2 = None
str3 = “0”
num1 = 0
num2 = 3
轉換爲布爾
bool_str1 = bool(str1)
bool_str2 = bool(str2)
bool_str3 = bool(str3)
bool_num1 = bool(num1)
bool_num2 = bool(num2)
打印結果
print(bool_str1)
print(bool_str2)
print(bool_str3)
print(bool_num1)
print(bool_num2)
基礎練習小遊戲
猜拳遊戲
# 2.猜拳遊戲:
# 使用判斷語句,完成石頭剪刀布的猜拳遊戲。
#
import random
def finger_guessing():
guess1 = input("請用戶選擇輸入石頭, 剪刀, 布:")
# guess1 = random.choice(["石頭", "剪刀", "布"])
guess2 = random.choice(["石頭", "剪刀", "布"])
player1 = "用戶玩家"
player2 = "電腦玩家"
# 80%
# random [1,1000] 1-200人贏
r = random.randint(1, 1000)
if 1 < r < 200:
print("用戶玩家出石頭,電腦玩家出剪刀,用戶玩家贏") # 假裝遊戲正規運行,偷改省略
else:
if guess1 == "石頭" and guess2 == "剪刀" \
or guess1 == "剪刀" and guess2 == "布" \
or guess1 == "布" and guess2 == "石頭":
print(f"{player1}出{guess1},{player2}出{guess2},{player1}贏")
elif guess1 == guess2:
print(f"{player1}出{guess1},{player2}出{guess2},平局")
else:
print(f"{player1}出{guess1},{player2}出{guess2},{player2}贏")
n = int(input("你要玩幾次猜拳遊戲:"))
for i in range(n):
finger_guessing()
賬號密碼三次凍結問題
# 任務5:
# 提示用戶輸入用戶名,然後再提示輸入密碼,如果用戶名是“admin”並且密碼是“88888”,則提示正確,
# 否則,提示用戶“用戶名或者密碼錯誤”,但如果錯誤達到3次,則提示用戶"您的賬戶已被凍結",退出程序。
#
in_next = 0
for i in range(3):
user_name = input("請輸入用戶名:")
user_pwd = input("請輸入密碼:")
if user_name != "admin" or user_pwd != "88888":
print("用戶名或者密碼錯誤!")
in_next += 1
if in_next == 3:
print("您的賬戶已被凍結")
else:
print("正確")
break
任意進制轉換
# 任意進制轉換
# def pares():
# pares_str = ""
# num3 = int(input("請輸入數字:"))
# base = int(input("請輸入轉換進制n:"))
# while num3 != 0:
# pares_str += str(num3 % base)
# num3 //= base
# print(pares_str)
#
#
# pares()
#
九九乘法表
# 1.打印九九乘法:
# 1*1=1
# 1*2=2 2*2=4
# 1*3=3 2*3=6 3*3=9
# for i in range(1, 10):
# for j in range(1, i + 1):
# print(f"{j}X{i} = {i * j}\t", end=" ")
# print()
玩骰子游戲
# # 任務13:
# # 玩家進來以後要買籌碼;
# # 在每次擲骰子前,
# # 要下注(50~手裏剩餘的籌碼);
# # 接着要選擇買大小;
# # 程序要模仿擲骰子,產生一個1~6的隨機數
# # 根據擲骰子的結果,判斷玩家的輸贏,改變玩家的手裏的籌碼
# # 如果買大,4~6是贏,1~3是輸
# # 如果小,1~3是贏,4~6是輸
# # 如果贏了,玩家的籌碼+=下注金額
# # 如果輸了,玩家的籌碼-=下注金額
# # 提示玩家是否要退出遊戲
# # 玩家手裏的籌碼小於最小下注金額,要強制玩家退出
# # 注意 :先理清楚思路,從宏觀上考慮流程,不要考慮每個步驟的細節。流程搞清楚以後,再琢磨每個步驟的細節。然後寫代碼。
#
#
# def stake():
# chip = 50
# while chip > 0:
# print(f"歡迎進入擲骰子游戲,您的目前籌碼爲{chip}")
# Stake = int(input("請輸入下注金額:"))
# if chip < Stake:
# print("籌碼小於最小下注金額,強制玩家退出!")
# break
# dice_num = random.randint(1, 6)
# result_num = "大" if dice_num > 3 else "小"
# guess = input("請選擇買大還是買小:")
# if guess == result_num:
# chip += Stake
# print(f"骰子數是{dice_num}本次猜{guess}贏了,籌碼爲{chip}")
#
# else:
# chip -= Stake
# print(f"骰子數是{dice_num}本次猜{guess}輸了,籌碼爲{chip}")
# an = input("玩家是否要退出遊戲(y/n):")
# if an == "y":
# print("已退出!")
# break
# else:
# print("已退出!")
#
#
打印規則圖形
# 任務8:
# 編程實現如下圖列出的圖形。
# *
# ***
# *****
# *******
#
# for i in range(4):
# print("*"*(2*i+1))
# 任務9:
# 讓用戶輸入一個數顯示下面內容。
# *******
# ******
# *****
# ****
# ***
# **
# *
#
# for i in range(7,0,-1):
# print("*"* i)
# 任務10:
# 編程實現如下圖列出的圖形。
#
# *
# ***
# *****
# *******
#
# for i in range(4):
# print(" " * (4-i)+"*"*(2*i+1))
# 任務11:
# 編程實現如下圖列出的圖形。
# *
# ***
# *****
# *******
# *****
# ***
# *
n_11 = int(input("請輸入奇位行數:"))
if n_11 % 2==0:
print("無法打印!")
else:
for i in range(n_11):
if i <= n_11 // 2:
print(" " * (n_11 // 2 - i) + "*" * (2 * i + 1))
else:
print(" " * (i - n_11 // 2) + "*" * ((n_11 - i) * 2 - 1))
pass
pass
環形纏繞數字圖形
# 畫圖如下
# 0 0 0 0 0
# 0 1 1 1 0
# 0 1 2 1 0
# 0 1 1 1 0
# 0 0 0 0 0
# n = int(input("請輸入行數:"))
# for i in range(n):
# for j in range(n):
# print(min(i,j,n-i-1,n-j-1),end=" \t")
# print()
# 5 5 5 5 5
# 5 4 4 4 5
# 5 4 3 4 5
# 5 4 4 4 5
# 5 5 5 5 5
# m = int(input("請輸入行數:"))
# for i in range(1,m+1):
# for j in range(1,m+1):
# print(max(i,j,m-i+1,m-j+1),end=" \t")
# print()
孿生數:相鄰素數差值爲2(n)
# 12.如果兩個素數之差爲2,這樣的兩個素數就叫作"孿生數",找出100以內的所有"孿生數".
# list12 = []
# for i in range(100, 1, -1):
# for j in range(2, i):
# if i % j == 0:
# break
# else:
# list12.append(i)
# print(list12)
# for i in range(len(list12)):
# if list12[i-1] - list12[i] == 2:
# print(list12[i - 1],list12[i])
家庭四人,年齡不同,3人是平方數,15年前還有3人年齡爲平方數
# 11.今有四個人,他們得年齡各不相同,他們年齡總和是129,而其中有三個人的年齡是平方數,
# 若倒退15年,這四人中仍有三個人的年齡是平方數,求他們各自的年齡
# #
list_11 = []
for i in range(129):
for j in range(129):
for k in range(129):
for m in range(129):
if i*i +j*j+k*k+m ==129 and i!= j and i!= k \
and i!= m and j!= k and j!= m and i!= k and i!= m:
# print( i*i ,j*j,k*k,m)if i*i >15 and j*j>15 and k*k>15and m>15else None
a =i*i
b =j*j
c = k*k
d = m
for n in range(1, 13): # a,b,c,最少有兩個減去15還是平方數
for x in range(1, 13): # 無外乎兩種可能
if a ==n*n +15 and b ==x*x +15 or b ==n*n +15 and c ==x*x +15:
if a >15 and b>15 and c>15and d>15 : # 此時結果已出,但順序有多種可能
list_11.append(a) # 查重!
if b not in list_11:
list_11.append(b)
if c not in list_11:
list_11.append(c)
# if d not in list_11:
list_11.append(d)
print(f"他們各自的年齡組合爲:{list_11},\t",end="\n"
f"十五年前爲:{ [i-15 for i in list_11]}")
break
驗證:任意一個大於9的整數減去它的各位數字之和所得的差,一定能被9整除.
# 10.驗證:任意一個大於9的整數減去它的各位數字之和所得的差,一定能被9整除.
#
# num_10 = 10
# sum_10 = 0
# while num_10 > 9:
# str_10 = str(num_10)
# for i in range(len(str_10)):
# sum_10 += int(str_10[i])
# # print(sum_10)
# # print(num_10)
# if (num_10 - sum_10) % 9 == 0:
# # print(f"驗證成功!,整數爲{num_10},和爲{sum_10}")
# sum_10 = 0
#
# else:
# print(f"驗證失敗!,整數爲{num_10},和爲{sum_10}")
# num_10 += 1