99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁(yè)大數(shù)據(jù)時(shí)代數(shù)據(jù)分析師教程《Python數(shù)據(jù)分析極簡(jiǎn)入門》第1節(jié) Python基礎(chǔ)知識(shí)
數(shù)據(jù)分析師教程《Python數(shù)據(jù)分析極簡(jiǎn)入門》第1節(jié) Python基礎(chǔ)知識(shí)
2024-11-18
收藏

近年來(lái),隨著數(shù)據(jù)科學(xué)的逐步發(fā)展,Python語(yǔ)言的使用率也越來(lái)越高,不僅可以做數(shù)據(jù)處理,網(wǎng)頁(yè)開發(fā),更是數(shù)據(jù)科學(xué)、機(jī)器學(xué)習(xí)深度學(xué)習(xí)等從業(yè)者的首選語(yǔ)言。

“工欲善其事,必先利其器?!?要做好數(shù)據(jù)分析,離不開一個(gè)好的編程工具,不論是從Python的語(yǔ)法之簡(jiǎn)潔、開發(fā)之高效,招聘崗位之熱門來(lái)說(shuō),Python都是數(shù)據(jù)科學(xué)從業(yè)者需要掌握的一門語(yǔ)言。

但一直以來(lái),人們卻誤以為“學(xué)會(huì)Python”是件很難的事情。

實(shí)則不然,這恰恰是我們選擇學(xué)Python的理由之一。

事實(shí)證明,Python人人皆能學(xué)會(huì)——千萬(wàn)別不信。

  • 老少皆宜 —— 也就是說(shuō),“只要你愿意”,根本沒有年齡差異。十二歲的孩子可以學(xué);十八歲的大學(xué)生可以學(xué);在職工作人員可以學(xué)…… 就算你已經(jīng)退休了,想學(xué)就能學(xué),誰(shuí)也攔不住你。

  • 不分性別,男性可以學(xué),女性同樣可以學(xué),性別差異在這里完全不存在。

  • 不分國(guó)界,更沒有區(qū)域差異 —— 互聯(lián)網(wǎng)的恩惠在于,你在北京、紐約也好,老虎溝、門頭溝也罷,在這個(gè)領(lǐng)域里同樣完全沒有任何具體差異。

尤其是在中國(guó)?,F(xiàn)狀是,中國(guó)的人口密度極高,優(yōu)質(zhì)教育資源的確就是稀缺…… 但在計(jì)算機(jī)科學(xué)領(lǐng)域,所有的所謂 “優(yōu)質(zhì)教育資源” 事實(shí)上完全沒有任何獨(dú)特的競(jìng)爭(zhēng)力 —— 編程領(lǐng)域,實(shí)際上是當(dāng)今世上極為罕見的 “教育機(jī)會(huì)公平之地”。又不僅在中國(guó)如此,事實(shí)上,在全球范圍內(nèi)也都是如此。

多年以前,不識(shí)字的人被稱為文盲……

后來(lái),不識(shí)英文,也是文盲。人們發(fā)現(xiàn)很多科學(xué)文獻(xiàn)的主導(dǎo)語(yǔ)言都是英語(yǔ)……

再后來(lái),不會(huì)計(jì)算機(jī)的也算是文盲,因?yàn)椴粫?huì)計(jì)算機(jī)基本操作,很多工作的效率很低下,浪費(fèi)了很多時(shí)間……

近些年,不會(huì)數(shù)據(jù)分析的,也算做文盲了,互聯(lián)網(wǎng)高速發(fā)展,用戶行為數(shù)據(jù)越來(lái)越多,

你作為一個(gè)個(gè)體,每天都在產(chǎn)生各種各樣的數(shù)據(jù),然后時(shí)時(shí)刻刻都在被別人使用著、分析著…… 然而你自己卻全然沒有數(shù)據(jù)分析能力,甚至不知道這事很重要,是不是感覺很可怕?你看看周邊那么多人,有多大的比例想過這事?反正那些天天看機(jī)器算法生成的信息流的人好像就是全然不在意自己正在被支配……

怎么辦?學(xué)唄,學(xué)點(diǎn)編程罷 —— 巧了,這還真是個(gè)正常人都能學(xué)會(huì)的技能。

為便于上手學(xué)習(xí),在開始前再做兩點(diǎn)補(bǔ)充

  1. 安裝開發(fā)工具

眾所周知,在數(shù)據(jù)分析相關(guān)的編程語(yǔ)言中,有三個(gè)重中之重:Python、R、Julia 俗稱數(shù)據(jù)科學(xué)三劍客。如果有一個(gè)工具能集中編寫這三者的代碼,為大家省去各種安裝開發(fā)工具的時(shí)間,那簡(jiǎn)直太好不過了,于是jupyter應(yīng)運(yùn)而生,作為“工具的工具”而備受數(shù)據(jù)科學(xué)從業(yè)者的青睞!

Jupyter的名字就很好地詮釋了這一發(fā)集大成的思路,它是 Julia、Python、R 語(yǔ)言的組合,拼寫相近于木星(Jupiter),而且現(xiàn)在支持的語(yǔ)言也遠(yuǎn)超這三種了。

所以需要讀者自行下載安裝好Anaconda提供的Jupyter notebook或者jupyter lab,以便于更好地運(yùn)行本文相關(guān)代碼。安裝好后可以直接運(yùn)行Python,因?yàn)槔锩嬉呀?jīng)幫你集成好了環(huán)境。

  1. 文章閱讀指南

雖然筆者力求極簡(jiǎn),帶你入門Python,但你依然有可能遇到問題,因?yàn)榫幊陶Z(yǔ)言的知識(shí)體系有一個(gè)特點(diǎn),知識(shí)點(diǎn)之間不是線性的從前往后,而是呈網(wǎng)狀的,經(jīng)常出現(xiàn)前置引用。所以很多時(shí)候可能不經(jīng)意間就用的是后面的知識(shí)點(diǎn),這是不可避免的,遇到這種情況,注定要反復(fù)閱讀若干遍,之所以取名叫極簡(jiǎn)入門,這一部分的目標(biāo)就在與并不是讓你立馬學(xué)會(huì)就去寫代碼,而是讓你脫盲……

好了,接下來(lái),與大家一起開始我們的Python旋風(fēng)之旅,沿用之前《極簡(jiǎn)統(tǒng)計(jì)學(xué)入門》、SQL數(shù)據(jù)分析極簡(jiǎn)入門》的“MVP”思路,用三節(jié)的內(nèi)容梳理一下Python數(shù)據(jù)分析的核心內(nèi)容。整個(gè)系列框架如下:

  • 第1節(jié) Python基礎(chǔ)知識(shí)

  • 第2節(jié) Pandas基礎(chǔ)知識(shí)

    • 1-Pandas 簡(jiǎn)介
    • 2-Pandas 數(shù)據(jù)類型-
    • 3-Pandas 數(shù)據(jù)選取-
    • 4-Pandas 條件查詢-
    • 5-Pandas 數(shù)據(jù)運(yùn)算-
    • 6-Pandas 合并拼接-
    • 7-Pandas 分組聚合-
    • 8-Pandas 重塑透視-
  • 第3節(jié) Pandas基礎(chǔ)知識(shí)

    • 9-Pandas 文本數(shù)據(jù)
    • 10-Pandas 時(shí)間數(shù)據(jù)
    • 11-Pandas 窗口數(shù)據(jù)
    • 12-Pandas 數(shù)據(jù)讀寫
    • 13-Pandas 表格樣式
    • 14-Pandas 數(shù)據(jù)可視化

如果你接觸過不同編程語(yǔ)言就會(huì)發(fā)現(xiàn),任何編程語(yǔ)言的學(xué)習(xí),都離不開3個(gè)最基本的核心要素,數(shù)據(jù)類型、流程控制、函數(shù)

數(shù)據(jù)類型是用來(lái)描述數(shù)據(jù)的性質(zhì)和特征的,它決定了數(shù)據(jù)在計(jì)算和處理過程中的行為和規(guī)則。常見的數(shù)據(jù)類型包括整數(shù)、浮點(diǎn)數(shù)、字符串、日期等。簡(jiǎn)而言之,就是你將要操作的東西具有什么樣的特點(diǎn)。

流程控制是指通過條件判斷和循環(huán)等方式,控制程序按照一定的順序執(zhí)行不同的操作步驟。它決定了數(shù)據(jù)的處理流程,包括判斷條件、循環(huán)次數(shù)、分支選擇等。簡(jiǎn)而言之,就是你要操作這個(gè)東西的基本流程是什么

函數(shù)是一段預(yù)先定義好的代碼,用于執(zhí)行特定的操作或計(jì)算。它接受輸入?yún)?shù),并返回一個(gè)結(jié)果。函數(shù)可以用來(lái)對(duì)數(shù)據(jù)進(jìn)行各種計(jì)算、轉(zhuǎn)換、篩選等操作,以滿足特定的需求。簡(jiǎn)而言之,就是你要怎么樣才能可復(fù)用地操作這一類東西

我們來(lái)看第一個(gè)核心要素:數(shù)據(jù)類型

數(shù)據(jù)類型

Python中的數(shù)據(jù)類型有很多,如果我們按照大類來(lái)分,可以分為三大數(shù)據(jù)類型

① 數(shù)字型

整型 int

a = 2022                  # 把2022賦值給a
type(a)                   # 查看數(shù)據(jù)類型:<class 'int'>
int

浮點(diǎn)型 float

b = -21.9
type(b)                   數(shù)據(jù)類型:<class 'float'>
float

復(fù)數(shù)型 complex

c = 11 + 36j
type(c)                   數(shù)據(jù)類型:<class 'complex'>
complex

布爾型 bool

d = True
type(d)                   數(shù)據(jù)類型:<class 'bool'>
bool

② 字符串型

str_a = "Certified_Data_Analyst"            # 創(chuàng)建字符串:"Certified_Data_Analyst"
type(str_a)                                 數(shù)據(jù)類型:<class 'str'>
str
len(str_a)                 # 字符串長(zhǎng)度:
22
str_a[0]                   # 輸出字符串第1個(gè)字符
'C'
str_a[10]                  # 輸出字符串第11個(gè)字符
'D'
str_a[15]                  # 輸出字符串第16個(gè)字符
'A'
str_a[:9]                   # 輸出字符串第1到9個(gè)字符
'Certified'
str_a[10:14]                # 輸出從第11到14個(gè)的字符
'Data'
str_a[15:]                  # 輸出從第15個(gè)后的所有字符
'Analyst'
str_a * 2                   # 輸出字符串2次
'Certified_Data_AnalystCertified_Data_Analyst'
str_a+"_Exam"               # 連接字符串 
'Certified_Data_Analyst_Exam'
str_a.upper()               # 轉(zhuǎn)換為大寫
'CERTIFIED_DATA_ANALYST'
str_a.lower()               # 轉(zhuǎn)換為小寫
'certified_data_analyst'
int("1024")                 # 字符串轉(zhuǎn)數(shù)字:1024
1024
str(3.14)                   # 數(shù)字轉(zhuǎn)字符串:'3.14'
'3.14'
"Certified_Data_Analyst".split("_")        # 分隔符拆分字符串
['Certified', 'Data', 'Analyst']
"Certified_Data_Analyst".replace("_"" "# 替換字符串"_"為" "
'Certified Data Analyst'
"7".zfill(3)              # 左邊補(bǔ)0
'007'

③ 容器型

可以容納多個(gè)元素的的對(duì)象叫做容器,這個(gè)概念比較抽象,你可以這么理解,容器用來(lái)存放不同的元素,根據(jù)存放特點(diǎn)的不同,常見的容器有以下幾種:list(列表)、tuple(元組)、dict(字典)、set(集合)

列表 list()

用中括號(hào)[]可以創(chuàng)建一個(gè)list變量

[2,3,5,7]
[2, 3, 5, 7]

元組 tuple()

用圓括號(hào)()可以創(chuàng)建一個(gè)tuple變量

(2,3,5,7)
(2, 3, 5, 7)

集合 set()

用花括號(hào){}可以創(chuàng)建一個(gè)集合變量

{2,3,5,7}
{2, 3, 5, 7}

字典 dict()

用花括號(hào){}和冒號(hào):,可以創(chuàng)建一個(gè)字典變量

{'a':2,'b':3,'c':5,'d':7}
{'a': 2, 'b': 3, 'c': 5, 'd': 7}

流程控制

分支

舉例說(shuō)明,我們給x賦值-10,然后通過一個(gè)分支做判斷,當(dāng)x大于零時(shí)候輸出"x是正數(shù)",當(dāng)x小于零的時(shí)候輸出"x是負(fù)數(shù)",其他情況下輸出"x是零"

x = -10

if x > 0:
    print("x是正數(shù)")
elif x < 0:
    print("x是負(fù)數(shù)")
else:
    print("x是零")
x是負(fù)數(shù)

循環(huán)

舉例說(shuō)明for循環(huán),用for循環(huán)來(lái)迭代從1到5的數(shù)字,并將每個(gè)數(shù)字打印出來(lái)

# for循環(huán)
for i in range(16):
    print(i)
1
2
3
4
5

首先,range(1, 6)函數(shù)生成一個(gè)序列,從1到5(不包括6)。

然后,for循環(huán)使用變量i來(lái)迭代這個(gè)序列中的每個(gè)元素。

在每次迭代中,print(i)語(yǔ)句將當(dāng)前的i值打印出來(lái)。

再舉例說(shuō)明while循環(huán):用while循環(huán)迭代從1到10的數(shù)字,并將每個(gè)數(shù)字打印出來(lái)

# while循環(huán)
i = 1
while i <= 10:
    print(i)
    i += 1
    if i == 6:
        break
1
20
3
4
5

首先,將i初始化為1。

然后,while循環(huán)將在i小于或等于10時(shí)執(zhí)行。在每次循環(huán)中,print(i)語(yǔ)句將當(dāng)前的i值打印出來(lái)。

接下來(lái),i += 1語(yǔ)句將i的值遞增。在每次循環(huán)中,if i == 6: break語(yǔ)句將檢查i的值是否等于6。如果是,則使用break語(yǔ)句終止循環(huán)。

函數(shù)

Python提供了許多常用函數(shù),這部分內(nèi)容數(shù)據(jù)分析最基礎(chǔ)的內(nèi)容,有部分函數(shù)在Python內(nèi)置庫(kù)就已經(jīng)自帶

常用函數(shù):

abs(x)           # 返回x的絕對(duì)值。

round(x)         # 返回最接近x的整數(shù)。如果有兩個(gè)整數(shù)與x距離相等,將返回偶數(shù)。

pow(x, y)        # 返回x的y次方。

sqrt(x)          # 返回x的算術(shù)平方根。

max(x1, x2, ...) # 返回一組數(shù)中的最大值。

min(x1, x2, ...) # 返回一組數(shù)中的最小值。

sum([x1,x2,...]) # 返回可迭代對(duì)象中所有元素的和。

也有一些是來(lái)自于math庫(kù),我們需要用from math import *來(lái)引入math庫(kù),然后才能調(diào)用里面的函數(shù)。這個(gè)過程就好比你要使用一個(gè)工具箱里面的工具,必須先找到工具箱。通過使用這些數(shù)學(xué)函數(shù),可以進(jìn)行各種數(shù)學(xué)計(jì)算和數(shù)據(jù)處理操作。

常用數(shù)學(xué)函數(shù)

# 數(shù)學(xué)運(yùn)算函數(shù)
from math import *

sqrt(x)                              #x的算術(shù)平方根

log(x)                               #自然對(duì)數(shù)

log2(x)                              #以2為底的常用對(duì)數(shù)

log10(x)                             #以10為底的常用對(duì)數(shù)

exp(x)                               #x的e次冪

modf(x)                              #返回x的?數(shù)部分和整數(shù)部分

floor(x)                             #對(duì)x向下取值整

ceil(x)                              #對(duì)x向上取整

divmod(x,y)                          #接受兩個(gè)數(shù)字,返回商和余數(shù)的元組(x//y , x%y)# 三角函數(shù)

sin(x)                               #x的正弦值

cos(x)                               #x的余弦值

tan(x)                               #x的正切值

asin(x)                              #x的反正弦值

acos(x)                              #x的反余弦值

atan(x)                              #x的反正切值# 排列組合函數(shù)

# from itertools import *
product()                            #序列中的元素進(jìn)行排列, 相當(dāng)于使用嵌套循環(huán)組合
permutations(p[, r])                 #從序列p中取出r個(gè)元素的組成全排列
combinations(p, r)                   #從序列p中取出r個(gè)元素組成全組合,元素不允許重復(fù)
combinations_with_replacement(p, r)  #從序列p中取出r個(gè)元素組成全組合,允許重復(fù)# 簡(jiǎn)單統(tǒng)計(jì)函數(shù) pandas
describe()                           #描述性統(tǒng)計(jì)
count()                              #非空觀測(cè)數(shù)量
sum()                                #所有值之和
mean()                               #平均值
median()                             #中位數(shù)
mode()                               #一組數(shù)的眾數(shù)
std()                                #標(biāo)準(zhǔn)差
var()                                #方差
min()                                #所有值中的最小值
max()                                #所有值中的最大值
abs()                                #絕對(duì)值
prod()                               #數(shù)組元素的乘積
corr()                               #相關(guān)系數(shù)矩陣
cov()                                #協(xié)方差矩陣# 排序函數(shù)
sort()                                #沒有返回值,會(huì)對(duì)列表進(jìn)行原地排序
sorted()                             #需要用一個(gè)變量進(jìn)行接收,不會(huì)修改原有列表# 集合運(yùn)算符號(hào)和函數(shù)
&                                    #交集
|                                    #并集
-                                    #差集
^                                    #異或集(不相交的部分)
intersection()                       #交集
union()                              #并集
difference()                         #補(bǔ)集
symmetric_difference()               #異或集(不相交的部分)
isdisjoint()                         #兩集合有無(wú)相同元素
issubset()                           #是不是子集
issuperset()                         #是不是超集# 缺失值處理(Pandas)
np.nan (Not a Number)                #空值
None                                 #缺失值
pd.NaT                               #時(shí)間格式的空值# 判斷缺失值
isnull()/isna()                      #斷SeriesDataFrame中是否包含空值
notnull()                            #與isnull()結(jié)果互為取反
isin()                               #判斷SeriesDataFrame中是否包含某些值
dropna()                             #刪除SeriesDataFrame中的空值
fillna()                             #填充SeriesDataFrame中的空值
ffill()/pad()                        #用缺失值的前一個(gè)值填充
bfill()/backfill()                   #用缺失值的后一個(gè)值填充
replace()                            #替換SeriesDataFrame中的指定值

自定義函數(shù)

自定義函數(shù)是一種在Python中自行定義的可重復(fù)使用代碼塊的方法。通過定義自己的函數(shù),可以將一系列操作放在一個(gè)函數(shù)中,并在需要時(shí)多次調(diào)用該函數(shù)。

舉例說(shuō)明,如何創(chuàng)建和調(diào)用一個(gè)自定義函數(shù):

def linear(x):
    y = 2*x + 4
    return y

在上面的例子中,我們用def linear(x): 定義了一個(gè)名為linear的函數(shù),該函數(shù)接收一個(gè)參數(shù)x。

然后函數(shù)體內(nèi)計(jì)算了一個(gè)y值,它是x的兩倍加上4。

這樣,我們調(diào)用linea函數(shù)的時(shí)候,并傳入一個(gè)參數(shù)x時(shí),函數(shù)將返回計(jì)算得到的y值。例如,如果我們調(diào)用linear(3),函數(shù)將返回10,因?yàn)?code style="font-size: 14px; word-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; color: #1e6bb8; background-color: rgba(27,31,35,.05); font-family: Operator Mono, Consolas, Monaco, Menlo, monospace; word-break: break-all;">2*3 + 4 = 10。

可以根據(jù)具體的需求來(lái)編寫自定義函數(shù),并在程序中調(diào)用它們。

再看一個(gè)稍微復(fù)雜一點(diǎn)的例子(PS:建議初學(xué)者先跳過這個(gè)例子)

# 斐波那契數(shù)列(通過迭代方法實(shí)現(xiàn))
def fib(n):
    n1=1;n2=1;n3=1
    if n<1:
        print('輸入有誤!')
        return 0
    else:
        while (n-2) > 0 :
            n3 = n2 + n1
            n1 = n2
            n2 = n3
            n -= 1
        return n3
result = fib(35)
result 
9227465
# 斐波那契數(shù)列(通過遞歸方法實(shí)現(xiàn))
def fib(n):
    if n < 1:
        print('輸入有誤!')
        return -1
    elif n == 1 or  n == 2:
        return 1
    else:
        return fib(n-1) + fib(n-2)
result = fib(35)
result
9227465
# 斐波那契數(shù)列(通過矩陣方法實(shí)現(xiàn))
import numpy  as np
def dotx(a,n):
    for i in range(1,n+1):
        if i == 1:
            b = a
        else :
            b = np.dot(a,b)
    return b


def fib(n):
    a = np.array([[1,1],[1,0]])
    r = dotx(a,n)
    return r[0,1]
result = fib(35)
result
9227465

下一節(jié) 《第2節(jié) Pandas簡(jiǎn)介》

這里分享一個(gè)你一定用得到的小程序——CDA數(shù)據(jù)分析師考試小程序。 它是專為CDA數(shù)據(jù)分析認(rèn)證考試報(bào)考打造的一款小程序。可以幫你快速報(bào)名考試、查成績(jī)、查證書、查積分,通過該小程序,考生可以享受更便捷的服務(wù)。 掃碼加入CDA小程序,與圈內(nèi)考生一同學(xué)習(xí)、交流、進(jìn)步!

數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼

若不方便掃碼,搜微信號(hào):CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺(tái)檢測(cè)極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說(shuō)明請(qǐng)參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請(qǐng)輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請(qǐng)輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }