掉進懸崖的小白,撿到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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章