python基础汇总(三)

想成为一个优秀的python程序员,从而走上全栈前端工程师的职位,阅读能力是一个必备的能力。

以现在的水平,你还不具备完全理解你找到代码的能力,不过通过接触这些代码,你可以熟悉真正的变成项目是什么样子的。

我将列举一些适合看python代码的网址,很简单,直接看.py结尾的文件都可以。(setup.py的文件就忽略吧)

1.bitbucket.org

2.launchpad.net

3.sourceforge.net

4.freecode.com

大胆阅读吧,人生苦短,我用python。

在开始本期正题之前,我们需要知道逻辑关系的重要性,这即将和我们要学到的if判断语句有关:

and 与
or 或
not 非
!= 不等于
== 等于
>= 大于等于
<= 小于等于
True 真
False 假

例子: 3!=4 and not("testing" != ="test"  or  "python" =="python")

解析: True  and False

答案:False

那么,我还是直接点,贴出一段if和else函数的代码:

people=int(input(‘pepple:‘))

cars= int(input(‘cars:‘))

buses=int(input(‘buses:‘))

if cars > people:

print("We should take the cars.")

elif cars < people :

print("We should not take the cars.")

else:

print("We can‘t decide.")

if buses > cars:

print("That‘s top many buses.")

elif buses < cars:

print("Maybe we could take the buses.")

else:

print("We still can‘t decide.")

if people < buses:

print("Alright, let‘s just take the buses.")

else:

print("Fine,let‘s stay home then.")

不要忘了,input输入的东西都是字符串格式噢,所以在后面if的比较数字大小之前,需要将输入的转换成int。

那么我输入三个数据如下:

pepple:30
cars:20
buses:40

输出结果:
We should not take the cars.
That‘s top many buses.
Alright, let‘s just take the buses.

基本就是这段代码按着你输入的数据,选择语句打印出来。那么,elif是什么呢?

想必大家也看出来了,其实就是python中的将if  else 缩写成了elif:,这就很符合python的特点了:优美简洁。

那么我想问三个问题:

①你认为if对它的下一行代码做了什么了?

②为什么if语句的下一行需要四个空格的缩进,不缩进会怎么样?

③如果多个elif块都是True,Python会如何处理?

大家心里有答案了吗?

①if语句为代码创建了一个所谓的分支。if语句告诉你的脚本:如果这个布尔表达式为真,就运行分支的内容,否则就跳过。

②行尾的冒号的作用就是告诉Python接下来你要创建一个新的代码块。如果没有缩进,就会报错。因为Python的规则里,只要一行以冒号(:)结尾,接下来的内容就必须缩进。

③Python只会运行遇到的第一个True块,余下的直接跳过。

那么,大家学了了上面,应该有能力写出更加有趣的程序出来了,熟练使用if,else,elif创建包含条件判断的脚本了,不妨花点时间试试写一段程序。

在这儿我要罗嗦一下,你可以在if语句内部再放一个if语句,这是一个很强大的功能,可以用来创造嵌套的决定,其中一个的分支引向另一个分支的子分支。

有人会问,如果想实现4个以上的判断呢?很简单,多写几个elif块就行了。

小弟不才,我也写了一个一段家庭情况调查的代码,这段代码我大概讲一下:

首先要你输入爸妈的姓名,然后问你有没有兄弟姐妹,如果有的话,要你输入爸妈和兄弟姐妹的年龄。如果没有,要你输入爸妈的年龄。

print("Today,You‘ll introduce your family members to you.")

print("Please write down your information about your family.")

father=input("What‘s your father name?>")

mother=input("What‘s your mother name?>")

other_people=input("Do you have brother or sister?which?>")

if other_people == ‘brother‘ or other_people == ‘sister‘:

other_people_name=input("What‘s your %s name?>"%other_people)

print("Right,your family has four members now,\nfather:%s\nmother:%s\n%s:%s\nand you.\n"

%(father,mother,other_people,other_people_name))

father_age=int(input("Please write down your father age:"))

mother_age=int(input("Please write down your mother age:"))

other_people_age=int(input("Please write down your %s age:"%other_people))

if (father_age >mother_age) and (mother_age > other_people_age) and (father_age > other_people_age):

print("Well,your family is very harmonious.\n")

elif (father_age < mother_age) and (mother_age>other_people_age)and (father_age>other_people_age):

print("Oh,your mother may be a family leader.\n")

else:

print("What the fuck?you may write wrongly.\n")

else:

print("Right,your family has there members now,\nfather:%s\nmother:%s\nand you.\n"

%(father,mother))

father_age=int(input("Please write down your father age:"))

mother_age=int(input("Please write down your mother age:"))

if father_age >mother_age:

print("Well,your family is very harmonious.\n")

else:

print("Oh,your mother may be a family leader.\n")

print("Thanks for your time.")

输出结果是这样的:

Today,You‘ll introduce your family members to you.
Please write down your information about your family.
What‘s your father name?>master
What‘s your mother name?>paopao
Do you have brother or sister?which?>brother
What‘s your brother name?>didi
Right,your family has four members now,
father:master
mother:paopao
brother:didi
and you.

Please write down your father age:50
Please write down your mother age:45
Please write down your brother age:10
Well,your family is very harmonious.

Thanks for your time.

当然了,加粗的内容部分是我键入回答问题的内容,怎么样,我写的这段程序还可以吧?

如果你输入的兄弟姐妹的年龄大于你的爸妈,这个程序会反馈你:What the fuck?you may write wrongly.

有兴趣的,可以复制过去自己运行试试噢,嘿嘿。

不过,不要太过于对自己的代码盲目,时刻对自己的程序有一个批判的态度,我写出来的程序并非最佳的程序,问题还是很多:

①只能支持一个兄弟姐妹的情况,有些人家里有两个哥哥姐姐,在这段程序中无法得到反馈。

②代码有太多重复的地方,不知道如何去最简化。

③妈妈的年龄不一定一定要比兄弟姐妹年龄大,有些父亲可以找年轻的后妈啊,比自己的儿女年轻……咳咳,扯远了,大家忽略这一条。

总之,你们看到这儿,你们最好也去尝试写一段if/elif/else代码,锻炼自己的动手能力,写完之后审视一下自己写的程序有哪些不足。

好了,我们接下来来介绍一下列表和while的知识:

while循环,顾名思义,会一直执行它下面的代码块,直到它对应的布尔表达式为False时才会停下来。

和if语句不一样的是,它下面的代码块不是只被运行一次,而是运行完后再跳回到while所在的位置,如此重复进行,直到while表达式为False为止。

那么我直接贴出列表和while的程序:

elements=[]

for i in range(0,5):

print("This one is %d"%i)

elements.append(i)

print("The element:",elements)

print(" ")

print("Now,the elements:",elements)

输出结果:

This one is 0
The element: [0]

This one is 1
The element: [0, 1]

This one is 2
The element: [0, 1, 2]

This one is 3
The element: [0, 1, 2, 3]

This one is 4
The element: [0, 1, 2, 3, 4]

Now,the elements: [0, 1, 2, 3, 4]

相信大家都能看得懂这段代码和运行结果,这儿就简单说一下吧:

append()到底是什呢?

它的功能是在列表的尾部追加元素。

for循环和while循环有什么不同?

for循环只能对一些的集合进行循环,while循环可以对任何对象进行循环,然而,while循环比起来更难弄,一般的任务用for循环更容易一些。

访问列表的元素到底是个什么情况呢?

这就是涉及到基数和序数了,扯概念的话估计也不懂,我用英语举例子,one,first。能理解了吗?一和第一的区别。只是在python列表中第一个基数是以0开始的,但它对应的是序数第一。

好了,现在已经到了一个激动人心的时刻了,本篇文章迈入一个高潮的时刻,前方高能,请备好纸巾。

我将放出一个游戏的代码程序,大家试着花时间去理解这个游戏:

from sys import exit #从sys功能包调用exit功能

def gold_room():

print("This room is full of gold. How much do you take?\n")

next=int(input("> ")) #经过优化过的代码

if next >= 0:

# next =input("> ") #这代码欠缺优化

# if "0" in next or "1" in next:

how_much=int(next)

else:

dead("Man,learn to type a number.\n")

if how_much <50:

print("Nice,you‘re not greedy,you win!")

exit(0) #exit(0)表示程序正常退出。在本段程序中,就是一个死亡的意思,游戏失败。

else:

dead("You greedy bastard!")

def bear_room():

print("There is a bear here.")

print("The bear has a bunch of honey.")

print("The fat bear is in front of another door.")

print("How are you going to move the bear?")

print("take honey or taunt bear?\n")

bear_moved = False

while True: #创建一个无限循环。

next=input("> ")

if next == "take honey":

dead("The bear looks at you then slaps your face off.")

elif next =="taunt bear" and not bear_moved:

print("The bear has moved from the door. You can go through it now.")

bear_moved =True

print("open door or taunt bear again?\n")

elif next == "taunt bear again" and bear_moved:

dead("The bear gets pissed off and chews your leg off.")

elif next== "open door" and bear_moved:

gold_room()

else:

print("I got no idea what that means.")

def cthulhu_room():

print("Here you see the great evil Cthulhu.")

print("He, it, whatever stares at you and you go insane.")

print("Do you flee for your life or eat your head?\n")

next =input("> ")

if "flee" in next:

start()

elif "head" in next:

dead("Well that was tasty!")

else:

cthulhu_room()

def dead(why):

print(why,"Good,job!")

exit(0)

def start():

print("You are in a dark room.")

print("There is a door to your right and left.")

print("Which one do you take?\n")

next=input("> ")

if next=="left":

bear_room()

elif next == "right":

cthulhu_room()

else:

dead("You stumble around the room until you starve.")

start()

我会给你们时间消化这段代码,并让它成功运行出来。然后问你们五个问题:

①开头的时候,我优化了以下两行代码:

next =input("> ")

if "0" in next or "1" in next:

请问,如果按这两行在里面运行,你们会遇到什么BUG?

优化成下面这两行代码过后,问题得到解决了?

next=int(input("> "))

if next >= 0:

②你能把这游戏的地图画出来吗?并把自己的路线也画出来。

③为什么会加入while True的无限循环?有什么意义?

④去查询一下exit(0)有什么意义?

⑤dead()到底是什么原理,在程序中有什么作用?

给大家一定的时间去解答一下这四个问题,停止向下浏览吧。

①如果按原代码运行,如果你要键入9,这段代码就会报错,因为它的要求就是要你输入含有0或1的数字,很显然这不合规矩。

所以优化之后,你输入的任何数字都转换为整数形式,符合用户输入的需求。

②我大概画了一个比较好看的地图,不喜勿喷,我觉得我画得很好。

然后我说一下我成功的路线吧,就是右转进入恶魔室,忽然反悔,安全回到了起点,左转进入大熊室,我选择了嘲讽大熊,

这时候熊让开了,我进去了黄金室,拿了49个黄金,被表扬不贪婪,游戏成功。

You are in a dark room.
There is a door to your right and left.
Which one do you take?

> right
Here you see the great evil Cthulhu.
He, it, whatever stares at you and you go insane.
Do you flee for your life or eat your head?

> flee
You are in a dark room.
There is a door to your right and left.
Which one do you take?

> left
There is a bear here.
The bear has a bunch of honey.
The fat bear is in front of another door.
How are you going to move the bear?
take honey or taunt bear?

> taunt bear
The bear has moved from the door. You can go through it now.
open door or taunt bear again?

> open door
This room is full of gold. How much do you take?

> 49
Nice,you‘re not greedy,you win!

当然了,老规矩,加粗的自然是键入的数据。

但是这世界不缺作死的人,嘲讽大熊还不够,想要继续得瑟,会再次回到选择门,直奔熊而去。

You are in a dark room.
There is a door to your right and left.
Which one do you take?

> left
There is a bear here.
The bear has a bunch of honey.
The fat bear is in front of another door.
How are you going to move the bear?
take honey or taunt bear?

> taunt bwar
I got no idea what that means.

> taunt bear
The bear has moved from the door. You can go through it now.
open door or taunt bear again?

> taunt bear again
The bear gets pissed off and chews your leg off. Good,job!

很显然,愤怒的大熊受不了你的再次嘲讽,选择了卸掉了你的腿,游戏失败。

当然,有人可能注意到了,我输错了一次,又回到了选择的阶段,不影响本次代码的继续运行,那么这就是第三个问题了,也就是While True。

③While True的意义当然很大了,你也看到了,我输错了之后,这段代码块并没有报错,而是打印了一条消息又经While True无限循环回到了开始选择门的阶段。

还有一个重要的作用就是,选择之后还有选择,就像你嘲讽大熊成功之后,后面还有一个开门进入黄金屋的选择啊。

如果你没有While True的话,你嘲讽大熊成功之后,这个if/elif/else的代码块就结束了,游戏也就结束了。就不会有后面开门进入黄金屋通关游戏的选择了。

当然了,如果恶魔屋输错了怎么办,我们可以看到恶魔屋的else的语句就是为输错而准备的,会反复让你停留在恶魔屋,直到你输入对了为止。

那么有人就会找茬,黄金屋不输入数字怎么办?

emm……这段代码会直接报错,玩游戏还是要遵守规则。不过你直接输入-50的话就不会报错了,会判定你死亡噢!

④exit(0)可以说是核心了,我们先来看看作用,在很多类型的操作系统里,exit(0)可以中止某个程序,可以表示正常退出程序。

当然了,你可以用不同的数字参数表示不一样的错误,比如exit(1)和exit(100)是不同的错误。要使用exit()首先就得从sys模块引入。

回到正题,exit(0)就是dead函数的核心,我们来看下一题。

⑤做一个有成功和失败的游戏程序,创造dead函数是不可避免的,定义一个dead函数里面,打印出死亡的原因,然后用exit(0)结束这代码,表示游戏的结束。

永远都不要害怕看懂长长的代码,我的推荐方法就是拆开来看,然后再又贯通起来,画一张地图,就可以慢慢去理解这段代码了。

那么,你们试过把加粗的字体反过来看吗?

画一张地图,确定各部分之间的联系,然后拆开各部分写程序,最后连起来。

没错,我布置的任务就是要你制作一个不同类型的游戏,运用本章的知识点,结合上一行加粗的字体的方法,再看看下面:

1.每一条if语句必须包含一个else。不为什么,就是为输错的情况而准备的。

2.如果else不被使用,那将没有任何意义,你要么加个While True再给用户机会,要么就dead安排用户出局。

3.使用if/elif/else使应当耐心,将它们看成一个个段落。每个段落之间适当用一个空行隔开,增加代码的可读性。

4.如果if后面的布尔测算句子很复杂,可以尝试先赋予到一个取好名字的变量里面,也是增加代码可读性。

祝你能够成功写出一个游戏!

原文地址:https://www.cnblogs.com/Masterpaopao/p/10035513.html

时间: 2024-10-12 22:35:51

python基础汇总(三)的相关文章

Python基础(三)

Python基础(三) 深浅拷贝 函数(全局与局部变量) 内置函数 文件处理 三元运算 lambda 表达式 递归(斐波那契数列) 冒泡排序 深浅拷贝 一.数字和字符串 对于 数字 和 字符串 而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址. import copy #定义变量   数字.字符串 n1 = 123 #n1 = 'nick' print(id(n1))   #赋值 n2 = n1 print(id(n2))   #浅拷贝 n3 = copy.copy(n1) pri

Python 基础语法(三)

Python 基础语法(三) --------------------------------------------接 Python 基础语法(二)-------------------------------------------- 七.面向对象编程 python支持面向对象编程:类和对象是面向对象编程的两个主要方面,类创建一个新的类型,对象是这个类的实例. 对象可以使用普通的属于对象的变量存储数据,属于对象或类的变量被称为域:对象也可以使用属于类的函数,这样的函数称为类的方法:域和方法可

Python基础篇(三)

元组是序列的一种,与列表的区别是,元组是不能修改的. 元组一般是用圆括号括起来进行定义,如下: >>> (1,2,3)[1:2]     (2,) 如果元组中只有一个元素,元组的表示有些奇怪,末尾需要加上一个逗号: >>> (1,2,3)[1:2]     (2,) >>> 3*(3)      9      >>> 3*(3,)      (3, 3, 3) tuple函数 tuple函数用于将任意类型的序列转换为元组: >&

python基础汇总(六)

这是最后一篇python基础汇总了. 在进入正题之前,忍不住唠叨一句: python的前途越来越光明,随着马云的无人酒店,无人海底捞陆续面世,python重要性越来越大. 未来是属于人工智能的,完成人工智能的代码是python自动化代码. 我们先来复习一下列表和字典的一些基础知识. 一.列表 ten_things="Apples Oranges Crows Telephones Light Sugar" print("Wait there's not 10 things in

Python基础第三篇

一.collections系列 Counter是对字典类型的补充,用于追踪值的出现次数,具备字典的所有功能 + 自己的功能 1.计数器Counter import collections a='abababsbsbhh' c=collections.Counter(a) #直接列出每个元素出现了几次,传入列表和元组也一样 print(c) #输出:Counter({'b': 5, 'a': 3, 'h': 2, 's': 2}) #most_common 列出Counter内的前几个 print

Python基础入门 (三)

一.set 特点: set是一个无序且不重复的元素集合访问速度快:天生解决元素重复问题 方法: 初始化 >>> s1 = set()>>> print(type(s1))<class 'set'> add() 增加元素 >>> s1.add('tom')>>> print(s1){'tom'} clear() 清空 >>> s1.clear()>>> print(s1)set() 差集

python 基础第三篇

一. 编码1. 最早的计算机编码是ASCII. 美国人创建的. 包含了英文字母(大写字母, 小写字母). 数字, 标点等特殊字符[email protected]#$%128个码位 2**7 在此基础上加了一位 2**88位. 1个字节(byte)2. GBK 国标码 16位. 2个字节(双字节字符)3. unicode 万国码 32位, 4个字节4. utf-8: 英文 8 bit 1个字节欧洲文字 16bit 2个字节中文 24bit 3个字节 8bit => 1 byte1024 byte

Python基础语法三组合数据类型

一.列表(Lists) 列表属于Python中的序列类型,它是任意对象的有序集合,通过 " 位置 "或者 " 索引 " 访问其中的元素,它具有可变对象.可变长度.异构和任意嵌套的特点. 列表里第一个元素的为值或者索引是从 " 0 " 开始,第二个元素则是 " 1 ",一次类推. 列表的元素放置在方括号 [] 中,以逗号来分隔各元素: 格式如下: listname = [元素1,元素2,元素3,...,元素n ] 1 1 lis

python基础(三)----字符编码以及文件处理

字符编码与文件处理 一.字符编码 由字符翻译成二进制数字的过程 字符--------(翻译过程)------->数字 这个过程实际就是一个字符如何对应一个特定数字的标准,这个标准称之为字符编码. 字符编码的发展史 阶段一:现代计算机起源于美国,最早诞生也是基于英文考虑的ASCII ASCII:一个Bytes代表一个字符(英文字符/键盘上的所有其他字符),1Bytes=8bit,8bit可以表示0-2**8-1种变化,即可以表示256个字符 ASCII最初只用了后七位,127个数字,已经完全能够代