Python每日一学 03——计算半径为r的圆的面积

文章目录

  • Python每日一学 03——计算半径为r的圆的面积
    • 一、计算半径为r的圆的面积
    • 二、按IPO模式解决
    • 三、 输入转数值
    • 四、精度问题
    • 五、精度问题解决方法
    • 六、变量命名规范
    • 七、注释

一、计算半径为r的圆的面积

最早的电脑是用来破译敌军密码用的,因为靠人去破译密码耗时耗力,而且还达不到理想的效果,所以后来就创造了电脑,希望这个机器能够代替人脑去进行运算。
可以这样说,电早计算机的产生就是为了解决计算问题。

计算机解决计算问题可以分为三个步骤:

输入(I:input): input()

输出(O:output): print()

这种模式也称为IPO模式

融入输入、数学运算、输出、精度控制、字符串重复、math模块、异常处理的分析、命名规范、注释等知识。

圆的面积计算公式为: s=πr2s = \pi r^2s=πr2

二、按IPO模式解决

r = input()
s = pi * r * r
print(s)
3---------------------------------------------------------------------------NameError                                 Traceback (most recent call last)<ipython-input-1-d22d639b6bc9> in <module>1 r=input()
----> 2 s = pi * r * r3 print(s)NameError: name 'pi' is not defined

运行程序,当我们输入一个数字时,程序出现异常:

NameError: name ‘pi’ is not defined命名错误,pi 这个变量名没有定义就先使用了。

在python中,一定是先有对象,任何变量都是依附在某个实际存在的对象上的,或者说,任何变量名首次出现,一定是出现的赋值符号“=”的左侧。pi 这里表示圆周率,我们可以设为3.14,并用pi这个名字访问这个对象,将以下语句加到程序中:
pi = 3.14

r = input()
pi = 3.14
s = pi * r * r
print(s)
3---------------------------------------------------------------------------TypeError                                 Traceback (most recent call last)<ipython-input-2-ff6f2196ef50> in <module>1 r=input()2 pi = 3.14
----> 3 s = pi * r * r4 print(s)TypeError: can't multiply sequence by non-int of type 'float'

再次输入一个数值,发现又触发了另一个异常:

TypeError: can’t multiply sequence by non-int of type ‘float’ 类型错误:不能够将非整数的浮点数乘到序列类型上

因为在Python中,input()接收到的数据都做为字符串类型,字符串与整数可以相乘,但不能与浮点数相乘。

三、 输入转数值

有两种解决方法

  1. 将pi的值变为整数3,但结果是将输入的字符串’3’重复了3次,结果仍是字符串’333’
r = input()
pi = 3
s = pi * r * r
print(s)
3---------------------------------------------------------------------------TypeError                                 Traceback (most recent call last)<ipython-input-3-7c02e13ebdec> in <module>1 r = input()2 pi = 3
----> 3 s = pi * r * r4 print(s)TypeError: can't multiply sequence by non-int of type 'str'

运行程序时发现又触发了一个异常:

TypeError: can’t multiply sequence by non-int of type ‘str’
类型错误:序列不能与非整数类型字符串相乘

出错的原因是前面3 * ‘3’结果是字符串’333’,'333’只能与整数相乘,不能与字符串相乘

  1. 将input()得到的字符串转为数值类型,将字符串转数值类型有3个函数可以使用。
    int(s): 将整数字符串转为整数,如:int(‘3’)转为 3
    float(s): 将数字字符串转为浮点数,如:float(‘3’)转为3.0
    eval(s): 将整数字符串转为整数,将浮点数的字符串转为浮点数,如eval(‘3’)转为3;eval(3.0)转为3.0
    可以将程序修改为以下三种表述:
r = int(input())
pi = 3
s = pi * r * r
print(s)
3.5---------------------------------------------------------------------------ValueError                                Traceback (most recent call last)<ipython-input-5-6de2512c0733> in <module>
----> 1 r = int(input())2 pi = 33 s = pi * r * r4 print(s)ValueError: invalid literal for int() with base 10: '3.5'
3
27
r = float(input())
pi = 3
s = pi * r * r
print(s)
4
48.0
r = eval(input())
pi = 3
s = pi * r * r
print(s)
4
48

尝试运行上面三个程序,分别输入整数和浮点数,观察运行结果。
可以发现,float()和eval()可以接收整数和浮点数输入并正确完成计算。int()只能接收整数输入,当输入浮点数3.5时,会触发异常:ValueError: invalid literal for int() with base 10: ‘3.5’

四、精度问题

在一般的计算中,圆周率值取为3.14即可,有浮点数参与乘法运算,结果仍为浮点数,所以输入的数据一般用float()转为浮点数,这样输入整数和浮点数都可以正确完成运算。

r = float(input())
pi = 3.14
s = pi * r * r
print(s)
3.4
36.2984

不同用户、不同应用场景下,圆周率取值可能不同,这时会得到不同的处理结果:

r = float(input())
pi = 3.1416
s = pi * r * r
print(s)
3
28.2744
r = float(input())
pi = 3.14159265
s = pi * r * r
print(s)
3
28.274333850000005
r = float(input())
pi = 3.141592653589793
s = pi * r * r
print(s)
3
28.274333882308138

上面三个程序,在输入为3时的输出分别为:

28.2744
28.274333850000005
28.274333882308138

五、精度问题解决方法

这种精度不同导致的结果不同是我们在程序设计中应该避免的问题,一般有以下两种方法处理:

  1. 使用相同的圆周率值

例如约定都使用math库中圆周率的值:3.141592653589793
math库中的圆周率值可以用以下语句获取:

import mathprint()
3.141592653589793

上面程序可修改为:

import mathr = float(input())
PI = math.pi   # 用大写字符做变量名,表示这是一个符号常量,确定值3.141592653589793
s = PI * r * r
print(s)
  1. 使用相同输出精度

python中精度控制主要有三种方法:

  • round(digit, n): 浮点数digit保留n位小数,n省略时保留0位小数的最短表示(省略小数末尾无意义的0),返回整数。
  • ‘{:.nf}’.format(digit):round(digit, n): 浮点数digit精确保留n位小数,n省略时保留0位小数,返回整数。
  • f’{digit:.nf}':浮点数digit精确保留n位小数(保留小数末尾无意义的0),n省略时保留0位小数,返回整数。
import mathr = float(input())
PI = math.pi   # 用大写字符做变量名,表示这是一个符号常量,确定值3.141592653589793
s = PI * r * r
print(s)                  # 输出完整浮点数
print(round(s, 3))        # 保留小数点后3位,省略末尾无意义的0,可能少于3位,至少保留1位小数
print('{:.3f}'.format(s)) # 精确保留小数点后3位
print(f'{s:.3f}')         # 精确保留小数点后3位
5
78.53981633974483
78.54
78.540
78.540

六、变量命名规范

上述程序中r和s为单字母变量名,语义不清晰,一般建议用具有明确语义的单词或单词组合做变量名,修改程序如下:

import mathradius = float(input())
PI = math.pi
area = PI * radius * radius
print(f'{area:.3f}')
4
50.265
import math
# import 一般放在程序开头,后面空1到2行diameter = float(input())
PI = math.pi
area = PI * (diameter/2) ** 2
print(f'{area:.3f}')
4
12.566

七、注释

注释就是对代码的解释和说明,其目的是让人们能够更加轻松地了解代码。注释是编写程序时,写程序的人给一个语句、程序段、函数等的解释或提示,能提高程序代码的可读性。

python中注释一般建议用 “#” 开头,可放行首或语句末尾,放在语句末尾时,至少与语句间空2个字符

import math
# import 一般放在程序开头,后面空1到2行radius = float(input())      # 输入半径
PI = math.pi                 # 用大写字符做变量名,表示这是一个符号常量,确定值3.141592653589793
area = PI * radius * radius  # 输入为半径时直接参与运行
print(f'{area:.3f}')         # 精确保留小数点后3位
4
50.265
import math
# import 一般放在程序开头,后面空1到2行diameter = float(input())       # 输入直径
PI = math.pi                    # 用大写字符做变量名,表示这是一个符号常量,确定值3.141592653589793
area = PI * (diameter/2) ** 2  # diameter是直径,需先除以2再计算面积
print(f'{area:.3f}')            # 精确保留小数点后3位
4
12.566

Python每日一学 03——计算半径为r的圆的面积相关推荐

  1. 求半径为r的圆的面积,周长,以及半径为r的球的体积表面积。

    * Copyright (c) 2012, 烟台大学计算机学院 * All rights reserved. * 作    者:  董万鹏 * 完成日期:2012 年10  月18  日 * 版本号: ...

  2. Python每日一学 08——get()方法学习

    Python每日一学 08--get()方法学习 文章目录 Python每日一学 08--get()方法学习 一.前言 二.题目 1.莫尔斯电码转换 2.凯撒密码加密 3.缩写月份单词 4.本月天数 ...

  3. Python每日一学 06——while循环

    Python每日一学 06--while循环 文章目录 Python每日一学 06--while循环 while循环 实例一.斐波那契数列前n项 实例二.Leibniz公式计算圆周率 while循环 ...

  4. Python每日一学 10——for循环

    Python每日一学 10--for循环 文章目录 Python每日一学 10--for循环 一.for循环介绍 二.实例一:等差数列前n项和 三.实例二:计算阶乘 四.实例三:拉马努金法计算圆周率 ...

  5. Python每日一学 01——输入输出

    Python每日一学 01--输入输出 文章目录 Python每日一学 01--输入输出 一.前言 二.输出函数 三.输出格式 1.格式化字符串字面值 2.str.format() 方法 3.字符串拼 ...

  6. Python每日一学 05——布尔运算

    Python每日一学 05--布尔运算 文章目录 Python每日一学 05--布尔运算 一.布尔运算 二.实例:输出20000以内的所有回文素数 三.实例:判断输入的年份是否为闰年 四.实例: 登录 ...

  7. 输入半径r求圆的面积java_已知圆的半径r,求圆的面积S_学小易找答案

    [简答题]编写一个程序实现交换两个变量的数值. [简答题]编制密码器,实现给友军发送加密电报,报文由字母a~n组成,每输入一个字母,输出与其相邻的字母. [简答题]任意输入两个数,完成加法.减法.乘法 ...

  8. 【入门】已知一个圆的半径,求解该圆的面积和周长

    题目描述 已知一个圆的半径,求解该圆的面积和周长 输入 输入只有一行,只有1个整数. 输出 输出只有两行,一行面积,一行周长.(保留两位小数). 令pi=3.1415926 样例 输入 1 输出 3. ...

  9. 东方博易OJ——1005 - 【入门】已知一个圆的半径,求解该圆的面积和周长

    大家好 今天给大家带来<东方博易OJ--1005 - [入门]已知一个圆的半径,求解该圆的面积和周长> 题目: 1005 - [入门]已知一个圆的半径,求解该圆的面积和周长 题目描述 已知 ...

最新文章

  1. Go: 分布式学习利器(3) -- Go的数据类型和运算符
  2. java 获取资源,Java资源获取
  3. ccBPM典型的树形表单和多表头表单的流程示例
  4. Scrapy_XPath选择器
  5. 第二阶段团队项目冲刺第五天
  6. php gdb strace抓包,Linux上进程追踪与调试(strace和gdb)
  7. 剑指offer——面试题9:求斐波那切数列的四种方法
  8. C++第五章课后习题13
  9. Java并发:Callable、Future和FutureTask
  10. linux常用命令和关闭防火墙
  11. 浅析MySQL中exists与in的使用
  12. 速腾(RoboSense)16线激光雷达调试出点云图(Ubuntu1804和windows系统都已经显示点云),包含各种遇见的坑【避坑指南】{[driver][socket]Rslidar poll}
  13. 十大著名黑客-----凯文-米特尼克
  14. buildroot_buildroot-我对多平台发行版创作的经验
  15. windows多线程(八) 信号量Semaphore实例
  16. python---表情包爬取
  17. Tomcat for win7 搭建集群
  18. sci论文宝典,科研入门,如何进行科研
  19. 神经协同过滤Neural Collaborative Filtering(NCF)
  20. 通过文件头识别BMP或JPG文件

热门文章

  1. linux系统cad,6 款高品质的免费 Linux CAD 应用程序
  2. 星云大师25句经典语录,教你如何过好这一生(转)
  3. 十 手游开发神器 cocos2d-x editor 之触摸事件
  4. C1-任务02-计算机网络
  5. Cisco IPPhone XML 技术文档
  6. 2023最新整理软件测试面试题附答案
  7. 深度学习经典入门项目—波士顿房价预测
  8. centos7 开启ipv6_centos7怎么关闭ipv6仅使用ipv4?
  9. 三星Note2(N7100)刷机
  10. c语言 验证卡布列克运算,pasca编程验证卡布列克运算