Elements of Python_03

(内容包括Python语法概述,流程控制,条件表达式)

1 Python语法

1.1 Python的特点

Python是一种完全面向对象的、解释性的、可移植的、开源的脚本编程高级语言,具有丰富的库,允许边写边执行。他完全支持继承、重载,强大的第三方模块涵盖科学计算、人工智能、机器学习、Web开发、数据库接口、图形系统等多个领域。有Web开发、爬虫开发、运维开发、数据挖掘、人工智能等多个方向。

1.2 基本语法规则

虽然Python语法简单,但也有如下基本规则:

  • ①从头到尾,逐个语句执行
  • ②注释#、空白行、文档字符串(三引号)会直接被忽略
  • ③自动检测语句边界,语句边界由书写者的语句缩进形成(同一级别的语句的缩进必须相同)
  • ④复合语句(子句,clause):由首句、冒号、下一行开始相同缩进的代码块组成
  • ⑤通常一句一行,也允许但不建议一行多句或一句多行。
      一句多行: 续行符\可以续行接着写,小中大括号中的内容可以直接换行写;
      一行多句:分号隔开,或直接在冒号后面写。

1.3 几种常见语句

常用语句

2 流程控制语句

一项任务可以被变成一个流程,而描述这个流程就可以用自然语言、流程图、伪代码、程序代码等多种形式表示,自然语言是最简单的,流程图是最直观的,程序代码是唯一可以被计算机识别运行的。

2.1 流程图

流程图基本符号

2.1 分支语句if


上图是完整的if分支语句:
【书写时:在if后加一个逻辑运算式①,冒号结尾,下一行缩进,代码块①中书写此逻辑运算式①成立后要完成的语句块①;之后写在上以逻辑运算不成立的前提下,另一个逻辑运算式②,冒号结尾下一行缩进,代码块②中书写此逻辑运算式②成立后要完成的语句块②,以此类推。最后写else:,是上面n-1个clause都不满足时,执行的语句块n。】即,列出每种情况,和满足情况下要做的事。
【执行时:先判断逻辑运算式①,满足就执行语句块①并结束判断,不满足就判断逻辑运算式②,②满足就执行语句块②并结束判断,以此类推,如果都不满足,就执行else后的语句块n,并结束】即,从上到下执行,一旦满足某个结果,直接运行此语句块并结束判断。
一些说明:
1.Python中没有switch-case语句;
2.逻辑运算式可以用逻辑运算符连接,可以选择加或不加小括号;
3.条件和语句块用缩进来体现,所有语句块间的缩进距离应一致;中止一行就是中止一个语句(无需额外分号);中止缩进就是中止一个代码块(代码块无需大括号包裹);
4.if后可以没有else或者elif(关键字elif就是else if的简写)。如果有else,就一定会执行某一分支的语句块;
5.所有分支中,最多执行一个分支的语句块,执行后,结束整个判断。
关于else悬挂:
如果前面有好多个if嵌套在一起(虽然可以去避免嵌套,做成elif),怎么知道else属于哪个if呢? 很好办!你只需要看else的开头和一个if对齐,它就是哪个if的else。

关于if的例子:

#解一元二次方程的根
s = input("请依次输入二次项、一次项、常数项,用空格分隔:\n>>>")
a,b,c = [eval(k) for k in s.split(" ")]
delta = b*b-4*a*c
if delta==0 :
    x1 = x2 = -0.5*b/a
elif delta>0 :
    x1 = -0.5*b/a + 0.5*delta**0.5/a
    x2 = -0.5*b/a - 0.5*delta**0.5/a
else :
    x1 = complex(-0.5*b/a,0.5*(-delta)**0.5/a)
    x2 = x1.conjugate()
print(f"一元二次方程的两个解:\nx1 = {x1}\nx2 = {x2}")

2.2 交互循环while

循环的流程图

和if判断一样,while也会对逻辑表达式做判断,如果判断结果为真,就会进入循环,直到逻辑表达式不在成立,(或被中断)。

while的句式:

也就是说,【只要满足条件,就在循环体Loop中不断执行循环体语句块,除非有break、continue命令或者不再满足条件才会跳出】

#按位取出数字的值
num = eval(input("请输入数字:\n>>>"))
a = []
i = 0
flag = False
if num < 0:
    num = -num
    flag = True
    
while num - (10**(i)) >= 0 :
    print((10**(i)))
    a.append(int(num//10**i%10))
    i += 1  
#注意:循环前要把循环变量初始一下,循环体中要使循环变量离结束的条件更近
if flag :
    a.append("-")
elif a == [] :
    a = [0]
print(a)

2.3 序列迭代for

相比与while循环,由于有range函数,for循环的使用更加便捷。



把变量在某迭代器中遍历一遍,遍历每个元素时都执行循环体语句块。

#斐波那契数列前n项输出
num2,num1 = 0,1
for i in range(15):  #循环变量只用作计数
    num1,num2 = num1+num2,num1
    print(num1,end="\t")

#n以内的素数
print(2,end = "\t")
for i in range(3,500,2): #循环用作循环体语句块的变量
    flag = True
    for j in range(2,int(pow(i,0.5)+1)):
        if i%j == 0 :
            flag = False
            break
    if flag :
        print(i,end = "\t")

几点注意:

  1. for和while的区别: for在循环次数固定且可以直接表示时使用,while在终止条件明确且次数尚不确定时使用
  2. for和while循环体语句中,不能定义新变量,只能把原有变量重新赋值,所以定义中间变量需要在循环体外
  3. for循环的循环变量i的值,从迭代器中逐个收到,循环体中赋值只在本次循环中生效,甚至直接del i也不会报错
  4. 减少循环次数可以提高运行效率(如除了2以外的素数都是奇数,将偶数参与循环判断素数就是浪费;再比如高中学的数列求和直接用,1到100的和就不要循环了。)
#复利:周定投计算
annual_rate = eval(input("请输入平均年化利率:"))
if annual_rate>=1 :
    annual_rate /= 100
weekly_rate = (1+annual_rate)**(1/52)-1
week_capital = float(input("请输入周定投金额:"))
total_capital= amount = 0.0
stop_profit = int(input("请选择止盈条件:1.按年止盈\t2.按获利比率止盈\t3.按总金额止盈\n>>>"))
if stop_profit == 1 :
    for i in range(1,25*52+1):
        total_capital += week_capital
        amount = amount*(1+weekly_rate) + week_capital
        if (i%52 == 0) : print(f"第{i//52:2d}年,本金{total_capital:>9.2f},账户总额{round(amount,2):>9.2f},盈利比{(amount-total_capital)/total_capital:.2%}。")
elif stop_profit == 2 :
    stop_rate = eval(input("请输入想要的获利比率:"))
    i = 0
    if stop_rate>1 :
        stop_rate /= 100
    while ((amount-total_capital)/(total_capital+0.1) < stop_rate):
        i += 1
        total_capital += week_capital
        amount = amount*(1+weekly_rate) + week_capital
    else :
        print(f"第{i//52:2d}年第{i%52:2d}周,盈利比{(amount-total_capital)/total_capital:.2%},本金{total_capital:>9.2f},账户总额{round(amount,2):>9.2f}。")
elif stop_profit == 3 :
    would_amount = eval(input("请输入想要的总金额:"))
    i = 0
    while (amount <= would_amount):
        i += 1
        total_capital += week_capital
        amount = amount*(1+weekly_rate) + week_capital
    else :
        print(f"第{i//52:2d}年第{i%52:2d}周,总额达到{round(amount,2):>9.2f},盈利比{(amount-total_capital)/total_capital:.2%},本金{total_capital:>9.2f}。")

2.4.1 for循环下标提取

在for循环对字符串、列表或元组进行遍历的时候,我们往往用for i in list对列表中的元素进行读取,如果我们在读取元素的时候同时想要得到其下标,可以创建一个循环次数计数变量x=0,并且在每次循环之后自加来达到效果。另一种快捷的方法就是使用内置函数enumerate(iter)来实现这种功能。
如: for i,name in enumerate(representativesList): 这样的话,i就是这个元素的下标,name就是此下表对应的元素的内容。

2.4 break和continue

break和continue是打断原有循环体的一种方式,不同的是,continue直接跳入下一次循环,break跳出这一循环体(但不会跳出更高层的循环)。也就是说:
continue直接进入下一次循环,
break直接跳出本循环体。
另外,python中没有goto,虽然可以用第三方库做出goto的效果,但是if加goto效果和while是一模一样的。

2.5 三种条件表达式

和C语言的三目运算符(CONDITION?A:B)一样,Python也有自己的条件运算符,又根据列表中数据无类型相同的限制和逻辑运算符有逻辑短路一说,总结了三种条件表达式:


条件表达式

解释如下:
法①:这个方法就类似C语言的 (? :)运算符,是一个简易的判断,在A if CONDITION else B中,如果condition成立,则执行A,不然执行B。
法②:这个方法利用列表可以存下不同类型的数据,因为之前说过,False就是0,True是1,可以参加运算。所以condition的情况就代表了列表的第0和第1个元素。
法③:利用的是逻辑短路。

Extra1.1 (番外篇) 常见数列求和公式

如果您觉得Tc写得不错或者不好,欢迎批评✖或点赞👍。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,258评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,335评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,225评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,126评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,140评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,098评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,018评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,857评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,298评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,518评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,400评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,993评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,638评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,661评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容

  • 基于《Python语言程序设计基础(第2版)》 第一部分 初识Python语言 第1章 程序设计基本方法 1.1 ...
    柄志阅读 27,363评论 4 44
  • 非常传统的题目,计算机语言的三大核心语法要素的一部分:  1. 运算符;  2. 流程控制;同时建立程序的概念。 ...
    杨强AT南京阅读 550评论 0 3
  • Swift提供了多种控制流声明。包括while循环来多次执行一个任务;if,guard和switch声明来根据确定...
    BoomLee阅读 1,944评论 0 3
  • 江南,在地理上指的是长江中下游今天浙江西北部、上海、安徽东南部、江苏南部、江西东北部等地的长江以南部分。然而从历史...
    游大大旅游阅读 3,098评论 0 0
  • 逝去的时光并未远离 只是更深地钻入你的身体 退居幕后,成为额上灰暗的皱褶 你在心里藏下它们低沉的啾鸣 当午夜时分放...
    忧伤没有伤口阅读 218评论 2 2