楼主: 时光人
3523 17

[网帖精选] 超过100个具有挑战性的Python编程练习|可下载 [推广有奖]

  • 3关注
  • 34粉丝

院士

23%

还不是VIP/贵宾

-

威望
1
论坛币
26907 个
通用积分
428.9260
学术水平
95 点
热心指数
109 点
信用等级
91 点
经验
39960 点
帖子
1629
精华
3
在线时间
579 小时
注册时间
2019-2-25
最后登录
2023-4-26

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
下载链接:http://edu.cda.cn/group/19/thread/164
1.等级说明
等级说明
1级初学者是指刚刚参加Python入门课程的人。他可以使用1或2个Python类或函数解决一些问题。通常,答案可以直接在教科书中找到。
2级中级是指刚刚学习过Python,但是已经具有相对较强的编程背景的人。他应该能够解决可能涉及3或3个Python类或函数的问题。答案不能直接在教科书中找到。
3级高级。他应该使用Python通过更丰富的库函数,数据结构和算法来解决更复杂的问题。他应该使用几种Python标准软件包和高级技术来解决该问题。

2.问题模板

#----------------------------------------#

提示


3.问题

#----------------------------------------#
问题1
1级

题:
编写一个程序,查找所有可以被7整除但不是5的倍数的数字。
在2000到3200之间(均包括在内)。
所获得的数字应以逗号分隔的顺序打印在一行上。

提示:
考虑使用范围(#begin,#end)方法

解:
  1. l=[]
  2. for i in range(2000, 3201):
  3.     if (i%7==0) and (i%5!=0):
  4.         l.append(str(i))

  5. print ','.join(l)
复制代码


#----------------------------------------#

#----------------------------------------#
问题2
1级

题:
编写一个程序,可以计算给定数字的阶乘。
结果应以逗号分隔的顺序打印在一行上。
假设将以下输入提供给程序:
8
然后,输出应为:
40320

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

解:
  1. def fact(x):
  2.     if x == 0:
  3.         return 1
  4.     return x * fact(x - 1)

  5. x=int(raw_input())
  6. print fact(x)
复制代码
#----------------------------------------#

#----------------------------------------#
问题3
1级

题:
使用给定的整数n,编写程序以生成包含(i,i * i)的字典,该字典为1到n之间的整数(都包括在内)。然后程序应打印字典。
假设将以下输入提供给程序:
8
然后,输出应为:
{1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64}

提示:
如果将输入数据提供给问题,则应假定它是控制台输入。
考虑使用dict()

解:
  1. n=int(raw_input())
  2. d=dict()
  3. for i in range(1,n+1):
  4.     d[i]=i*i

  5. print d
复制代码
#----------------------------------------#

#----------------------------------------#
问题4
1级

题:
编写一个程序,该程序从控制台接受一个逗号分隔的数字序列,并生成一个列表和一个包含每个数字的元组。
假设将以下输入提供给程序:
34,67,55,33,12,98
然后,输出应为:
['34','67','55','33','12','98']
(“ 34”,“ 67”,“ 55”,“ 33”,“ 12”,“ 98”)

提示:
如果将输入数据提供给问题,则应假定它是控制台输入。
tuple()方法可以将列表转换为元组

解:
  1. values=raw_input()
  2. l=values.split(",")
  3. t=tuple(l)
  4. print l
  5. print t
复制代码
#----------------------------------------#

#----------------------------------------#
问题5
1级

题:
定义一个至少具有两个方法的类:
getString:从控制台输入获取字符串
printString:以大写形式输出字符串。
还请包括简单的测试功能以测试类方法。

提示:
使用__init__方法构造一些??参数

解:
  1. class InputOutString(object):
  2.     def __init__(self):
  3.         self.s = ""

  4.     def getString(self):
  5.         self.s = raw_input()

  6.     def printString(self):
  7.         print self.s.upper()

  8. strObj = InputOutString()
  9. strObj.getString()
  10. strObj.printString()
复制代码
#----------------------------------------#

#----------------------------------------#
问题6
2级

题:
编写一个程序,根据给定的公式计算并打印值:
Q = [(2 * C * D)/ H]的平方根
以下是C和H的固定值:
C为50。H为30。
D是变量,其值应以逗号分隔的顺序输入到程序中。

让我们假设以下逗号分隔的输入序列已赋予程序:
100,150,180
该程序的输出应为:
18,22,24

提示:
如果收到的输出为十进制格式,则应四舍五入至最接近的值(例如,如果收到的输出为26.0,则应将其打印为26)。
如果将输入数据提供给问题,则应假定它是控制台输入。

解:
  1. #!/usr/bin/env python
  2. import math
  3. c=50
  4. h=30
  5. value = []
  6. items=[x for x in raw_input().split(',')]
  7. for d in items:
  8.     value.append(str(int(round(math.sqrt(2*c*float(d)/h)))))

  9. print ','.join(value)
复制代码
#----------------------------------------#

#----------------------------------------#
问题7
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]]

提示:
注意:如果将输入数据提供给问题,则应将其假定为以逗号分隔形式的控制台输入。

解:
  1. input_str = raw_input()
  2. dimensions=[int(x) for x in input_str.split(',')]
  3. rowNum=dimensions[0]
  4. colNum=dimensions[1]
  5. multilist = [[0 for col in range(colNum)] for row in range(rowNum)]

  6. for row in range(rowNum):
  7.     for col in range(colNum):
  8.         multilist[row][col]= row*col

  9. print multilist
复制代码

问题8
2级

题:
编写一个程序,该程序接受以逗号分隔的单词序列作为输入,并在按字母顺序对它们进行排序后以逗号分隔的顺序打印这些单词。
假设将以下输入提供给程序:
没有,你好,袋,世界
然后,输出应为:
袋,你好,没有,世界

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

解:
  1. items=[x for x in raw_input().split(',')]
  2. items.sort()
  3. print ','.join(items)
复制代码
#----------------------------------------#

#----------------------------------------#
问题9
2级

问题:
编写一个接受行序列作为输入的程序,并在将句子中的所有字符都大写之后打印行。
假设将以下输入提供给程序:
你好,世界
实践使完美
然后,输出应为:
你好,世界
实践完美

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

解:
  1. lines = []
  2. while True:
  3.     s = raw_input()
  4.     if s:
  5.         lines.append(s.upper())
  6.     else:
  7.         break;

  8. for sentence in lines:
  9.     print sentence
复制代码

问题10
2级

题:
编写一个程序,该程序接受一系列由空格分隔的单词作为输入,并在删除所有重复的单词并将其按字母数字顺序排序后打印这些单词。
假设将以下输入提供给程序:
你好世界,实践使世界变得完美,你好世界
然后,输出应为:
再次,你好使完美实践世界

提示:
如果将输入数据提供给问题,则应假定它是控制台输入。
我们使用set容器自动删除重复的数据,然后使用sorted()对数据进行排序。

解:
  1. s = raw_input()
  2. words = [word for word in s.split(" ")]
  3. print " ".join(sorted(list(set(words))))
复制代码
问题11
2级

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

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

解:
  1. value = []
  2. items=[x for x in raw_input().split(',')]
  3. for p in items:
  4.     intp = int(p, 2)
  5.     if not intp%5:
  6.         value.append(p)

  7. print ','.join(value)
复制代码
#----------------------------------------#

#----------------------------------------#
问题12
2级

题:
编写一个程序,它将找到介于1000和3000之间的所有此类数字(均包括在内),以使该数字的每个数字均为偶数。
所获得的数字应以逗号分隔的顺序打印在一行上。

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

解:
  1. values = []
  2. for i in range(1000, 3001):
  3.     s = str(i)
  4.     if (int(s[0])%2==0) and (int(s[1])%2==0) and (int(s[2])%2==0) and (int(s[3])%2==0):
  5.         values.append(s)
  6. print ",".join(values)
复制代码
#----------------------------------------#

#----------------------------------------#
问题13
2级

题:
编写一个接受句子并计算字母和数字数量的程序。
假设将以下输入提供给程序:
你好,世界!123
然后,输出应为:
字母10
数字3

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

解:
  1. s = raw_input()
  2. d={"DIGITS":0, "LETTERS":0}
  3. for c in s:
  4.     if c.isdigit():
  5.         d["DIGITS"]+=1
  6.     elif c.isalpha():
  7.         d["LETTERS"]+=1
  8.     else:
  9.         pass
  10. print "LETTERS", d["LETTERS"]
  11. print "DIGITS", d["DIGITS"]
复制代码
#----------------------------------------#

#----------------------------------------#
问题14
2级

题:
编写一个接受句子的程序,并计算大写字母和小写字母的数量。
假设将以下输入提供给程序:
你好,世界!
然后,输出应为:
大写1
小写9

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

解:
  1. s = raw_input()
  2. d={"UPPER CASE":0, "LOWER CASE":0}
  3. for c in s:
  4.     if c.isupper():
  5.         d["UPPER CASE"]+=1
  6.     elif c.islower():
  7.         d["LOWER CASE"]+=1
  8.     else:
  9.         pass
  10. print "UPPER CASE", d["UPPER CASE"]
  11. print "LOWER CASE", d["LOWER CASE"]
复制代码
问题15
2级

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

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

解:
  1. a = raw_input()
  2. n1 = int( "%s" % a )
  3. n2 = int( "%s%s" % (a,a) )
  4. n3 = int( "%s%s%s" % (a,a,a) )
  5. n4 = int( "%s%s%s%s" % (a,a,a,a) )
  6. print n1+n2+n3+n4
复制代码

问题16
2级

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

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

解:
  1. values = raw_input()
  2. numbers = [x for x in values.split(",") if int(x)%2!=0]
  3. print ",".join(numbers)
复制代码
问题17
2级

题:
编写一个程序,该程序根据控制台输入的交易日志来计算银行帐户的净额。事务日志格式如下所示:
D 100
W 200

D表示存款,W表示提款。
假设将以下输入提供给程序:
D 300
D 300
W 200
D 100
然后,输出应为:
500

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

解:
  1. netAmount = 0
  2. while True:
  3.     s = raw_input()
  4.     if not s:
  5.         break
  6.     values = s.split(" ")
  7.     operation = values[0]
  8.     amount = int(values[1])
  9.     if operation=="D":
  10.         netAmount+=amount
  11.     elif operation=="W":
  12.         netAmount-=amount
  13.     else:
  14.         pass
  15. print netAmount
复制代码

问题18
3级

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

如果输入以下密码作为程序输入:
ABd1234 @ 1,a F1#,2w3E *,2We3345
然后,程序的输出应为:
ABd1234 @ 1

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

解决方案:
  1. import re
  2. value = []
  3. items=[x for x in raw_input().split(',')]
  4. for p in items:
  5.     if len(p)<6 or len(p)>12:
  6.         continue
  7.     else:
  8.         pass
  9.     if not re.search("[a-z]",p):
  10.         continue
  11.     elif not re.search("[0-9]",p):
  12.         continue
  13.     elif not re.search("[A-Z]",p):
  14.         continue
  15.     elif not re.search("[$#@]",p):
  16.         continue
  17.     elif re.search("\s",p):
  18.         continue
  19.     else:
  20.         pass
  21.     value.append(p)
  22. print ",".join(value)
复制代码

问题19
3级

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

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

解决方案:
  1. from operator import itemgetter, attrgetter

  2. l = []
  3. while True:
  4.     s = raw_input()
  5.     if not s:
  6.         break
  7.     l.append(tuple(s.split(",")))

  8. print sorted(l, key=itemgetter(0,1,2))
复制代码

问题20
3级

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

提示:
考虑使用量

解:
  1. def putNumbers(n):
  2.     i = 0
  3.     while i<n:
  4.         j=i
  5.         i=i+1
  6.         if j%7==0:
  7.             yield j

  8. for i in reverse(100):
  9.     print i
复制代码

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Python编程 python 挑战性 可下载 Dimensions

回帖推荐

layamala 发表于6楼  查看完整内容

整到一个文档里不是更好吗?
沙发
layamala 发表于 2020-6-12 06:52:36 |只看作者 |坛友微信交流群
整到一个文档里不是更好吗?

使用道具

藤椅
jiangqing001 发表于 2020-6-12 08:08:39 |只看作者 |坛友微信交流群
赞一下~~~

使用道具

板凳
时光人 学生认证  发表于 2020-6-12 09:08:46 |只看作者 |坛友微信交流群
layamala 发表于 2020-6-12 06:52
整到一个文档里不是更好吗?
有道理,好像没传上去
下载链接:http://edu.cda.cn/group/19/thread/164

使用道具

报纸
时光人 学生认证  发表于 2020-6-12 09:10:32 |只看作者 |坛友微信交流群
Python练习100题.txt (41.43 KB)

使用道具

地板
注了个册 在职认证  发表于 2020-6-12 16:12:24 |只看作者 |坛友微信交流群
顶一下,感谢分享!

使用道具

7
瑟瑟谷中风 学生认证  发表于 2020-6-12 18:43:01 |只看作者 |坛友微信交流群
顶顶顶

使用道具

8
johnstudio 企业认证  发表于 2020-6-13 03:01:50 |只看作者 |坛友微信交流群
多谢分享啊~ 非常实用~!

使用道具

9
xiudf 在职认证  发表于 2020-6-13 09:34:23 |只看作者 |坛友微信交流群

使用道具

10
sq2008 发表于 2020-6-13 12:10:28 |只看作者 |坛友微信交流群
谢谢发表分享!

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-27 23:33