习题20:函数和文件
inputFile = "harddemo6.txt"
'''个人观点,仅供参考:python区别java的一大特性是什么,就是变量对象无需定义,直接使用
当年这种方法可能会带来某些方便之处,最最最明显的好处就是,你能少写单词了,哈哈哈,不开玩笑,但我百度了一下,也没有人一本正经的解释这个好处。。。
但有一点必须注意,虽然不需要定义类型,但永远记住先定义后使用的规则,这个在哪个语言中都不会变的
回归主题:下面这个函数有没有发现不定义的一大缺点,相信你只要亲自打过这段代码就会知道,f这个对象由于你没有定义,IDE是不知道该f是变量还是对象,是对象有哪些方法,所以你必须键全方法名,而用过java的人就会知道,java由于定义了对象,所以IDE会提示你方法名,选择就可以了
现在IDE这么发达,为了少打字母而做的优化,完全没有这个必要
再次重申吧,上面仅仅是个人观点,现在自动化行业内都在使用python,除非你自己是java大牛,要不然还是得学python
'''
def printAll(f):
print(f.read())
# seek()0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。当文件已经使用过了,加一句seek(0)重新读取
def rewind(f):
f.seek(0)
# 一行一行的读取,并显示行号
def printALine(lineCount, f):
print(lineCount, f.readline())
currentFile = open(inputFile)
print("First let's print the whole file:\n")
printAll(currentFile)
print("Now let's rewind,kind of like a tape.")
rewind(currentFile)
print("Let's print three lines:")
currentLine = 1
printALine(currentLine, currentFile)
currentLine = currentLine + 1
printALine(currentLine, currentFile)
currentLine = currentLine + 1
printALine(currentLine, currentFile)
1. 通读脚本,在每行之前加上注解,以理解脚本里发生的事情。
2. 每次 print_a_line 运行时,你都传递了一个叫 current_line 的变量。在每次调用函 数时,打印出 current_line 的至,跟踪一下它在 print_a_line 中是怎样变成 line_count 的。
3. 找出脚本中每一个用到函数的地方。检查 def 一行,确认参数没有用错。
4. 上网研究一下 file 中的 seek 函数是做什么用的。试着运行 pydoc file 看看能不能学 到更多。
5. 研究一下 += 这个简写操作符的作用,写一个脚本,把这个操作符用在里边试一下。
currentLine+=1
千万注意,python里面没有i++和i--
习题21:函数可以返回东西
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.
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?")
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.0 Can you do it by hand?
1. 如果你不是很确定 return 的功能,试着自己写几个函数出来,让它们返回一些值。你可以将 任何可以放在 = 右边的东西作为一个函数的返回值。
2. 这个脚本的结尾是一个迷题。我将一个函数的返回值用作了另外一个函数的参数。我将它们链接 到了一起,就跟写数学等式一样。这样可能有些难读,不过运行一下你就知道结果了。接下来, 你需要试试看能不能用正常的方法实现和这个表达式一样的功能。
3. 一旦你解决了这个迷题,试着修改一下函数里的某些部分,然后看会有什么样的结果。你可以有 目的地修改它,让它输出另外一个值。
4. 最后,颠倒过来做一次。写一个简单的等式,使用一样的函数来计算它。
print_r('点个赞吧');
var_dump('点个赞吧');
NSLog(@"点个赞吧!")
System.out.println("点个赞吧!");
console.log("点个赞吧!");
print("点个赞吧!");
printf("点个赞吧!\n");
cout << "点个赞吧!" << endl;
Console.WriteLine("点个赞吧!");
fmt.Println("点个赞吧!")
Response.Write("点个赞吧");
alert(’点个赞吧’)