Solution:

 #方法一:字符串与列表的相互转换和它们的基本函数操作
n = input()
if n[0] in {"C","c"}:
a= list(n)
a.reverse()
b= a[0:-1] #去掉尾字母,剩下全为数字
b.reverse()
c = "".join(b)
n = eval(c)
F = n*1.8 +32
print("F{:.2f}".format(F))
elif n[0] in {"F","f"}:
a= list(n)
a.reverse()
b= a[0:-1]
b.reverse()
c = "".join(b)
n = eval(c)
C = (n-32)/1.8
print("C{:.2f}".format(C))
else:
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也是空的。字符串没有反转函数

 #方法二:自定义函数方法
def getInputs():
n = input()
return n
def abc(n):
a = list(n)
a.reverse()
b = a[0:-1]
b.reverse()
c = "".join(b)
h =eval(c)
return h
def a(h):
F = h*1.8 +32
print("F{:.2f}".format(F)) def main():
n = getInputs()
if n[0] in {"C","c"}:
k = abc(n)
F = k*1.8 +32
print("F{:.2f}".format(F))
elif n[0] in {"F","f"}:
k = abc(n)
C = (k-32)/1.8
print("C{:.2f}".format(C))
else:
print("输入格式错误")
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:此为本人所学见解,不一定正确。如有不足之处,欢迎指正。分享随笔,一起进步

temperatureConversion2的更多相关文章

随机推荐

  1. Java设计模式学习笔记(五) 单例模式

    前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 1. 使用单例模式的原因 以Windows任务管理器为例,在Windows系统中,任务管理器是唯 ...

  2. java性能优化--字符串优化处理

    String对象 String对象是java中重要的数据类型,在大部分情况下我们都会用到String对象.其实在Java语言中,其设计者也对String做了大量的优化工作,这些也是String对象的特 ...

  3. docker部署xxl-job 通用反射执行器

    原因 最近在公司写一些job,公司使用的是spring boot提供的注解形式实现的. 这样在自测的时候很麻烦,而且测试提测的时候需要修改cron表达式->提交git->jenkins打包 ...

  4. 【iOS】安装 CocoaPods

    1. 打开 terminal 2. 移除现有 Ruby 默认源 $ gem sources --remove https://rubygems.org/ 3. 使用新的源 $ gem sources ...

  5. Linux Qt使用POSIX多线程条件变量、互斥锁(量)

    今天团建,但是文章也要写.酒要喝好,文要写美,方为我辈程序员的全才之路.嘎嘎 之前一直在看POSIX的多线程编程,上个周末结合自己的理解,写了一个基于Qt的用条件变量同步线程的例子.故此来和大家一起分 ...

  6. BGP属性控制实验

    目录 实验拓扑 实验需求 实验步骤 个人小结: 实验拓扑 实验需求 更改BGP路由的属性让R4访问R1优先选R2这条路 实验步骤 1. 按照图示配置IP地址及环回口地址 R1 [R1]int g0/0 ...

  7. java遍历所有目录和文件

    package xian; import java.io.File; import java.util.ArrayList; public class GetFile { private static ...

  8. 深入理解JVM-java字节码文件结构剖析(练习解读字节码)

    public class MyTest2 { String str = "Welcome"; private int x = 5; public static Integer in ...

  9. WebGL简易教程(一):第一个简单示例

    目录 1. 概述 2. 示例:绘制一个点 1) HelloPoint1.html 2) HelloPoint1.js (1) 准备工作 (2) 着色器 (3) 顶点着色器 (4) 片元着色器 (5) ...

  10. 集合(Collection解析 Set List Map三大集合运用)

    集合的概念:          集合是包含多个对象的简单对象,所包含的对象称为元素.集合里面可以包含任意多个对象,数量可以变化:同时对对象的类型也没有限制,也就是说集合里面的所有对象的类型可以相同,也 ...