python 笔记作业

这篇博客记录了作者学习Python的过程,包括自定义函数的实现,特别是涉及一元二次方程求解、参数组合的探讨,如位置参数、默认参数、可变参数等。还提到了递归函数的概念,以汉诺塔问题为例,以及迭代操作在处理列表和字符串时的应用。最后介绍了生成器的概念,并给出了杨辉三角的实现作业。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

小白的python之路

2018/04/18

自定义函数:

    作业:定义自定义函数quadratic(),接收3个参数,返回一元二次方程:ax2 + bx + c = 0的2个解。

提示:计算平方根可以调用math.sqrt()函数:

# -*- coding: utf-8 -*-
import math
def quadratic(a,b,c):
	p=b*b-4*a*c
	if p>=0 and a!=0:
		x1=(-b+math.sqrt(p))/(2*a)
		x2=(-b-math.sqrt(p))/(2*a)
		return x1,x2
	elif a==0:
		x1=x2=-c/b
		return x1
	else:
		return('none answer')
a=float(input('Please input a='))
b=float(input('please input b='))
c=float(input('Please input c='))
print(quadratic(a,b,c))

函数的参数:

    1.位置参数      2.默认参数      3.可变参数      4.关键字参数    5.命名关键字参数  

1.位置参数:调用函数时根据函数定义的参数位置来传递参数。

2.默认参数:必选参数放前,默认参数放后面。(避免产生歧义而导致编译器报错)变化较小的参数放后面,变化较大的参数放前面。

3.可变参数:传入的参数个数是可变的。在参数前面增加符号'*',参数接收到后自动组装成tuple数据类型,允许传入0个或者任意个数。(可在list\tuple前面增加'*'将其中的元素变为可变参数输入。)

4.关键字参数:在参数前面增加符号'**'。参数接收到后自动组装成一个dict,允许传入0个或者任意个数。

5.命名关键字参数  :限制关键字参数的名字,例如仅接收dict中特定几个的key作为关键字参数。利用符号'*,key1,key2'        '*,'后面的参数识别为命名关键字参数。

实例:计算x的n次方:

def power(x,n=2):#n=2为默认参数
	s=1
	while n>0:
		n=n-1
		s=s*x
	return s
x=float(input('input x='))
n=float(input('input n='))
print(power(x,n))

参数组合

在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。


字符类型:''        tuple类型:()        dict类型:{}        list类型:[]        


2018/04/19

递归函数在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。

作业:(编写汉诺塔移动函数)

    请编写move(n, a, b, c)函数,它接收参数n,表示3个柱子A、B、C中第1个柱子A的盘子数量,然后打印出把所有盘子从A借助B移动到C的方法:

def move(n,a='a',b='b',c='c'):#定义汉诺塔移动函数
	if n==1:
		print(a,'-->',c)#仅有1个盘子时将盘子从a移动到c
	else:
		move(n-1,a,c,b)#将n-1层以下的盘子从a移动到b
		move(1,a,b,c)#将第一层盘子(最大一个)从a移动到c
		move(n-1,b,a,c)#将剩余n-1层盘子从b移动到c
#测试
n=int(input('盘子个数:'))
print(move(n))

对于汉诺塔的算法理解:

如何理解汉诺塔的递归? - Fireman A的回答 - 知乎

切片:取一个list或者tuple中的部分元素。

作业:利用切片操作,实现一个trim()函数,去除字符串首尾的空格,注意不要调用str的strip()方法:

#利用切片(slice)操作,实现一个trim()函数,去除掉字符串首位的空格,不涉及使用str的strip()方法
def trim(s):
	while s[0]==' ':
		s=s[1:]
	while s[-1]==' ':
		s=s[:-1]
	return s
#测试
print(trim('      孤独是一种美德   '))


#递归方法解决该问题
def trim2(s):
	if s[:1]==' ':
		return trim2(s[1:])
	if s[-1:]==' ':
		return trim2(s[:-1])
	return s

if&while 差别:while循环语句,可以执行多次,if是条件语句,只是单次执行。

2018/04/21更新: strip函数 

#rstrip():剔除字符串结尾的空白	lstrip():剔除字符串开头的空白	strip():剔除字符串开头和结尾的空白
favorite_language=' python '
print(favorite_language,'\n',favorite_language.rstrip(),'\n',favorite_language.lstrip(),'\n',favorite_language.strip())

2018/04/20

   迭代:给定一个list或者tuple,我们可以通过for循环语句来遍历这个lsit或者tuple。称之为迭代(Iteration)

在python中,迭代可以通过for...in...完成。

作业:请使用迭代查找一个list中最小和最大值,并返回一个tuple:

def findminandmax(L):
	if(L==[]):
		return(None,None)
	else:
		min=L[0]
		max=L[0]
		for n in L:
			if(min>n):
				min=n
			if(max)<n:
				max=n
	return(min,max)
#测试
if findminandmax([]) != (None, None):
    print('测试失败!')
elif findminandmax([7]) != (7, 7):
    print('测试失败!')
elif findminandmax([7, 1]) != (1, 7):
    print('测试失败!')
elif findminandmax([7, 1, 3, 9, 5]) != (1, 9):
    print('测试失败!')
else:
    print('测试成功!')
作业:

如果list中既包含字符串,又包含整数,由于非字符串类型没有lower()方法,所以列表生成式会报错:

>>> L = ['Hello', 'World', 18, 'Apple', None]
>>> [s.lower() for s in L]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 1, in <listcomp>
AttributeError: 'int' object has no attribute 'lower'

使用内建的isinstance函数可以判断一个变量是不是字符串:

>>> x = 'abc'
>>> y = 123
>>> isinstance(x, str)
True
>>> isinstance(y, str)
False

请修改列表生成式,通过添加if语句保证列表生成式能正确地执行:


L1 = ['Hello', 'World', 18, 'Apple', None]
L2 =[s.lower() for s in L1 if isinstance(s,str)==True]
# 测试:
print(L2)
if L2 == ['hello', 'world', 'apple']:
    print('测试通过!')
else:
    print('测试失败!')
2018/04/21补充:参数.title()#title()函数会将字符串开头单词变为大写


2018/04/21

今天买的当当实体书到了,开心&加油


生成器:generator

作业:杨辉三角的实现:

          1
         / \
        1   1
       / \ / \
      1   2   1
     / \ / \ / \
    1   3   3   1
   / \ / \ / \ / \
  1   4   6   4   1
 / \ / \ / \ / \ / \
1   5   10  10  5   1

把每一行看做一个list,试写一个generator,不断输出下一行的list:







内容概要:该研究通过在黑龙江省某示范村进行24小时实地测试,比较了燃煤炉具与自动/手动进料生物质炉具的污染物排放特征。结果显示,生物质炉具相比燃煤炉具显著降低了PM2.5、CO和SO2的排放(自动进料分别降低41.2%、54.3%、40.0%;手动进料降低35.3%、22.1%、20.0%),但NOx排放未降低甚至有所增加。研究还发现,经济性和便利性是影响生物质炉具推广的重要因素。该研究不仅提供了实际排放数据支持,还通过Python代码详细复现了排放特征比较、减排效果计算和结果可视化,进一步探讨了燃料性质、动态排放特征、碳平衡计算以及政策建议。 适合人群:从事环境科学研究的学者、政府环保部门工作人员、能源政策制定者、关注农村能源转型的社会人士。 使用场景及目标:①评估生物质炉具在农村地区的推广潜力;②为政策制定者提供科学依据,优化补贴政策;③帮助研究人员深入了解生物质炉具的排放特征和技术改进方向;④为企业研发更高效的生物质炉具提供参考。 其他说明:该研究通过大量数据分析和模拟,揭示了生物质炉具在实际应用中的优点和挑战,特别是NOx排放增加的问题。研究还提出了多项具体的技术改进方向和政策建议,如优化进料方式、提高热效率、建设本地颗粒厂等,为生物质炉具的广泛推广提供了可行路径。此外,研究还开发了一个智能政策建议生成系统,可以根据不同地区的特征定制化生成政策建议,为农村能源转型提供了有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值