这个python题目怎么写?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了这个python题目怎么写?相关的知识,希望对你有一定的参考价值。

无意间,看到这么一道Python面试题:以下代码将输出什么?

def testFun:
temp = [lambda x : i*x for i in range(4)]
return temp
for everyLambda in testFun:
print (everyLambda(2))

脑中默默一想,这还用说么,肯定是:

0
2
4
6

最后一看答案,竟然是:

6
6
6
6

于是带着怀疑的心态(其实是不服输,不认错),打开编辑器,快速一敲,果然是:
怀疑了人生半天,本来还想黑,WTF Python…然后才想通是自己太生疏......
最后发现原因竟是:Python 的闭包的后期绑定导致的 late binding。
这意味着在闭包中的变量是在内部函数被调用的时候被查找,所以当任何testFun 返回的函数被调用,i 的值是在它被调用时的周围作用域中查找。
也就是说无论哪个返回的函数被调用,for 循环都已经完成了,i 最后的值是 3,因此,每个返回的函数 testFun 的值都是 3。
因此一个等于 2 的值被传递进以上代码,它们将返回一个值 6 (比如:3 x 2)。
究竟如何才能实现出这样的结果呢?

0
2
4
6

想了想,若能立即绑定参数,或者直接不用闭包总该行吧,用另一种方式避免 i 的改写。
回忆了之前所学知识,最后酝酿出了四种解决方案。
第一种:创建一个闭包,通过使用默认参数立即绑定它的参数

def testFun:
temp = [lambda x, i=i: i * x for i in range(4)]
return temp
for everyLambda in testFun:
print(everyLambda(2))

第二种:使用functools.partial 函数,把函数的某些参数(不管有没有默认值)给固定住(也就是相当于设置默认值)

from functools import partial
from operator import mul
def testFun:
return [partial(mul, i) for i in range(4)]
for everyLambda in testFun:
print(everyLambda(2))

第三种:优雅的写法,直接用生成器

def testFun:
return (lambda x, i=i: i * x for i in range(4))
for everyLambda in testFun:
print(everyLambda(2))

第四种:利用yield的惰性求值的思想

def testFun:
for i in range(4):
yield lambda x: i * x
for everyLambda in testFun:
print(everyLambda(2))

最终运行结果:
有了解决方案后,又陷入了怀疑自己,这个题目究竟是考察的是什么?是在考面试者闭包相关知识以及Python 的闭包的后期绑定问题么?
若将题目改成:以下代码输出的结果是(0,2,4,6)么?如果不是,你将会怎么做,让它变成(0,2,4,6)?这样会不会更有意思点呢?欢迎大家出妙招,看究竟有多少招?(哈哈哈!!!)
参考技术A a = input(' 请输入一个英文字母:').lower()
if a == 'z':
b = 'a'

else:
b = chr(ord(a)+1)

print('字母'+a+'下一个字母为:',b)本回答被提问者采纳

这个Python为啥......

第一行写的是print("\033[31m海洋学校正在举行一年一度的班级比赛"),本来想让终端输出“海洋学校正在举行一年一度的班级比赛”可是却输出了“33[31m海洋学校正在举行一年一度的班级比赛”怎么改正(Python语言)?而且,为什么在别的作品上这么写倒可以输出红色的字呢?

你的ide没识别吧,换pycharm试试?

参考技术A python脚本的windows控制台彩色文字输出 在linux系统中,终端内可以通过curse模块或控制字符来输出彩色文本,但是在windows系统中没有curse模块也不能用控制字符,只能调用 win32console模块中的控制台相关函数。直接调用这些函数还是比较麻烦的,因此有人弄了个WConio模块,封装了这些函数的功能。使用 WConio,彩色文本的输出变得简单:
import WConio attr=WConio.gettextinfo()[4] #保存默认文本颜色 WConio.textcolor(WConio.RED) #将后续输出的文本的颜色设为红色 print "红色的文字" WConio.settextattr(attr) #回复默认的文本颜色
不是所有的控制台解析\033[31m这样的控制字符,linux下bash应该没问题,python debug console也没有问题,建议你选择适合的控制台了再,cmd下color 指令控制颜色,但更加精细的控制就得如前面说的内容了
参考技术B 我第一次接触到Python的语言课程是在我大二的时候。当你看这个选修课的时候,你需要去两个教室,而且还有很多课。他放弃了蟒蛇,选择了另一条同类的路线。然后一个同学问我:“蟒蛇怎么样?”\"作为一个学习教育技术的学生,你不能说你不知道,你不知道。于是我静静地打开百度,查询相关信息。我们的发现和老师说的一样多。Python确实是一种方便的编程语言。我以前也学过c++,觉得c++很难理解。当然,这也可能是因为我练习的次数太少了。我说我读了一百遍书,我看到了。它很受蟒蛇的欢迎,所以我希望多练习。争取早期掌握。从我们的专业角度来看,我认为我们可以谈论一些与我们的专业相关的编程知识,比如一些检查时间表的小程序,以及教育网页的初步设计。还有一些其他的知识。通过这种方式,学生们可能对学习更感兴趣。我希望在这门课上尽可能多地掌握这门语言。因为我认为蟒蛇对我将来的工作和学习很有帮助。理论课还是这样好,更新颖。因为人们通常很少注意课本,我不知道我是否能在课堂上抽出十分钟让每个人都看课本,这样我们一开始就知道效率会更高。你当然可以做几分钟。我想我可以给你一个在这门课上编程需要注意的大致概念。或者也许老师可以展示这样的东西。那么你就可以多留一点问题,因为他们的探索时间比较长,虽然印象深刻,但我认为多练习几次也可以达到类似的效果。是个小高中,嘿。还有一些家庭作业可以安排。因为我发现我们班的学生特别渴望学习,所以高的作业可以很快完成。为领先而战。老师能和高老师交谈,学习经验。例如,红包,让学生看看排名什么的。你可以充分利用超级明星软件。另外,我发现为这门课交作业有点麻烦。有各种各样的平台,非常混乱。 参考技术C

1.实现过程

终端的字符颜色是用转义序列控制的,是文本模式下的系统显示功能,和具体的语言无关。控制字符颜色的转义序列是以ESC开头,即用\\033来完成 

2.书写过程

开头部分: \\033[显示方式;前景色;背景色m

结尾部分: \\033[0m

注意:

开头部分的三个参数:显示方式,前景色,背景色是可选参数,可以只写其中的某一个;另外由于表示三个参数不同含义的数值都是唯一的没有重复的,所以三个参数的书写先后顺序没有固定要求,系统都能识别;但是,建议按照默认的格式规范书写。

结尾部分其实也可以省略,但是为了书写规范,建议\\033[***开头,\\033[0m结尾。 

3.参数

    显示方式: 0(默认值)、1(高亮)、22(非粗体)、4(下划线)、24(非下划线)、 5(闪烁)、25(非闪烁)、7(反显)、27(非反显)

    前景色: 30(黑色)、31(红色)、32(绿色)、 33(黄色)、34(蓝色)、35(洋 红)、36(青色)、37(白色)

    背景色: 40(黑色)、41(红色)、42(绿色)、 43(黄色)、44(蓝色)、45(洋 红)、46(青色)、47(白色)

\\033是八进制27的ASCII码,即Esc。

你的语法错误:print("\\033[31m海洋学校正在举行一年一度的班级比赛")

正确应该是:print("\\033[0;31m海洋学校正在举行一年一度的班级比赛\\033[0m")

高版本好像不支持,如Python3.7。

参考技术D print里面的内容如果是双引号扩起来的,都会当做字符串打印出来,可以改变第一个双引号的位置试试。

以上是关于这个python题目怎么写?的主要内容,如果未能解决你的问题,请参考以下文章

python -- 题目自己写然后比较

LintCode Python 简单级题目 488.快乐数

Python面试题

关于Python字典的两道题目

洛谷 P1789 插火把 Python

Python 写 ACM 题目的一些技巧