author:headsen chen
date:2018-06-01 15:39:26
習題17,文件的更多操作
[root@localhost py]# echo 1234567890 > cc.txt [root@localhost py]# cat file3.py #!/usr/bin/env python from sys import argv from os.path import exists script,from_file,to_file = argv print "Copying from %s to %s" %(from_file,to_file) # we could do these two on one line too,how? input = open(from_file) indata = input.read() print "The input file is %d bytes long"%len(indata) print "Does the output file exist? %r"%exists(to_file) print "Ready,hit RETURN to continue, CTRL-C to abort." raw_input() output = open(to_file,'w') output.write(indata) print "Alright,all done." output.close() input.close()
[root@localhost py]# python file3.py cc.txt dd.txt Copying from cc.txt to dd.txt The input file is 11 bytes long Does the output file exist? True Ready,hit RETURN to continue, CTRL-C to abort. Alright,all done.
檢驗新生成的dd.txt文件:
[root@localhost py]# cat dd.txt
1234567890
這里不過dd.txt是否存在,若存在:清空然后復制cc.txt的內容過來,若不存在dd.txt文件就創建dd.txt文件並復制內容過來
補充:exists這個命令將文件名字符串作為參數,如果文件存在的話,它將返回 True,否則將返回 False。
習題18:函數 ---> 理解成“迷你腳本”
函數可以做三樣事情:
1.它們給代碼片段命名,就跟“變量”給字符串和數字命名一樣。
2.它們可以接受參數,就跟你的腳本接受 argv 一樣。
3.通過使用 #1 和 #2,它們可以讓你創建“微型腳本”或者“小命令”。
[root@localhost py]# cat func1.py #!/usr/bin/env python # this is like you scripts with argv def print_two(*args): arg1,arg2 = args print "arg1:%r,arg2:%r" %(arg1,arg2) # ok,that *args is actually pointless,we can just do this def print_two_again(arg1,arg2): print "arg1:%r,arg2:%r" %(arg1,arg2) # this just takes one argument def print_one(arg1): print "arg1:%r"% arg1 # this one takes no arguments def print_none(): print "I got nothing." print_two('zen','hello') print_two_again('ZEN','HELLO') print_one('First!') print_none()
[root@localhost py]# python func1.py arg1:'zen',arg2:'hello' arg1:'ZEN',arg2:'HELLO' arg1:'First!' I got nothing.
習題 19: 函數和變量
[root@localhost py]# cat func2.py #!/usr/bin/env python def cheese_and_crackers(cheese_count, boxes_of_crackers): print "You have %d cheeses!" % cheese_count print "You have %d boxes of crackers!" % boxes_of_crackers print "Man that's enough for a party!" print "Get a blanket.\n" print "We can just give the function numbers directly:" cheese_and_crackers(20, 30) print "OR, we can use variables from our script:" amount_of_cheese = 10 amount_of_crackers = 50 cheese_and_crackers(amount_of_cheese, amount_of_crackers) print "We can even do math inside too:" cheese_and_crackers(10 + 20, 5 + 6) print "And we can combine the two, variables and math:" cheese_and_crackers(amount_of_cheese + 100, amount_of_crackers + 1000)
[root@localhost py]# python func2.py We can just give the function numbers directly: You have 20 cheeses! You have 30 boxes of crackers! Man that's enough for a party! Get a blanket. OR, we can use variables from our script: You have 10 cheeses! You have 50 boxes of crackers! Man that's enough for a party! Get a blanket. We can even do math inside too: You have 30 cheeses! You have 11 boxes of crackers! Man that's enough for a party! Get a blanket. And we can combine the two, variables and math: You have 110 cheeses! You have 1050 boxes of crackers! Man that's enough for a party! Get a blanket.
習題 20: 函數和文件
[root@localhost py]# cat aa.txt aaaaaa bbbbbb cccccc
[root@localhost py]# cat func-file.py #!/usr/bin/env python from sys import argv script, input_file = argv def print_all(f): print f.read() def rewind(f): f.seek(0) def print_a_line(line_count, f): print line_count, f.readline() current_file = open(input_file) print "First let's print the whole file:\n" print_all(current_file) print "Now let's rewind, kind of like a tape." rewind(current_file) print "Let's print three lines:" current_line = 1 print_a_line(current_line, current_file) current_line = current_line + 1 print_a_line(current_line, current_file) current_line = current_line + 1 print_a_line(current_line, current_file)
[root@localhost py]# python func-file.py aa.txt First let's print the whole file: aaaaaa bbbbbb cccccc Now let's rewind, kind of like a tape. Let's print three lines: 1 aaaaaa 2 bbbbbb 3 cccccc
習題 21: 函數可以返回東西
[root@localhost py]# cat func-return.py #!/usr/bin/env python # -*- coding:utf-8 -*- def add(a, b): print "ADDING %d + %d" % (a, b) return a + b def subtract(a, b): print "SUBTRACTING %d - %d" % (a, b) return a - b def multiply(a, b): print "MULTIPLYING %d * %d" % (a, b) return a * b def divide(a, b): print "DIVIDING %d / %d" % (a, b) return a / b print "Let's do some math with just functions!" age = add(30, 5) height = subtract(78, 4) weight = multiply(90, 2) iq = divide(100, 2) print "Age: %d, Height: %d, Weight: %d, IQ: %d" % (age, height,weight, iq) # A puzzle for the extra credit, type it in anyway.# pullzle:智力題 print "Here is a puzzle." what = add(age, subtract(height, multiply(weight, divide(iq,2)))) print "That becomes: ", what, "Can you do it by hand?"
[root@localhost py]# python func-return.py Let's do some math with just functions! ADDING 30 + 5 SUBTRACTING 78 - 4 MULTIPLYING 90 * 2 DIVIDING 100 / 2 Age: 35, Height: 74, Weight: 180, IQ: 50 Here is a puzzle. DIVIDING 50 / 2 MULTIPLYING 180 * 25 SUBTRACTING 74 - 4500 ADDING 35 + -4426 That becomes: -4391 Can you do it by hand?
習題 24: 練習
[root@localhost py]# cat practise.py #!/usr/bin/env python print "Let's practice everything." print 'You\'d need to know \'bout escapes with \\ that do \nnewlines and \t tabs.' poem = """ \tThe lovely world with logic so firmly planted cannot discern \n the needs of love nor comprehend passion from intuition and requires an explanation \n\t\twhere there is none. """ print "--------------" print poem print "--------------" five = 10 - 2 + 3 - 6 print "This should be five: %s" % five def secret_formula(started): jelly_beans = started * 500 jars = jelly_beans / 1000 crates = jars / 100 return jelly_beans, jars, crates start_point = 10000 beans, jars, crates = secret_formula(start_point) print "With a starting point of: %d" % start_point print "We'd have %d beans, %d jars, and %d crates." % (beans,jars, crates) start_point = start_point / 10 print "We can also do that this way:" print "We'd have %d beans, %d jars, and %d crates." % secret_formula(start_point)
[root@localhost py]# python practise.py Let's practice everything. You'd need to know 'bout escapes with \ that do newlines and tabs. -------------- The lovely world with logic so firmly planted cannot discern the needs of love nor comprehend passion from intuition and requires an explanation where there is none. -------------- This should be five: 5 With a starting point of: 10000 We'd have 5000000 beans, 5000 jars, and 50 crates. We can also do that this way: We'd have 500000 beans, 500 jars, and 5 crates.
習題 25: 更多的練習
[root@localhost py]# cat practise2.py #!/usr/bin/env python def break_words(stuff): """This function will break up words for us.""" words = stuff.split('') return words def sort_words(words): """Sorts the words.""" return sorted(words) def print_first_word(words): """Prints the first word after popping it off.""" word = words.pop(0) print word def print_last_word(words): """Prints the last word after popping it off.""" word = words.pop(-1) print word def sort_sentence(sentence): """Takes in a full sentence and returns the sorted words.""" words = break_words(sentence) return sort_words(words) def print_first_and_last(sentence): """Prints the first and last words of the sentence.""" words = break_words(sentence) print_first_word(words) print_last_word(words) def print_first_and_last_sorted(sentence): """Sorts the words then prints the first and last one.""" words = sort_sentence(sentence) print_first_word(words) print_last_word(words)
習題26:邏輯術語
在 python 中我們會用到下面的術語(字符或者詞匯)來定義事物的真(True)或者假(False)。計算機的邏輯就是在程序的某個位置檢查這些字符或者變量組合
在一起表達的結果是真是假。
and 與
or 或
not 非
!= (not equal) 不等於
== (equal) 等於
>= (greater-than-equal) 大於等於
<= (less-than-equal) 小於等於
True 真
False 假
真值表
我們將使用這些字符來創建你需要記住的真值表。
not False True
not True False
True or False True
True or True True
False or True True
False or False False
True and False False
True and True True
False and True False
False and False False
not (True or False) False
not (True or True) False
not (False or True) False
not (False or False) True
not (True and False) True
not (True and True) False
not (False and True) True
not (False and False) True
1 != 0 True
1 != 1 False
0 != 1 True
0 != 0 False
1 == 0 False
1 == 1 True
0 == 1 False
0 == 0 True
習題27:bool 值運算
[root@localhost py]# cat bool.py
#!/usr/bin/env python
print True and True
print False and True
print 1 == 1 and 2 == 1
print "test" == "test"
print 1 == 1 or 2 != 1
print True and 1 == 1
print False and 0 != 0
print True or 1 == 1
print "test" == "testing"
print 1 != 0 and 2 == 1
print "test" != "testing"
print "test" == 1
print not (True and False)
print not (1 == 1 and 0 != 1)
print not (10 == 1 or 1000 == 1000)
print not (1 != 10 or 3 == 4)
print not ("testing" == "testing" and "Zed" == "Cool Guy")
print 1 == 1 and not ("testing" == 1 or 1 == 0)
print "chunky" == "bacon" and not (3 == 4 or 3 == 3)
print 3 == 3 and not ("testing" == "testing" or "Python" == "Fun")
[root@localhost py]# python bool.py
True
False
False
True
True
True
False
True
False
False
True
False
True
False
False
False
True
True
False
False
習題28:bool運算

3 != 4 and not ("testing" != "test" or "Python" == "Python") 接下來你將看到這個復雜表達式是如何逐級解為一個單獨結果的: 1. 解出每一個等值判斷: a. 3 != 4 為 True : True and not ("testing" != "test" or "P ython" == "Python") b. "testing" != "test" 為 True : True and not (True or "Pyt hon" == "Python") c. "Python" == "Python" : True and not (True or True) 2. 找到括號中的每一個 and/or : a. (True or True) 為 True: True and not (True) 3. 找到每一個 not 並將其逆轉: a. not (True) 為 False: True and False 4. 找到剩下的 and/or,解出它們的值: a. True and False 為 False 這樣我們就解出了它最終的值為 False.
習題 29: 如果(if)

[root@localhost py]# cat if.py #!/usr/bin/env python people = 20 cats = 30 dogs = 15 if people < cats: print "Too many cats! The world is doomed!" if people > cats: print "Not many cats! The world is saved!" if people < dogs: print "The world is drooled on!" if people > dogs: print "The world is dry!" dogs += 5 if people >= dogs: print "People are greater than or equal to dogs." if people <= dogs: print "People are less than or equal to dogs." if people == dogs: print "People are dogs."

[root@localhost py]# python if.py Too many cats! The world is doomed! The world is dry! People are greater than or equal to dogs. People are less than or equal to dogs. People are dogs.
習題30:if -elase 結合使用

[root@localhost py]# cat if.py #!/usr/bin/env python people = 20 cats = 30 dogs = 15 if people < cats: print "Too many cats! The world is doomed!" if people > cats: print "Not many cats! The world is saved!" if people < dogs: print "The world is drooled on!" if people > dogs: print "The world is dry!" dogs += 5 if people >= dogs: print "People are greater than or equal to dogs." if people <= dogs: print "People are less than or equal to dogs." if people == dogs: print "People are dogs."
[root@localhost py]# python if-else.py We should take the cars. Maybe we could take the buses. Alright, let's just take the buses.