笨方法学Python三

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了笨方法学Python三相关的知识,希望对你有一定的参考价值。

参考技术A 习题4:变量(variable)和命名

你已经学会了print和算术运算。下一步你要学的是“变量”。在编程中,变量只不过是用来指代某个东西的名字。程序员通过使用变量名可以让他们的程序读起来更像英语。而且因为程序员的记性都不怎么地,变量名可以让他们更容易记住程序的内容。如果他们没有在写程序时使用好的变量名,在下一次读到原来写的代码时他们会大为头疼的。

如果你被这章习题难住了的话,记得我们之前教过的找到不同点、注意细节。

1.在每一行的上面写一行注解,给自己解释一下这一行的作用。

2.倒着读你的.py文件。

3.朗读你的.py文件,将每个字符也朗读出来。

cars=100

space_in_a_car = 4.0

drivers=30

passengers = 90

5cars_not_driven = cars - drivers

cars_driven = drivers

carpool_capacity = cars_driven * space_in_a_car

average_passengers_per_car = passengers / cars_driven

11print "There are", cars, "cars available."

12print "There are only", drivers,

,"drivers available."

13print

"There will be", cars_not_driven, "empty cars today."

14 print "We can transport", carpool_capacity, "people today."

15print "We have", passengers, "to carpool today."

16print "We need to put about"

,average_passengers_per_car, "in each car."

Note: space_in_a_car中的_是下划线(underscore)字符。你要自己学会怎样打出这个字符来。

这个符号在变量里通常被用作假想的空格,用来隔开单词。你应该看到的结果

$ python ex4.py

There are 100 cars available.

There are only 30 drivers available.

There will be 7O empty cars today-

We can transport 120.o people today.

We have 90 to carpool today.

We need to put about 3 in each car.

加分习题

当我刚开始写这个程序时我犯了个错误,python告诉我这样的错误信息:

Traceback (most recent call last):

File "ex4.py", line 8, in

average_passengers_per_car = car_pool_capacity / passenger

NameError: name 'car_pool_capacity' is not defined

用你自己的话解释一下这个错误信息,解释时记得使用行号,而且要说明原因。

更多的加分习题:

1.我在程序里用了4.0作为space_in_a_car的值,这样做有必要吗?如果只用4会有什么问题?

2.记住4.0是一个“浮点数”,自己研究一下这是什么意思。

3.在每一个变量赋值的上一行加上一行注解。

4.记住=的名字是等于(equal),它的作用是为东西取名。

5.记住_是下划线字符(underscore)。

6.将python作为计算器运行起来,就跟以前一样,不过这一次在计算过程中使用变量名来做计算,常见的变量名有i,x,j等等。

习题5:更多的变量和打印

我们现在要键入更多的变量并且把它们打印出来。这次我们将使用一个叫“格式化字符串(formatstring)”的东西、每一次你使用“把一些文本引用起来,你就建立了一个字符串。字符串是程序将信息展示给人的方式。你可以打印它们,可以将它们写入文件,还可以将它们发送给网站服务器,很多事情都是通过字符串交流实现的。

字符串是非常好用的东西,所以再这个练习中你将学会如何创建包含变量内容的字符串。使用专门的格式和语法把变量的内容放到字符串里,相当于来告诉python:“嘿,这是一个格式化字符串,把这些变量放到那几个位置。’一样的,即使你读不懂这些内容,只要一字不差地键入就可以了。

my_name =

'ZedA. Shaw'

my_age= 35 # nota lie

3my_height= 74 # inches

4my_weight=180#lbs

5my_eyes = 'Blue

6 my_teeth = "White'

7my_hair = 'Brown

print "Let's talk about %s." % my_name

1o print "He's %d inches tall." %my_height

11 print "He's %d pounds heavy." % my_weight

12print "Actually that's not too heavy.

13print "He's got %s eyes and %s hair." % (my_eyes, my_hair)

14print "His teeth are usually %s depending on the coffee." % my_teeth

15

16# this line is tricky, try to get it ecactlyright

17print "If I add %d, %d, and %d I get %a."%(

18

my_age, my_height, my_weight, my_age

+ my_height + my_weight)

Warning:

如果你使用了非ASCII字符而且碰到了编码错误,记得在最顶端加一行#--

coding:

utf-8-

你应该看到的结果

$python ex5.py

Let's talk about Zed A. Shaw

He's 74inches tall.

He's180 pounds heavy

Actually that's not too heavy.

He's got Blue eyes and Brown hair.

His teeth are usually White depending on the coffee

If I add 35,74,and 180 I get 289.

加分习题

1.修改所有的变量名字,把它们前面的“my“去掉。确认将每一个地方的都改掉,不只是你使用“=“赋值过的地方。

2.试着使用更多的格式化字符。例如%r就是是非常有用的一个,它的含义是“不管什么都打印出来”。

3.在网上搜索所有的Pvthon格式化字符。

4.试着使用变量将英寸和磅转换成厘米和千克。不要直接键入答案。使用Pvthon的计算功能来完成。习题6:字符串(string)和文本虽然你已经在程序中写过字符串了,你还没学过它们的用处。在这章习题中我们将使用复杂的字符串来建立一系列的变量,从中你将学到它们的用途。首先我们解释一下字符串是什么东西。

字符串通常是指你想要展示给别人的、或者是你想要从程序里“导出”的一小段字符。Python可以通过文本里的双引号"或者单引号,识别出字符串来。这在你以前的print练习中你已经见过很多次了。如果你把单引号或者双引号括起来的文本放到print后面,它们就会被python打印出来。

字符串可以包含格式化字符%s,这个你之前也见过的。你只要将格式化的变量放到字符串中,再紧跟着一个百分号%(percent),再紧跟着变量名即可。唯一要注意的地方,是如果你想要在字符串中通过格式化字符放入多个变量的时候,你需要将变量放到()圆括号(parenthesis)中,而且变量之间用,逗号(comma)隔开。就像你逛商店说“我要买牛奶、面包、鸡蛋、八宝粥”一样,只不过程序员说的是”(milkeggs, bread, soup)”。

我们将键入大量的字符串、变量、和格式化字符,并且将它们打印出来。我们还将练习使用简写的变量名。程序员喜欢使用恼人的难度的简写来节约打字时间,所以我们现在就提早学会这个,这样你就能读懂并且写出这些东西了。

x="There are %d types of people."%10

binary = "binary"

do_not = "don't"

y= "Those who know %s and those who %s." % (binary, do_not)

print x

print y

print "I said: %r."%x

print "I also said: '%s'."%y

hilarious = False

joke_evaluation = "Isn't that joke so funny?!%r"

print joke_evaluation % hilarious

w="This is the left side of..."

e= "a string with a right side."

print w+e

你应该看到的结果

$ python ex6.py

There are 10 types of people.

Those who know binary and those who don't.

I said: 'There are 1o types of people.'

I also said: 'Those who know binary and those who don't.'

Isn't that joke so funny?! False

This is the left side of...a string with a right side

加分习题

1.通读程序,在每一行的上面写一行注解,给自己解释一下这一行的作用。

2.找到所有的”字符串包含字符串”的位置,总共有四个位置。

3.你确定只有四个位置吗?你怎么知道的?没准我在骗你呢。

4.解释一下为什么w和e用+连起来就可以生成一个更长的字符串。

python--笨方法学python 习题52

笨方法学python是一本不错的python入门书籍。
书的最后一节是一个web版的游戏程序,以下是程序代码:

 

1.项目的目录结构如下所示:
skeleton\
    app.py
    map.py
    templates\
        layout.html
        show_room.html
        you_died.html

 

2.游戏地图结构 map.py
其中Room类是游戏场景,包括场景名称 name,描述 description,通往下一场景的可能路径集合 paths。

定义了游戏中设计到的7个场景。

# -*- coding:utf-8 -*-                                                                                                                                  
class Room(object):
        def __init__(self, name, description): 
                self.name = name 
                self.description = description 
                self.paths = {}  
    
        def go(self, direction): 
                return self.paths.get(direction, None) 
    
        def add_paths(self, paths): 
                self.paths.update(paths)

central_corridor = Room("Central Corridor",
"""
#25外星战机入侵了你的飞船,并且摧毁了你的部队。你是最后一个幸存者,你的最终任务是从武器室拿到炸弹,将炸弹放在驾驶舱,跳进分离仓之后,炸掉飞船。
你现在正在往武器室跑去,这时,一个外星人跳了出来,可怕的红色皮肤,暗淡肮脏的牙齿,丑陋的服装围绕着他那充满憎恶的身体。他正在关闭通往武器室的大门,并且掏
出武器对准了你。
"""
)

laser_weapon_armory=Room("Laser Weapon Armory",
"""
幸运的是你知道外星人是由意念组成的。
你讲了一个你知道的外星笑话。
&$%@#$#%#@*&^$%[email protected]#^&@%[email protected]%%[email protected]~^^@#
外星人停止了动作,试着不发出笑声,最终禁不住大笑起来,并且停不下来。
当他笑的时候,你跑上前去,一枪命中他的眉心,将他放倒。然后跳进武器室。
你一个前空翻进入武器室,仔细地检查武器室是否藏有更多的外星人。死一般的寂静,太安静了。
你站起来,跑向武器室的角落,在盒子里找到了炸弹。盒子上有一个键盘,你需要输入密码才能将炸弹取出来。如果你输错10次,炸弹将永远被锁住无法取出。密码是4位数>字。
"""
)

the_bridge=Room("The Bridge",
"""
盒子咔哒一声打开了,密封破裂,毒气逸出。
你一把抓起炸弹,尽可能快递跑向驾驶舱,你必须把炸弹安置在合适的地点。
你闯入驾驶舱,手臂下夹着炸弹,惊奇地发现有5个外星人正在试图控制飞船。他们中的每一个都比上一个拥有更加丑陋的服装。他们没有拿出武器,因为他们看见了你手臂>下的炸弹,并且不希望引爆它。
"""
)

escape_pod=Room("Escape Pod",
"""
你拉出手臂下炸弹的导火线,外星人们举起手来,开始流汗。
你缓慢地退向门口,打开门,然后小心翼翼地把炸弹放在地上,拉出导火线。然后跳出驾驶舱,按下关闭按钮,门锁住了,外星人们无法逃出去。
现在炸弹已经安放好了,你跑向逃生通道。
你不顾一切地冲过飞船,以确保在整个飞船爆炸之前到达分离仓。看起来没有外星人在船上了,所以几乎没有遇到任何阻碍。你成功到达分离仓,然后你需要选择一个。他们
中的一些已经被摧毁了,但是你没有时间去检查。总共有5个分离仓,你将选择哪一个呢?
"""
)

the_end_winner=Room("The End",
"""
你跳进了2号分离舱 ,按下发动按钮。分离舱很容易地向下方的地球滑去。当它飞向地球时,你往回看,发现你的飞船像一颗明亮的星星一样炸开了,同时炸掉了恶灵的飞船
。你赢了!
"""
)

the_end_loser=Room("The End",
"""
你随便跳进一个分离舱,按下发动按钮。分离舱逃向未知的空间,然后因为外壳破裂而爆炸,把你的身体压成肉酱。
"""
)
escape_pod.add_paths({
        2:the_end_winner,
        *:the_end_loser
})

generic_death=Room("death","You died.")

the_bridge.add_paths({
        throw the bomb:generic_death,
        slowly place the bomb:escape_pod
})

laser_weapon_armory.add_paths({
        0132:the_bridge,
        *:generic_death
})

central_corridor.add_paths({
        shoot!:generic_death,
        dodge!:generic_death,
        tell a joke:laser_weapon_armory
})

START=central_corridor

 

3.游戏引擎设计
游戏引擎,也就是我们的web应用程序入口,定义了起始场景。将场景作为参数传递给场景信息显示模板show_room.html,显示当前场景描述信息。玩家输入动作指令,提交表单后,根据当前场景以及输入的指令,确定下一场景并显示。因为Http协议的无状态性,当前场景可以通过两种方式传递:(1)通过web.py框架的session机制 (2)通过<input type="hidden" value="">隐藏域的方式。这里我们选择第一种方式。

import web                                                                                                                                              
from map import *
import pdb 
urls=(
        /game,GameEngine,
        /,Index,
)

app=web.application(urls,globals())

if web.config.get(_session) is None:
        store = web.session.DiskStore(sessions)
        session = web.session.Session(app,store,initializer={room:None,count:0})
        web.config._session = session
else:
        session = web.config._session
render = web.template.render(templates/,base="layout")

class Index(object):
        def GET(self):
                session.room = START
                #输入错误密码次数初始化
                session.count = 0 
                web.seeother("/game")

class GameEngine(object):
        def GET(self):
            if session.room:
                return render.show_room(room=session.room)
            else:
                #场景为None,则跳转到death界面
                return render.you_died()
    
        def POST(self):
                form = web.input(action=None)
                if session.room and form.action:
                        result = session.room.go(form.action)
#                       pdb.set_trace()
                        #如果你输错10次,炸弹将永远被锁住无法取出
                        if session.room.name==Laser Weapon Armory and (result==None or result.name==death) and session.count<10:
                                #输入错误密码次数累计
                                session.count=session.count+1
                        else:
                                session.room = result
                web.seeother("/game")

if __name__=="__main__":
        app.run()

 

4.接着创建模板页,模板放在templates文件夹下.
mkdir templates
首先创建一个基础模板页 layout.html

$def with (content)                                                                                                                                     
<html>
<head>
<title>Gothons From Planet Percal #25</title>
</head>
<body>
$:content
</body>
</html>

场景信息显示页面  show_room.html

$def with (room)                                                                                                                                        
<h1>$room.name</h1>
<pre>
$room.description
</pre>
$if room.name=="death":
        <p><a href="/">Play Again?</a></p>
$else:
        <p>
        <form action="/game" method="POST">
        -<input type="text" name="action">
        <input type="SUBMIT">
        </form>
        </p>
        

场景为None失败,提示界面 you_died.html

<h1>You Died!</h1>                                                                                                                                      
<p>Looks like you bit the dust</p>
<p><a href="/">Play Again</a></p>

 

5.运行:python app.py

 

6.结果:

技术分享

 

技术分享

 

技术分享

 

技术分享

 

技术分享

以上是关于笨方法学Python三的主要内容,如果未能解决你的问题,请参考以下文章

python--笨方法学python 习题52

笨方法学python

笨方法学Python——习题16

笨方法学python--安装和准备

学python的10个有效方法都有哪些?

学python的10个有效方法都有哪些