摘要:本次笔记主要是以温度转化为实例,讲解Python的语法和相关函数的知识。
(注:本文主要内容整理自北京理工大学嵩天老师的《Python语言程序设计基础》。)
问题描述
描述温度有两个体系:摄氏度(Celsius)和华氏度(Fabrebheit)。对于去美国旅行的中国游客,需要将当地的华氏温度转换为摄氏温度;同样,来中国旅行的美国游客,也需要将当地发布的温度转化为华氏温度。现实中由很多的软件和工具进行换算,计算也比较简单,这里可以用Python编程简单实现。
摄氏度的含义:是指在1标准大气压下,纯净的冰水混合物的温度为0度,水的沸点为100度,其间平均分为100份,每一等份为1度,记作1 。
华氏度的含义:在标准大气压下,冰的熔点为32 ,水的沸点为212 ,中间有180等分,每等分为华氏1度,记作“1 ”。
世界上仅存5个国家使用华氏度,包括巴哈马、伯利兹、英属开曼群岛、帕劳、美利坚合众国及其他附属领土(波多黎各、关岛、美属维京群岛)。
(1)分析问题:可以从很多角度进行理解分析。这里主要从三个角度。
第一:利用程序进行温度转化,由用户输入温度值,程序输出结果。
第二:可以通过语音识别、图像识别等方法自动监听并获得温度信息发布渠道(如收音机、电视机等)给出的温度播报的数据,利用程序转化后输出给用户。
第三:利用程序定期从温度信息的发布网站获取温度值,再将温度信息转化成旅行者熟悉的方式。
(2)划分边界:明确问题的输入数据、输出数据和对数据处理的要求。
由于程序需要能够接收华氏温度和摄氏温度,并互相进行转化,用IPO进行描述如下:
输入(I):带华氏或摄氏温度标志的温度值。
处理(P):根据温度标志选择适当的温度转化算法。
输出(O):带华氏或摄氏温度标志的温度值
举例:82F表示华氏82度,28C表示摄氏28度,实数部分是温度值。
(3)设计算法:根据两种温度体系的定义可得转换算法如下:
C=(F-32)/1.8
F=C*1.8+32
其中,C表示摄氏温度,F表示华氏温度。
(4)编写程序:根据IPO描述和算法设计,编程用代码实现,本程序编写是在Python自带的解释器IDLE编写:
#温度转化实例
print("输入举例82F表示华氏82度,28C表示摄氏28度。")
tempstr = input("请输入带有符号的温度值:")
if tempstr[-1] in ['F','f']:
C = (eval(tempstr[0:-1])-32)/1.8
#tempstr[0:-1]表示从第一个字符到最后一个字符,但不包括最后一个字符的内容
print("{:.2f}F转换后的摄氏温度是:{:.2f}C".format(eval(tempstr[0:-1]),C))
elif tempstr[-1] in ['C','c']:
F = 1.8*eval(tempstr[0:-1])+32
print("{:.2f}C转换后的华氏温度是:{:.2f}F".format(eval(tempstr[0:-1]),F))
else:
print("输入格式错误,请检查后重新输入!")
#in 为保留字 判断是否包含子集
(5)调试测试
输入举例82F表示华氏82度,28C表示摄氏28度。
请输入带有符号的温度值:78F
78.00F转换后的摄氏温度是:25.56C
>>>
============= RESTART: F:桌面1树莓派学习笔记python学习wenduzhuanhuan_1.py =============
输入举例82F表示华氏82度,28C表示摄氏28度。
请输入带有符号的温度值:25.56C
25.56C转换后的华氏温度是:78.01F
>>>
============= RESTART: F:桌面1树莓派学习笔记python学习wenduzhuanhuan_1.py =============
输入举例82F表示华氏82度,28C表示摄氏28度。
请输入带有符号的温度值:78f
78.00F转换后的摄氏温度是:25.56C
上述的程序比较简单,但在实际的项目程序中,很难保证能一次写完就能运行出正确的结果,因此调试过程不容忽视。
(6)升级维护:与人一样,任何程序都有生命周期。随着问题使用场景、输入和输出要求等因素的变化,程序将需要不断地维护和升级。同时要注意程序修改时的文件名格式要按照一定的规范。
实例程序语法分析
程序的格式框架、注释、关键字等内容在Python学习笔记(一)中介绍了。接下来简单介绍一下字符串、赋值语句、input()函数、分支语句、eval()函数、print()函数、循环语句和函数。
1、字符串
Python语言中,字符串是用英文输入法下的两个双引号""或者单引号''括起来的零个或多个字符。
字符串是字符的序列,可以按照单个字符或者字符片段进行索引。字符串包含两种序号体系:正向递增序号和反向递减序号。如果字符串长度为L,正向递增以最左侧的字符序号为0,向右依次递增,最右侧的字符序号为L-1;反向递减序号以最右侧字符序号为-1,向左依次递减,最左侧的字符序号是-L。这两种索引字符的方法可以同时使用。
tempstr[-1]
tempstr[0:-1]
Python字符串也提供区间访问方式,采用[N:M]格式,表示字符串从N到M(不包括M)的子字符串,其中,N和M为字符串的索引序号。
2、赋值语句
“=”表示将等号右侧的计算结果赋值给左侧变量。
此外,还有一种同步赋值语句,可以同时给多个变量赋值,基本格式为:
<变量1>,...<变量N>=<表达式1>,...,<表达式N>
Python的同步赋值是首先计算右侧的N个表达式,同时将表达式的结果赋值给左侧N个变量。
3、input()函数
input()函数用于从控制台获得用户的输入,无论用户在控制台输入什么内容,input()函数都是以字符串类型返回结果。
tempstr = input("请输入带有符号的温度值:")
在获得用户输入之前,input()函数可以包含一些提示性文字:
<变量>=input(<提示性文字>)
>>> input("请输入:")
请输入:123
'123'
>>>
4、分支结构
分支语句的作用是根据判断条件选择执行路径,使用方式如下:
if <条件1>:
<语句块1>
elif <条件2>:
<语句块2>
...
else:
<语句块N>
if tempstr[-1] in ['F','f']:
C = (eval(tempstr[0:-1])-32)/1.8
#tempstr[0:-1]表示从第一个字符到最后一个字符,但不包括最后一个字符的内容
print("{:.2f}F转换后的摄氏温度是:{:.2f}C".format(eval(tempstr[0:-1]),C))
elif tempstr[-1] in ['C','c']:
F = 1.8*eval(tempstr[0:-1])+32
print("{:.2f}C转换后的华氏温度是:{:.2f}F".format(eval(tempstr[0:-1]),F))
else:
print("输入格式错误,请检查后重新输入!")
5、eval()函数
简单的说,eval()函数就是将输入的字符串转化成Python语句,并执行该语句。使用eval()函数处理字符串是时需要注意合理使用。例如,如果直接输入字符串"hello",eval()函数将去掉两个引号,并将其解释成一个变量,由于之前没有定义过hello变量,解释器会报错。当输入字符串"'hello"',eval()函数去掉外部双号后,内部还有一个引号,则'hello'被解释为字符串。此外,eval()函数还有许多其他的作用。
>>> eval("hello")
Traceback (most recent call last):
File "", line 1, in
eval("hello")
File "", line 1, in
NameError: name 'hello' is not defined
>>> eval("'hello"')
SyntaxError: EOL while scanning string literal
>>> eval('''hello''')
Traceback (most recent call last):
File "", line 1, in
eval('''hello''')
File "", line 1, in
NameError: name 'hello' is not defined
>>> eval("'hello'")
'hello'
如果用户希望输入一个数字(小数或负数),并用程序对这个数字进行计算,可以采用:
eval(input(<输入提示字符串>))的组合
>>> value = eval(input("请输入要计算的数值:"))
请输入要计算的数值:520
>>> print(value*2)
1040
>>> print(value*2-16)
1024
>>>
6、print()函数
Python可以使用print()函数输出信息。
使用print(<待输出字符串>)输出函数输出字符信息,其也能以字符形式输出变量。当输出纯字符信息时,可以直接将待输出内容传递给print()函数。当输出变量值时,需要采用格式化输出方式,通过format()方法将待输出变量整理成期望输出的格式。具体的格式化方法,后续的内容中会详细展开。
print("{:.2f}F转换后的摄氏温度是:{:.2f}C".format(eval(tempstr[0:-1]),C))
print("输入格式错误,请检查后重新输入!")
7、循环语句
Python语句提供两种循环语句,可以利用其中的while循序对该温度转化程序进行优化升级,因为程序每执行一次,只能进行一次的温度转化。因此,可以利用while循环语句对这个程序进行升级。
循环语句的作用是根据判断条件确定一段程序是否再次执行一次或者多次。因此,可以利用条件循环对程序进行改造升级。while语句的格式为:
while(<条件>):
<语句块1>
<语句块2>
当条件为真(True)时,执行语句块1,这些语句通过缩进表达与while语句的所属关系。当条件为假(False)时,退出循环,执行循环后语句块2.
思路:如果希望程序一直运行,连续接受用户的输入,直到用户输入的最后一个字符是'N'或'n'时退出,采用条件循环改造。
#温度转化实例 循环输入
print("输入举例82F表示华氏82度,28C表示摄氏28度,如果想停止输入,可以输入N!")
tempstr = input("请输入带有符号的温度值:")
while tempstr[-1] not in ['N','n']:
#not是保留字 表示对判断的结果取反
#in是保留字判断内容是否是集合的子集
if tempstr[-1] in ['F','f']:
C = (eval(tempstr[0:-1])-32)/1.8
#tempstr[0:-1]表示从第一个字符到最后一个字符,但不包括最后一个字符的内容
print("{:.2f}F转换后的摄氏温度是:{:.2f}C".format(eval(tempstr[0:-1]),C))
elif tempstr[-1] in ['C','c']:
F = 1.8*eval(tempstr[0:-1])+32
print("{:.2f}C转换后的华氏温度是:{:.2f}F".format(eval(tempstr[0:-1]),F))
else:
print("输入格式错误,请检查后重新输入!")
tempstr = input("请输入带有符号的温度值:")
==================================== RESTART: F:桌面1树莓派学习笔记python学习wenduzhuanhuan_2.py ===================================
输入举例82F表示华氏82度,28C表示摄氏28度,如果想停止输入,可以输入N!
请输入带有符号的温度值:52F
52.00F转换后的摄氏温度是:11.11C
请输入带有符号的温度值:72C
72.00C转换后的华氏温度是:161.60F
请输入带有符号的温度值:52f
52.00F转换后的摄氏温度是:11.11C
请输入带有符号的温度值:N
>>>
8、函数
在实际的编程中,一般将特定的代码编写在一个函数里面,便于阅读和复用,也使得程序模块化更好。Python使用关键保留字def自定义函数。详细的自定义函数内容,将在后面的内容中详细展开。像eval()、print()、input()等都是python解释器的内置函数。
#温度转化实例 自定义函数
print("输入举例82F表示华氏82度,28C表示摄氏28度。")
def tempconvert(valuestr):
tempstr = valuestr
if tempstr[-1] in ['F','f']:
C = (eval(tempstr[0:-1])-32)/1.8
#tempstr[0:-1]表示从第一个字符到最后一个字符,但不包括最后一个字符的内容
print("{:.2f}F转换后的摄氏温度是:{:.2f}C".format(eval(tempstr[0:-1]),C))
elif tempstr[-1] in ['C','c']:
F = 1.8*eval(tempstr[0:-1])+32
print("{:.2f}C转换后的华氏温度是:{:.2f}F".format(eval(tempstr[0:-1]),F))
else:
print("输入格式错误,请检查后重新输入!")
tempstr = input("请输入带有符号的温度值:")
tempconvert(tempstr)
==================================== RESTART: F:桌面1树莓派学习笔记python学习wenduzhuanhuan_3.py ===================================
输入举例82F表示华氏82度,28C表示摄氏28度。
请输入带有符号的温度值:26f
26.00F转换后的摄氏温度是:-3.33C
练习程序
#整数序列求和
#用户输入一个正整数N,计算从1到N相加之后的后果
n = input("请输入整数N:")
sum = 0
for i in range(int(n)):
sum = sum+i+1
print("1到N求和结果:",sum)
请输入整数N:100
1到N求和结果:5050
>>>
#九九乘法表输出
for i in range(1,10):
for j in range(1,i+1):#按照行方向打印的思想
print("{}*{}={:2}".format(j,i,i*j),end=' ')
print('')
1*1= 1
1*2= 2 2*2= 4
1*3= 3 2*3= 6 3*3= 9
1*4= 4 2*4= 8 3*4=12 4*4=16
1*5= 5 2*5=10 3*5=15 4*5=20 5*5=25
1*6= 6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7= 7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8= 8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9= 9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
>>>
#计算1!+...+10!的结果
sum,tmp = 0,1
for i in range(1,11):
tmp*=i
sum+=tmp
print("运算结果是:{}".format(sum))
===========
运算结果是:4037913
>>>
本文内容来源于网络,仅供参考学习,如内容、图片有任何版权问题,请联系处理,24小时内删除。
作 者 | 郭志龙
编 辑 | 郭志龙
校 对 | 郭志龙
更新时间:2024-07-25
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号