temperatureConversion2

Solution: 

 1 #方法一:字符串与列表的相互转换和它们的基本函数操作
 2 n = input()
 3 if n[0] in {"C","c"}:
 4    a= list(n) 
 5    a.reverse() 
 6    b= a[0:-1]    #去掉尾字母,剩下全为数字
 7    b.reverse()
 8    c = "".join(b)
 9    n = eval(c)
10    F = n*1.8 +32
11    print("F{:.2f}".format(F))
12 elif n[0] in {"F","f"}:
13    a= list(n)
14    a.reverse()
15    b= a[0:-1]
16    b.reverse()
17    c = "".join(b)
18    n = eval(c)
19    C = (n-32)/1.8
20    print("C{:.2f}".format(C))
21 else:
22     print("输入格式错误")

 Notes:

(1)str.spilt(sep)作用:将str进行分隔。若str中含有符号sep,则有sep处进行分隔,sep被割掉,左右分开。如单个字符"F21.23",则"F21.23".split(".")得结果为['F21','23']。而"F21.23".split(",")为['F21.23']。因为sep为逗号。在str中没有。所以整体返回而没有被分隔。除单个字符外,一个字符串(一句话)也一样。不管哪个,结果都是返回一个列表。列表中的元素是str类型,即有引号

(2)行4,不能用 a = n.split(),因为虽然可以将单一字符转为列表,但因为列表元素只有一个,即这个字符整体,如"F21.23",变成[ 'F21.23' ]而反转是对列表中的各元素进行反转,而只有一个元素,反转还是它,所以下面的反转起不到作用

(3)a = list(n) 为强制转换,得到以这个单一字符的内部每个元素作为列表元素,如:"F21.23",变成['F','2','1','.','2','3'],但强制是临时的,所以必须赋值给一个变量

(4)行5列表才有revese()反转函数,且不是reversed(),后面没有d,且不需要赋值,就算赋值给b,b也是空的。字符串没有反转函数

 

 1 #方法二:自定义函数方法
 2 def getInputs():
 3    n = input()
 4    return n
 5 def abc(n):
 6    a = list(n)
 7    a.reverse()
 8    b = a[0:-1]
 9    b.reverse()
10    c = "".join(b)
11    h =eval(c)
12    return h
13 def a(h):
14    F = h*1.8 +32
15    print("F{:.2f}".format(F))
16 
17 
18 def main():
19    n = getInputs()
20    if n[0] in {"C","c"}:
21       k = abc(n)
22       F = k*1.8 +32
23       print("F{:.2f}".format(F))
24    elif n[0] in {"F","f"}:
25       k = abc(n)
26       C = (k-32)/1.8
27       print("C{:.2f}".format(C))
28    else:
29       print("输入格式错误")
30 main()

自顶向下:

  先执行def main()结构,即主函数。在main()中,由上往下执行语句。执行到哪个函数,就调用哪个函数。先执行getInput()函数,则回到开头调用该函数,要注意每个函数执行完后,一定要返回结果,即必须有return语句,至于返回什么,看自己需要,不一定是函数名括号内的变量,跟此无关。比如getInput()的括号就没设定任何参数,却返回了n。执行完该函数,如果需要用到返回的n,则要将它赋值给一个变量,因为局部变量n只能在函数内用,执行完就没有了,或者是不能跨函数用,不然就要用全局变量global。即在函数外定义n,然后哪个函数要用n,就在哪个函数内部用global n。但全局变量有个缺点:由于一个子函数的结果,不能被另一个字函数或主函数调用(因为子函数的返回值,即产生的结果是局部变量),所以假如函数A使用全局变量n产生了结果h,另一个函数想要用这个局部变量h时,需要用global h。即事先要在函数外定义一个h,但是都还没运行函数A,怎么事先知道h并定义?事先定义了,那运行函数A得到的h又有什么意义?而且运行完,函数B用到的h是事先定义的哪个h,并不是函数A产生的h(因为函数A产生的h是局部变量),所以不管有没有定义global h,都无法用到函数A产生的h,即子函数之间的结果不能被相互调用。

解决方法:

  在主函数中,将每个子函数的结果赋值给一个变量,且这个变量作为下一个函数的参数(非可选参数,即不能缺少的参数),以此实现子函数的结果之间的调用,此便形成了所谓的“信息流”。例如:主函数中,getInput()运行完后,将结果(即返回值n)赋值给新的n(也可用其它符号,用什么符号不重要)。接着往下进行执行语句。假如条件为真,则主函数便将得到的新的参数n传递给abc函数,即abc(n),于是就去调用函数abc(n),用完便将结果赋给k,然后再往下执行语句,以此类推。

Conclusions:

(1)自定义函数执行的顺序:依据主函数main()里面的语句的上下顺序,由上往下执行。主函数上面的各个自定义的子函数的位置先后不影响,但为了规范,子函数之间的顺序应按照主函数里面的先后顺序。

(2)每个子函数都必须返回值(return语句不能缺少),返回什么值看需要

(3)主函数里面可以有判断、循环语句,其实跟普通的写程序一样,不一定都要对这些判断、循环再自定义为子函数

(4)子函数括号内的参数,看是否需要定义。在主函数中,子函数如果需要进行结果传递,则必须要定义参数。一般除了第一个输入的子函数,其余的子函数都需要

 

Statement:此为本人所学见解,不一定正确。如有不足之处,欢迎指正。分享随笔,一起进步😄

 

posted @ 2019-08-08 11:33  kenny.feng  阅读(237)  评论(0编辑  收藏  举报