03笨方法学Python|ex11-17

ex11

1.raw_input 和 input 的区别

raw_input() ,无论什么输入内容,python都把内容看成一个字符串string.
input ,python会根据输入的内容,决定其类型。Shawn建议避免使用此命令。

代码错误。。MARK在此,待改。
print "what year is it this year?",
year = int(raw_input())
if year % 4 == 0   **??? invalid**
print "this is a leap year"
else print "not leap year"

leap year: 闰年

2. 附加练习:乘幂计算练习,熟悉数字类型int 和 float

print "Give me a base",
base = float(raw_input())
print "Give me then a exponent which is a integer.",
exponent = int(raw_input()) 
ans = base ** exponent
print "So the answer for %.f to the power %d is %f." % (base,exponent,ans)

以上代码运行后,如果在指数exponent 那里输入3.1,就会报错:

数字类型int 和 float

  • float函数将整数和字符串转换成浮点数。
  • int函数能够
    把符合数学格式的数字型字符串转换成整数
    把浮点数转换成整数,但是只是简单的取整,而非四舍五入。

所以如果想变成整数,需要先转成浮点,再转成整数。

print "Les't do some exponentiation."
print "Give me a base",
base = float(raw_input())
print "Give me then a exponent which is a integer.",
exponent = int(float(raw_input()))
ans = base ** exponent
print "So the answer for %.2f to the power %d is %.2f." % (base,exponent,ans)

格式符 %.4f 表示保留4位小数。

查看帮助

python -m pydoc 命令名

pydoc 在线帮助系统 https://docs.python.org/2.7/library/pydoc.html

ex12

简化上面的乘幂计算例子

base = float(raw_input("Give me a base.            "       )) 
expo = int(float(raw_input("Give me a exponent."   )))
ans = base ** expo
print "So the answer for %d to the power %.2f is %.4f." %(base,expo,ans)

第一行,引号前面的空格,在powershell里才体现出是空格。

ex13

from sys import argv

script,first,second,third = argv

print "The script is called:",script
print "Your first variable is:",first
print "Your second variable is",second
print "Your third variable is:",third

如上按书中一字不差打完代码后,我一如既往在powershell里敲入

python ex13.py

然后就看到这样的错误提示:

Traceback (most recent call last):
  File "ex13.py", line 3, in <module>
    script,first,second,third = argv
ValueError: need more than 1 value to unpack

解释:代码没错,但是在powershell里要输入的东西多了 3个任意变量!正好三个,不可多不可少,以空格区分。
比如这样的,

python ex13.py aa bb cc

为什么呢?因为小白如我,根本没有理解这节课,没有理解sys.argv,看了stackoverflow上这位高手的回答,才算清晰。
这节课讲的还是如何给python“喂食”,输入变量。
sys模块,argv是其中的一个函数。argv表示一串参数(a tuple of arguments). 第一行 from sys import argv,表示从sys模块调出这么一串参数。
那这一串参数到底是啥呢?4个变量并排放置,暂时被命名script,first,second,third.
所以可以把argv看成一个行向量[a,b,c,d],然后具体计算再带入具体数值。在powershell中,我们敲进去的,在python后面的内容,按空格区分,分别被带入这个“向量”里。
比如这一课我们完全可以这么敲

from sys import argv
aa,bb,cc,dd = argv                #define what is this argv 
print "The first variable is called:",aa
print "Your 2nd  is:",bb
print "Your 3rd is",cc
print "Your 4th is:",aa

在powershell敲入 python ex13.py 11 22 33,看见以下结果

The first variable is called: ex13.py
Your 2nd  is: 11
Your 3rd is 22
Your 4th is: ex13.py

故意不用33,哈哈。

ex14

ex14和13大同小异。
不如再次理解sys.argv. How to use sys.argv in Python
sys 是System-specific parameters and functions的缩写,表示python内置的各种参数和方程。sys.argv表示一个清单,清单内容需要用命令行输入。
试试下面的代码,就更清楚了~
argv[0]表示代码文件的名字
函数len(sys.argv) 可以看这个argv清单中有几个参数。
函数str(),将括号里内容转换成字符串。

import sys
print "This is the name of the script: ",sys.argv[0]
print "Number of arguments: ",len(sys.argv)
print "The arguments are: ",str(sys.argv)

测试两次,看到的结果分别为:

$ PS D:\105-coding\learnpython> python ex14_sys.py
This is the name of the script:  ex14_sys.py
Number of arguments:  1
The arguments are:  ['ex14_sys.py']

$ PS D:\105-coding\learnpython> python ex14_sys.py 11 22 33
This is the name of the script:  ex14_sys.py
Number of arguments:  4
The arguments are:  ['ex14_sys.py', '11', '22', '33']

Zork 在线版本 zork online, 这个网站上全是类似的文字型游戏,好有爱啊~
Adventure没找到。

ex15

  • 输入filename时要带类型。 ex15_sample.txt 后缀不能省略。
  • file 与 file object 的区别
    open命令可以返回(也就是生成)一个 file object(文件对象)。File object相当于这个file的管理者,也叫作handle。我们对file的各种操作都需要通过这个管理者/把手来进行。包括read,write,close等等。
    使用open时,要告诉电脑,用什么模式Mode打开,不写的话就是默认“只读模式”。
mode description
'r' Open a file for reading. (default)
'w' Open a file for writing. Creates a new file if it does not exist or truncates the file if it exists.
'r+' open a file for both reading and writing.
'a' open a file for adding a data to the end of file.
  • 我们把file object可以对file进行的各种操作,叫做method.
    常用的method如下。
method description
close() Close an open file. It has no effect if the file is already closed.
read(n) Read atmost n characters form the file. Reads till end of file if it is negative or None.
readline(n=-1) Read and return one line from the file. Reads in at most n bytes if specified.
seek(offset,from=SEEK_SET) Change the file position to offset bytes, in reference to from (start, current, end).
truncate(size=None) Resize the file stream to size bytes. If size is not specified, resize to current location.
write(s) Write string s to the file and return the number of characters written.

摘自 programmiz/file-operation

  • 课后题:Start python again and use open from the prompt. Notice how you can open files and run read on them right there?
>>> showme = open("ex15_sample.txt")
>>> print(showme.read())
This is stuff I typed into a file.
It is really cool stuff.
Lots and lots of fun to have in here.
>>> showme.close()
>>>

只用open,read命令,一次只能打开一个文件。如果要同时打开多个file,比较复杂,涉及另一个函数,解答在下面链接里,暂时略过。
https://stackoverflow.com/questions/4617034/how-can-i-open-multiple-files-using-with-open-in-python
https://stackoverflow.com/questions/30041837/how-to-open-multiple-files-one-by-one-and-print-the-contents-in-python

ex 16

  • 附加练习3
    仅使用一次命令target.write,完成练习。
target.write(line1,"\n",line2,"\n",line3,"\n")

报错。

 File "ex16.py", line 25, in <module>
    target.write(line1,"\n",line2,"\n",line3,"\n")
TypeError: function takes exactly 1 argument (6 given)

可行的命令:

ff = "%s\n%s\n%s\n" %(line1,line2,line3)
target.write(ff)
  • 附加练习6
    如果用write mode打开文件,不需要truncate了。因为w模式下,写的东西直接覆盖原内容。
    如果只是想在原来文件内容后面加东西,进入append模式,“a”.

ex17

  • 一行改写原代码Line 9,10
indata = open(from_file).read()
  • 附加题3 用一行来重写本节练习。
from sys import argv ;open(argv[2], 'w').write(open(argv[1]).read())

或者使用更高级的代码。

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

推荐阅读更多精彩内容