文档章节

python-习题6~10

南风末
 南风末
发布于 2016/11/12 11:04
字数 1713
阅读 24
收藏 0

习题  6:字符串(string)和文本

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)  #定义变量,将要输出的内容存放到变量x,y,
                                                                   #   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 the left side of……"   
e = "a string with a right side."

print w + e    #  ⑤

运行结果:

There are 10 types of people.
Those who know binary and those who don't.
I said: 'There are 10 types of people.'.   #  变量x中的""变成了''
I also said:'Those who know binary and those who don't.'.
Isn't that joke so funny?!False
This the left side of……a string with a right side.  #   两变量相加合成一句了。

语法总结:

1.  用“+”号可以把两个字符串连起来组成一个更长的字符串(运算符重载)。

2.  当变量x里存放的字符串含有“”时,输出时不需要再加“”。

3.  输出后变量x中的“”变成了''.

 

加分习题:

1.  给以上程序加注释。(已加)

2.  找到所以字符串包含字符串的位置,总共有四个位置。(如上:用序号①②③④⑤标注)

3.  你确定只有四个位置吗?你怎么知道的?没准我在骗你呢。(作者真调皮)

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

       运算符重载。具体说来,每个变量在Python中都是以对象形式存在的,即都是继承于Object。而Object则具有object.__add__(self, other)这样一个方法。每当处理x+y这一个表达式的时候,将会调用x.__add__(y)。另外为了交换律,还有__radd__方法,也就是用来处理y+x,这样会调用y.__radd__(x)

所以我们也可以自己重载+,比如:

class Free:
    def __init__(self, info):
        self.info = info   
    def __add__(self, moreinfo):
        return str(self) + moreinfo
    def __radd__(self, moreinfo):
        return moreinfo + str(self)
    def __str__(self):
        return self.info

Free这个Class,便得以直接成为+操作符的左/右参数。

正如richardzhiming所说,a+b是低效的,这是基于大量的+操作所讨论的。这是因为String是一个不可变的对象,你并不是真的把字符串b加到字符串a这个对象后面,而是需要创建一个新的对象,然后把a和b copy进去。因此当你大量进行+之时,你会创建许许多多临时的String对象。''.join(str_list)更好,则是因为,字符串的创建和拷贝是一次完成,而不需要创建很多String对象。

关于字符串连接具体的实验和更深入的探讨,可以参考:
Efficient String Concatenation in Python
The Python String Concatenation Shootout

另外,程序的优化的关键并不在于每个细节都优化到,而是优化整体的瓶颈,所以题主也不是一定要记住每一个细微的优化技巧。但是了解具体的实现细节,对于掌握语言,是很有意义的。

答案内容来自:http://segmentfault.com/q/1010000003933405

 

习题  7:更多的打印

print "Mary had a little lamb."
print "Its fleece was white as %s."% 'snow'  # 字符串变量用单引号括起来,区别于C
print "And everywhere that Mary went."
print "."* 10 # what'd that do?  ->输出10个“.”

end1 = "c"
end2 = "h"
end3 = "e"
end4 = "e"
end5 = "s"
end6 = "e"
end7 = "B"
end8 = "u"
end9 = "r"
end10 = "g"
end11 = "e"
end12 = "r"

# watch that comma at the end . try removing it to see what happens
print end1 + end2 + end3 + end4 + end5 + end6,
# 移除“,”结果会换行。
print end7 + end8 + end9 + end10 + end11 + end12  # 运算符重载

运行结果:

Mary had a little lamb.
Its fleece was white as snow.
And everywhere that Mary went.
..........
cheese Burger

语法总结:

1.  字符串变量用单引号  ' '.

2.  运算符重载:end(1~12)组成长字符串。

3.  倒数第三行的逗号去掉结果会换行。

练习  8:打印,打印

formatter = "%r %r %r %r"

print formatter % (1,2,3,4)
print formatter % ("one","two","three","four")
print formatter % (True,False,False,True)
print formatter % (
    "I had this thing.",
    "That you could type up right.",
    "But it didn't sing.",
    "So I said goodnight,"
    )

运行结果:

1 2 3 4
'one' 'two' 'three' 'four'
True False False True
'I had this thing.' 'That you could type up right.' "But it didn't sing." 'So I said goodnight,'

语法总结:

1.  最后一行输出结果既含有单引号又含有双引号,

->字符串里面没有单引号时且外面是双引号时,输出单引号;

(外层是单引号时,输出时无引号;)

    里层有单引号时,输出外层双引号。

 

 

习题  9:打印, 打印, 打印

# Here's some new strange stuff,remenber type it exactly.

days = "Mon Tue Wed Thu Fri Sat Sum"
months = "Jan\nFeb\nMar\nApr\nMay\nJun\nJul\nAug"

print "Here are the days:",days
print "Here are the months:",months
print """
There's something going on here.
With the three double-quotes.
We'll be able to type as much as we like.
Even 4 lines if we want,or 5,or 6.
"""

运行结果:

Here are the days: Mon Tue Wed Thu Fri Sat Sum
Here are the months: Jan
Feb
Mar
Apr
May
Jun
Jul
Aug

There's something going on here.
With the three double-quotes.
We'll be able to type as much as we like.
Even 4 lines if we want,or 5,or 6.

语法:

 

习题  10:

将双引号和单引号转义,让 Python 将引号也包含到字符串里边去,例:

"I am 6'2\" tall,"  #将字符串中的双引号转义
'I am 6\'2" tall."  #将字符串中的单引号转义

另:用三引号转义,也就是" " ",例:

tabby_cat = "\tI'm tabbed in."
persian_cat = "I'm split\non a line."
backslash_cat = "I'm \\ a \\ cat."

fat_cat = """
I'll do list:
\t* Cat food
\t*Fishies
\t*Catnip\n\t* Grass
"""

print tabby_cat
print persian_cat
print backslash_cat
print fat_cat

运行结果:

	I'm tabbed in.
I'm split
on a line.
I'm \ a \ cat.

I'll do list:
	* Cat food
	*Fishies
	*Catnip
	* Grass

语法总结:

1.  "\t"制表符,缩进4个空格。

2.  三引号""",转义,可以放入任意多行文字。

加分题:

1.  另有Python转义字符:

在需要在字符中使用特殊字符时,python用反斜杠(\)转义字符。如下表:

原始字符串

有时我们并不想让转义字符生效,我们只想显示字符串原来的意思,这就要用r和R来定义原始字符串。如:

print r'\t\r'

实际输出为“\t\r”。

 

转义字符 描述
\(在行尾时) 续行符
\\ 反斜杠符号
\' 单引号
\" 双引号
\a 响铃
\b 退格(Backspace)
\e 转义
\000
\n 换行
\v 纵向制表符
\t 横向制表符
\r 回车
\f 换页
\oyy 八进制数yy代表的字符,例如:\o12代表换行
\xyy 十进制数yy代表的字符,例如:\x0a代表换行
\other 其它的字符以普通格式输出

内容来自:http://www.cnblogs.com/allenblogs/archive/2011/04/28/2031477.html

2.  使用三个单引号(' ' ')和三个双引号,效果是一样的。

3.  将转义序列和格式化字符串放到一起,创建一种更为复杂的格式。

 

4.  %r  打印出来的是你写在脚本里的内容,而%s  打印的是你应该看到的内容(换句话说%r会打印任意你放入的内容)

 

 

 

 

 

 

 

© 著作权归作者所有

南风末
粉丝 6
博文 228
码字总数 313035
作品 0
南昌
程序员
私信 提问
python核心编程6-14习题的解题思路修改版

python核心编程6-14习题的解题思路修改版 #coding:utf-8 """ python核心编程6-14习题的解题思路 设计一个"石头,剪子,布"游戏,有时又叫"Rochambeau",你小时候可能玩过,下面是规则.你和你的对手......

黄哥Python培训
2014/02/10
0
1
剪刀石头布小习题三种语言python2、php、go代码

剪刀石头布小习题三种语言python2、php、go代码 # coding:utf-8 """ python核心编程6-14习题的解题思路 设计一个"石头,剪子,布"游戏,有时又叫"Rochambeau",你小时候可能玩过,下面是规则. 你和......

黄哥Python培训
2015/02/10
0
0
python3测试工具开发快速入门教程2数据结构1变量与赋值

语法基础 解释器像简单的计算器:可以输入表达式,它会返回值。表达式语法很简单:运算符 + , - , * 和 / 与其它语言一样(例如Pascal或C);括号用于分组。例如: 整数(例如2、4、20 )的类型...

人工智能python自动化测试
2018/08/30
0
0
新手入门,学习《python核心编程》需要注意哪些,怎么提高效率

@fzyz_sb 你好,想跟你请教个问题: 你好,我这几天一直在学习《python核心编程》,在网上搜习题答案时找到的你的博客,所以这些天也一直是看着你的博客学习的。我计算机编程只是在学校开的c...

_keyboard_dancer_
2015/04/05
2.9K
3
《趣学Python编程》习题总结

上周买了本书叫《趣学Python编程》(英文名:Python for kids),昨天看完后把书后面的题都做了下。由于第1、2章没有习题,第13章及之后都是描写实例的章节,因此这个总结性的文章中只包含了...

北风其凉
2014/12/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

怎么升级phpstudy中的php版本

http://www.php.cn/jishu/php/413274.html php官网 下载php版本 https://windows.php.net/

15834278076
5分钟前
0
0
文件已删除但句柄没有释放导致磁盘空间用完

有时候会发现linux文件系统分区已经快满了,但又找不到到底是什么文件占用了磁盘空间,就有可能是已删除的文件的句柄没有释放,还占着空间 检查命令: lsof | grep deleted 如果发现很多del...

果树啊
10分钟前
0
0
mysql5.7 [Err] 1118 - Row size too large (> 8126).

mysql [Err] 1118 - Row size too large (> 8126). 问题 mysql5.7 在执行创建表或者增加字段时,发现row size长度过长,导致出现以下错误。 [Err] 1118 - Row size too large (> 8126). C......

GritTan
11分钟前
0
0
[mybatis]一级缓存与二级缓存配置(mybatis3.4.0)

二级缓存 添加<cache />即可 日志: 2019-05-20 16:28:16.525 [http-nio-8830-exec-2] DEBUG com.asiainfo.mysql.MysqlMapper -Cache Hit Ratio [com.asiainfo.mysql.MysqlMapper]: 0.......

Danni3
21分钟前
0
0
Kafka两级调度实现分布式协调任务分配Golang版

背景 基于Kafka消息队列的两级协调调度架构 Kafka内部为了协调内部的consumer和kafka connector的工作实现了一个复制协议, 主要工作分为两个步骤: 通过worker(consumer或connect)获取自身的...

8小时
28分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部