有哪些 python 的在线练习题或编程挑战的网站?

2020-04-29 09:30发布

4条回答
selanger
2楼 · 2020-04-29 09:34

可以上力扣(LeetCode)上面试试

曾为
3楼 · 2020-11-30 09:34


 

大家如果能坚持独立思考完成以下题目,一定可以帮大家轻松getPython的编程技能。目前,这个项目已经获得了3994Stars,2952Forks。

Github地址:Python-programming-exercises

首先,这100+练习题根据难易程度分为三个等级:Level1、2和3。下面对如何定义这三个Level进行了说明,大家可以结合自身的学习能力和实践经验进行选择。

其次,本编程题是基于Python3,每题都有问题描述、提示和解决方案。大家一定要先独立完成,然后再看参考答案哈~

前25题中,Q1~5、22~25都是Level1的难度,Q6~17为Level2,Q18~22为Level3。大家正好利用这五道题学习、巩固一下基础,然后就开始准备挑战自己吧!

  1.   等级描述Level1:初级。是指刚刚通过Python入门课程的人。他可以用1或2个Python类或函数来解决一些问题。通常,答案可以直接在教科书中找到。Level2:中级。是指刚刚学习了Python,但是已经有了较强的编程背景的人。他应该能够解决可能涉及3或3个Python类或函数的问题。答案不能直接在课本上找到。Level3:高级。。他应该使用Python来解决更复杂的问题,使用更丰富的库函数、数据结构和算法。他应该使用几个Python标准包和高级技术来解决这个问题。2.   问题的模板#-----------------------------------------#问题提示解决方案3.问题

  2. 前25题中,Q1~5、22~25都是Level1的难度,Q6~17为Level2,Q18~22为Level3。

  3. 100+Python编程题

  4. 题11级问题:编写一个程序,它将找到所有这些数字,可被7整除,但不是5的倍数,2000年至3200年(包括在内)。得到的数字应按逗号分隔的顺序打印在一行上。提示:考虑使用range(#begin,#end)方法

  5. 解决方案:

  6. l=[]

  7. foriinrange(2000,3201):

  8. if(i%7==0)and(i%5!=0):

  9. l.append(str(i))

print(','.join(l))

题21级问题:编写一个可以计算给定数的阶乘的程序。结果应该以逗号分隔的顺序打印在一行上。假设向程序提供以下输入:8则输出为:40320提示:在为问题提供输入数据的情况下,应该假设它是控制台输入。解决方案:

deffact(x):

ifx==0:

return1

returnx*fact(x-1)

print('请输入一个数字:')

x=int(input())

print(fact(x))

题31级问题:使用给定的整数n,编写一个程序生成一个包含(i,i*i)的字典,该字典包含1到n之间的整数(两者都包含)。然后程序应该打印字典。假设向程序提供以下输入:8则输出为:{1:1,2:4,3:9,4:16,5:25,6:36,,7:49,8:64}提示:在为问题提供输入数据的情况下,应该假设它是控制台输入。考虑使用dict类型()解决方案:

print('请输入一个数字:')

n=int(input())

d=dict()

foriinrange(1,n+1):

d[i]=i*i


print(d)

题41级问题:编写一个程序,该程序接受控制台以逗号分隔的数字序列,并生成包含每个数字的列表和元组。假设向程序提供以下输入:34岁,67年,55岁,33岁,12日,98年则输出为:['34','67','55','33','12','98']        ('34','67','55','33','12','98')提示:在为问题提供输入数据的情况下,应该假设它是控制台输入。方法可以将列表转换为元组解决方案:

importre

print('请输入一组数字:')

values=input()

l=values.split(",")

k=re.findall(r'[0-9]+',values)

t=tuple(k)

print(k)

print(t)

题51级问题:定义一个至少有两个方法的类:    getString:从控制台输入获取字符串    printString::打印大写母的字符串。还请包含简单的测试函数来测试类方法。提示:使用_init__方法构造一些参数解决方案:

classInputOutString(object):

def__init__(self):

self.s=""


defgetString(self):

print('请输入字符串:')

self.s=input()


defprintString(self):

print(self.s.upper())


strObj=InputOutString()

strObj.getString()

strObj.printString()

题62级问题:编写一个程序,根据给定的公式计算并打印值:。以下是C和H的固定值:C是50。H是30。D是一个变量,它的值应该以逗号分隔的序列输入到程序中。例子假设程序的输入序列是逗号分隔的:100,150,180,程序输出为:18,22,24提示:如果接收到的输出是小数,则应四舍五入到其最近的值(例如,如果接收到的输出是26.0,则应打印为26)。在为问题提供输入数据的情况下,应该假设它是控制台输入。解决方案:

#!/usr/bin/envpython

importmath

c=50

h=30

value=[]

print('请输入一组数字:')

items=[xforxininput().split(',')]

fordinitems:

value.append(str(int(round(math.sqrt(2*c*float(d)/h)))))


print(','.join(value))

题72级问题:编写一个程序,以2位数字,X,Y作为输入,生成一个二维数组。数组的第i行和第j列中的元素值应该是i*j。注意:i=0,1..,X-1;  j=0,1,­Y-1。例子假设程序有以下输入:3、5则程序输出为:[[0,0,0,0,0],[0,1,2,3,4],[0,2,4,6,8]]提示:注意:如果要为问题提供输入数据,应该假设它是一个控制台输入,以逗号分隔。解决方案:

print('请输入两个数字:')

input_str=input()

dimensions=[int(x)forxininput_str.split(',')]

rowNum=dimensions[0]

colNum=dimensions[1]

multilist=[[0forcolinrange(colNum)]forrowinrange(rowNum)]


forrowinrange(rowNum):

forcolinrange(colNum):

multilist[row][col]=row*col


print(multilist)

题82级问题:编写一个程序,接受逗号分隔的单词序列作为输入,按字母顺序排序后按逗号分隔的序列打印单词。假设向程序提供以下输入:without,hello,bag,world则输出为:bag,hello,without,world提示:在为问题提供输入数据的情况下,应该假设它是控制台输入。解决方案:

items=[xforxininput().split(',')]

items.sort()

print(','.join(items))


题92级问题:编写一个程序,接受一行序列作为输入,并在将句子中的所有字符大写后打印行。假设向程序提供以下输入:HelloworldPracticemakesperfect则输出为:HELLOWORLDPRACTICEMAKESPERFECT提示:在为问题提供输入数据的情况下,应该假设它是控制台输入。解决方案:

lines=[]

whileTrue:

s=input()

ifs:

lines.append(s.upper())

else:

break;


forsentenceinlines:

print(sentence)

题102级问题:编写一个程序,接受一系列空格分隔的单词作为输入,并在删除所有重复的单词并按字母数字排序后打印这些单词。假设向程序提供以下输入:helloworldandpracticemakesperfectandhelloworldagain则输出为:againandhellomakesperfectpracticeworld提示:在为问题提供输入数据的情况下,应该假设它是控制台输入。我们使用set容器自动删除重复的数据,然后使用sort()对数据进行排序。解决方案:

print('请输入一组字符串:')

s=input()

words=[wordforwordins.split("")]

print("".join(sorted(list(set(words)))))

题112级

问题:编写一个程序,接受一系列逗号分隔的4位二进制数作为输入,然后检查它们是否可被5整除。可被5整除的数字将以逗号分隔的顺序打印。例:0100,0011,1010,1001那么输出应该是:1010注意:假设数据由控制台输入。

提示:如果输入数据被提供给问题,则应该假定它是控制台输入。

解:

value=[]

print('请输入逗号分隔的4位二进制数:')

items=[xforxininput().split(',')]

forpinitems:

intp=int(p,2)

#print(intp)

ifnotintp%5:

value.append(p)


print(','.join(value))

题122级

题:编写一个程序,它将找到1000到3000之间的所有这些数字(均包括在内),这样数字的每个数字都是偶数。获得的数字应以逗号分隔的顺序打印在一行上。

提示:如果输入数据被提供给问题,则应该假定它是控制台输入。解:

values=[]

foriinrange(1000,3001):

s=str(i)

if(int(s[0])%2==0)and(int(s[1])%2==0)and(int(s[2])%2==0)and(int(s[3])%2==0):

values.append(s)

print(",".join(values))

题132级

题:编写一个接受句子并计算字母和数字的程序。假设为程序提供了以下输入:Helloworld! 123然后,输出应该是:字母10数字3

提示:如果输入数据被提供给问题,则应该假定它是控制台输入。

解:

print('请输入:')

s=input()

d={"DIGITS":0,"LETTERS":0}

forcins:

ifc.isdigit():

d["DIGITS"]+=1

elifc.isalpha():

d["LETTERS"]+=1

else:

pass

print("LETTERS",d["LETTERS"])

print("DIGITS",d["DIGITS"])

题142级

题:编写一个接受句子的程序,并计算大写字母和小写字母的数量。假设为程序提供了以下输入:Helloworld!然后,输出应该是:大写实例1小写实例9

提示:如果输入数据被提供给问题,则应该假定它是控制台输入。

解:

print('请输入:')

s=input()

d={"UPPERCASE":0,"LOWERCASE":0}

forcins:

ifc.isupper():

d["UPPERCASE"]+=1

elifc.islower():

d["LOWERCASE"]+=1

else:

pass

print("UPPERCASE",d["UPPERCASE"])

print("LOWERCASE",d["LOWERCASE"])

题152级

题:编写一个程序,计算a+aa+aaa+aaaa的值,给定的数字作为a的值。假设为程序提供了以下输入:9  然后,输出应该是:11106

提示:如果输入数据被提供给问题,则应该假定它是控制台输入。

解:

print('请输入一个数字:')

a=input()

n1=int("%s"%a)

n2=int("%s%s"%(a,a))

n3=int("%s%s%s"%(a,a,a))

n4=int("%s%s%s%s"%(a,a,a,a))

print(n1+n2+n3+n4)

题162级

题:使用列表推导来对列表中的每个奇数。该列表由一系列逗号分隔的数字输入。假设为程序提供了以下输入:1,2,3,4,5,6,7,8,9然后,输出应该是:1,3,5,7,9

解:

print("输入:")

values=input()

numbers=[xforxinvalues.split(",")ifint(x)%2!=0]

print(",".join(numbers))

题172级

题:编写一个程序,根据控制台输入的事务日志计算银行帐户的净金额。事务日志格式如下所示:D100W200

D表示存款,而W表示提款。假设为程序提供了以下输入:D300D300W200D100然后,输出应该是:500

提示:如果输入数据被提供给问题,则应该假定它是控制台输入。

解:

netAmount=0

whileTrue:

print("请输入:")

s=input()

ifnots:

break

values=s.split("")

operation=values[0]

amount=int(values[1])

ifoperation=="D":

netAmount+=amount

elifoperation=="W":

netAmount-=amount

else:

pass

print(netAmount)

题183级

题:网站要求用户输入用户名和密码进行注册。编写程序以检查用户输入的密码的有效性。以下是检查密码的标准:1.[a-z]之间至少有1个字母2.[0-9]之间至少有1个数字1.[A-Z]之间至少有一个字母3.[$#@]中至少有1个字符4.最短交易密码长度:65.交易密码的最大长度:12您的程序应接受一系列逗号分隔的密码,并将根据上述标准进行检查。将打印符合条件的密码,每个密码用逗号分隔。例:如果以下密码作为程序的输入:

ABd1234@1,aF1#,2w3E*,2We3345然后,程序的输出应该是:

ABd1234@1

提示:如果输入数据被提供给问题,则应该假定它是控制台输入。

解:

importre

value=[]

print("请输入:")

items=[xforxininput().split(',')]

forpinitems:

iflen(p)<6orlen>12:

continue

else:

pass

ifnotre.search("[a-z]",p):

continue

elifnotre.search("[0-9]",p):

continue

elifnotre.search("[A-Z]",p):

continue

elifnotre.search("[$#@]",p):

continue

elifre.search("\s",p):

continue

else:

pass

value.append(p)

print(",".join(value))

题193级

题:您需要编写一个程序,按升序对(名称,年龄,高度)元组进行排序,其中name是字符串,age和height是数字。元组由控制台输入。排序标准是:1:根据名称排序;2:然后根据年龄排序;3:然后按分数排序。优先级是name>age>得分。如果给出以下元组作为程序的输入:Tom,19,80John,20,90Jony,17,91Jony,17,93Json,21,85然后,程序的输出应该是:[('John','20','90'),('Jony','17','91'),('Jony','17','93'),('Json','21','85'),('Tom','19','80')]

提示:如果输入数据被提供给问题,则应该假定它是控制台输入。我们使用itemgetter来启用多个排序键。

解:

fromoperatorimportitemgetter,attrgetter


l=[]

print("请输入:")

whileTrue:


s=input()

ifnots:

break

l.append(tuple(s.split(",")))


print(sorted(l,key=itemgetter(0,1,2)))

题203级

题:使用生成器定义一个类,该生成器可以在给定范围0和n之间迭代可被7整除的数字。

提示:考虑使用yield。

解:

defputNumbers(n):

i=0

whilei

j=i

i=i+1

ifj%7==0:

yieldj


foriinputNumbers(100):

print(i)

题213级机器人从原点(0,0)开始在平面中移动。机器人可以通过给定的步骤向上,向下,向左和向右移动。机器人运动的痕迹如下所示:UP5DOWN3LETF3RIGHT2方向之后的数字是步骤。请编写一个程序来计算一系列运动和原点之后距当前位置的距离。如果距离是浮点数,则只打印最接近的整数。例:如果给出以下元组作为程序的输入:UP5DOWN3LETF3RIGHT2然后,程序的输出应该是:2提示:如果输入数据被提供给问题,则应该假定它是控制台输入。

importmath

pos=[0,0]

print("请输入:")

whileTrue:

s=input()

ifnots:

break

movement=s.split("")

direction=movement[0]

steps=int(movement[1])

ifdirection=="UP":

pos[0]+=steps

elifdirection=="DOWN":

pos[0]-=steps

elifdirection=="LEFT":

pos[1]-=steps

elifdirection=="RIGHT":

pos[1]+=steps

else:

pass


print(int(round(math.sqrt(pos[1]**2+pos[0]**2))))

题223级

题:编写一个程序来计算输入中单词的频率。按字母顺序对键进行排序后输出。假设为程序提供了以下输入:

NewtoPythonorchoosingbetweenPython2andPython3?ReadPython2orPython3.

然后,输出应该是:

2:23.:13?:1New:1Python:5Read:1and:1between:1choosing:1or:2to:1

提示:如果输入数据被提供给问题,则应该假定它是控制台输入。

freq={}#frequencyofwordsintext

print("请输入:")

line=input()

forwordinline.split():

freq[word]=freq.get(word,0)+1

words=sorted(freq.keys())#按key值对字典排序


forwinwords:

print("%s:%d"%(w,freq[w]))

题231级

题:写一个可以计算数字平方值的方法

提示: 使用**运算符

defsquare(num):

returnnum**2


print(square(2))

print(square(3))

题241级

题:Python有许多内置函数,如果您不知道如何使用它,您可以在线阅读文档或查找一些书籍。但是Python为每个内置函数都有一个内置的文档函数。     请编写一个程序来打印一些Python内置函数文档,例如abs(),int(),raw_input()     并为您自己的功能添加文档    提示:内置文档方法是__doc__

print(abs.__doc__)

print(int.__doc__)

print(input.__doc__)


defsquare(num):

'''Returnthesquarevalueoftheinputnumber.


Theinputnumbermustbeinteger.

'''

returnnum**2


print(square(2))

print(square.__doc__)

题251级

题:定义一个类,它具有类参数并具有相同的实例参数。

提示:定义一个实例参数,需要在__init__方法中添加它。您可以使用构造参数初始化对象,也可以稍后设置该值

classPerson:

#Definetheclassparameter"name"

name="Person"


def__init__(self,name=None):

#self.nameistheinstanceparameter

self.name=name


jeffrey=Person("Jeffrey")

print("%snameis%s"%(Person.name,jeffrey.name))


nico=Person()

nico.name="Nico"

print("%snameis%s"%(Person.name,nico.name))

 

Python入门、提高学习网站链接:https://github.com/jackfrued/Python-100-Days?utm_source=wechat_session&utm_medium=social&utm_oi=931473721877651456

刷Leetcode网站力扣:https://leetcode-cn.com/problemset/all/

Python进阶:https://docs.pythontab.com/interpy/

菜鸟教程:https://www.runoob.com/python/python-100-examples.html

未完待续……


汽水味的小盆友
4楼 · 2021-11-30 18:48

一、LeetCode(有中文)

力扣(LeetCode)源自美国硅谷,是领扣网络旗下专注于程序员技术成长和企业技术人才服务的品牌。已经成为程序员找工作前必刷的网址之一了。


二、牛客网(中文)

牛客网应该是做面试经验起家的,校招的面经相对多一些,社招的少。题库也都对标国内大厂的面试题,很值得看。牛客题霸_C++Java前端经典笔试面试题库_在线编程_牛客网www.nowcoder.com

题不在多而在于精,其实如果把上边题库的基础都巩固了,问题都不大了。感兴趣的可以再去看看

下边的国外编程挑战网站。(都是老外推荐的,机翻将就着看一下)


三、Project Euler

Project Euler大概是世界上最受欢迎的编程挑战网站,而且自从十多年前推出之后,就成为了成千上万用户的家园。你可以每周添加一个额外的挑战,不过我敢肯定,要想搞定已经在等待解决的450多个问题已经要花点时间了。

它们设立得并不是很难,反而更加需要关键的思考和解决问题,以此来帮助你成长和学习你所使用的语言。这一切都是为了锻炼你进步,确保你充分理解自己在做什么。


四、topcoder

它被近一百万程序员所支持,所以我很肯定一定能遇到许多有挑战性的东西。我这么说,是因为我相信有些刚起步的编程爱好者可能会觉得topcoder比较难。

可以参加每天或者每周的编程挑战,两者都极其困难,而且需要非常好的思维技巧来完成。但这是值得的,因为它最终会为你的简历增色不少。https://www.topcoder.com/www.topcoder.com


五、Codewars

Codewars有一个很好的编程挑战的方法,而且很认真地对待他们的作品。我试着找到正确的词语来形容它,不过这里有Codewars提供的一段十分钟的介绍视频。

我觉得你会喜欢它的,就像社区里很多开发者已经喜欢的那样。Codewars: Achieve mastery through challengewww.codewars.com


六、HackerRank

它们非常酷,而且让高级程序员也有东西可以玩。它的背后是Y Combinator、SVAngel和许多其他公司。绝对有很多黑客在攻克这些。HackerRankwww.hackerrank.com


七、Coderbyte

Coderbyte是Kickstarter资助的项目(虽然,它本身在这项运动之前就已经存在了),而且它针对完全的初学者和类似中级程序员。

它是由Daniel Borowski在2012年发起的,而且此后发展成一个由喜欢在空闲时间解决编程问题的程序员们自行维护的社区。

如果有什么不明白的,你也可以提问,这个社区也是比较活跃的。所以你应该很有可能得到答案。很多人都热爱Coderbyte,我看到的全部都是正面评价。http://coderbyte.com/coderbyte.com


八、CodinGame(游戏编程)

CodinGame 对程序员来说是一个巨大的挑战,如果你想提升编程技能,玩CodinGame是一种有趣的方式。Coding Games and Programming Challenges to Code Betterwww.codingame.com


九、Codeforces

Codeforces是一个提供在线评测系统的俄罗斯网站。[2]该网站由一群来自俄罗斯萨拉托夫国立大学的程序员创建并维护。https://codeforces.com/codeforces.com


十、dailyprogrammer

reddit可以理解为国外的百度贴吧,然后有这么一个每日项目练习的贴吧供大家交流学习。https://www.reddit.com/r/dailyprogrammerwww.reddit.com

超甜的布丁
5楼 · 2021-12-02 11:24

waterloo大学官网上提供的学习python 的网站,属于入门级别的,当时我刚发现的时候,真的是由衷的赞叹外国人设计课程的思想非常的人性合理,大爱。然后把所有的这个教程一个不剩的全部练习完。网站地址的关键字里有cscircles


相关问题推荐

  • 回答 3

    换行。比如,print hello\nworld效果就是helloworld\n就是一个换行符。\是转义的意思,&#39;\n&#39;是换行,&#39;\t&#39;是tab,&#39;\\&#39;是,\ 是在编写程序中句子太长百,人为换行后加上\但print出来是一整行。...

  • 回答 42

    十种常见排序算法一般分为以下几种:(1)非线性时间比较类排序:a. 交换类排序(快速排序、冒泡排序)b. 插入类排序(简单插入排序、希尔排序)c. 选择类排序(简单选择排序、堆排序)d. 归并排序(二路归并排序、多路归并排序)(2)线性时间非比较类排序:...

  • 回答 70
    已采纳

    前景很好,中国正在产业升级,工业机器人和人工智能方面都会是强烈的热点,而且正好是在3~5年以后的时间。难度,肯定高,要求你有创新的思维能力,高数中的微积分、数列等等必须得非常好,软件编程(基础的应用最广泛的语言:C/C++)必须得很好,微电子(数字电...

  • 回答 28

    迭代器与生成器的区别:(1)生成器:生成器本质上就是一个函数,它记住了上一次返回时在函数体中的位置。对生成器函数的第二次(或第n次)调用,跳转到函数上一次挂起的位置。而且记录了程序执行的上下文。生成器不仅记住了它的数据状态,生成器还记住了程序...

  • 回答 9

    python中title( )属于python中字符串函数,返回’标题化‘的字符串,就是单词的开头为大写,其余为小写

  • 回答 6

    第一种解释:代码中的cnt是count的简称,一种电脑计算机内部的数学函数的名字,在Excel办公软件中计算参数列表中的数字项的个数;在数据库( sq| server或者access )中可以用来统计符合条件的数据条数。函数COUNT在计数时,将把数值型的数字计算进去;但是...

  • 回答 1

    head是方法,所以需要取小括号,即dataset.head()显示的则是前5行。data[:, :-1]和data[:, -1]。另外,如果想通过位置取数据,请使用iloc,即dataset.iloc[:, :-1]和dataset.iloc[:, -1],前者表示的是取所有行,但不包括最后一列的数据,结果是个DataFrame。...

  • Python入门简单吗2021-09-23 13:21
    回答 45

    挺简单的,其实课程内容没有我们想象的那么难、像我之前同学,完全零基础,培训了半年,直接出来就工作了,人家还在北京大公司上班,一个月15k,实力老厉害了

  • 回答 4

    Python针对众多的类型,提供了众多的内建函数来处理(内建是相对于导入import来说的,后面学习到包package时,将会介绍),这些内建函数功用在于其往往可对多种类型对象进行类似的操作,即多种类型对象的共有的操作;如果某种操作只对特殊的某一类对象可行,Pyt...

  • 回答 8

     相当于 ... 这里不是注释

  • 回答 4

    还有FIXME

  • 回答 3

    python的两个库:xlrd和xlutils。 xlrd打开excel,但是打开的excel并不能直接写入数据,需要用xlutils主要是复制一份出来,实现后续的写入功能。

  • 回答 8

    单行注释:Python中的单行注释一般是以#开头的,#右边的文字都会被当做解释说明的内容,不会被当做执行的程序。为了保证代码的可读性,一般会在#后面加一两个空格然后在编写解释内容。示例:#  单行注释print(hello world)注释可以放在代码上面也可以放在代...

  • 回答 2

    主要是按行读取,然后就是写出判断逻辑来勘测行是否为注视行,空行,编码行其他的:import linecachefile=open(&#39;3_2.txt&#39;,&#39;r&#39;)linecount=len(file.readlines())linecache.getline(&#39;3_2.txt&#39;,linecount)这样做的过程中发现一个问题,...

  • 回答 4

    或许是里面有没被注释的代码

  • 回答 26

    自学的话要看个人情况,可以先在B站找一下视频看一下

没有解决我的问题,去提问