100+Python编程题给你练(附答案)

article/2025/8/22 22:39:13

 

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

Github 地址:Python-programming-exercises

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

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

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

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

前 25 题中,Q1~5、22~25 都是 Level 1 的难度,Q6~17 为 Level 2,Q18~22 为 Level 3。

100+Python编程题

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

解决方案:

l=[]
for i in range(2000, 3201):if (i%7==0) and (i%5!=0):l.append(str(i))print (','.join(l))

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

def fact(x):if x == 0:return 1return x * fact(x - 1)
print('请输入一个数字:')
x=int(input())
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类型()
解决方案:

print('请输入一个数字:')
n=int(input())
d=dict()
for i in range(1,n+1):d[i]=i*iprint(d)

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

import re
print('请输入一组数字:')
values=input()
l=values.split(",")
k=re.findall(r'[0-9]+',values)
t=tuple(k)
print (k)
print (t)

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

class InputOutString(object):def __init__(self):self.s = ""def getString(self):print('请输入字符串:')self.s = input()def printString(self):print (self.s.upper())strObj = InputOutString()
strObj.getString()
strObj.printString()

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

#!/usr/bin/env python
import math
c=50
h=30
value = []
print('请输入一组数字:')
items=[x for x in input().split(',')]
for d in items:value.append(str(int(round(math.sqrt(2*c*float(d)/h)))))print (','.join(value))

题7
2级
问题:编写一个程序,以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) for x in input_str.split(',')]
rowNum=dimensions[0]
colNum=dimensions[1]
multilist = [[0 for col in range(colNum)] for row in range(rowNum)]for row in range(rowNum):for col in range(colNum):multilist[row][col]= row*colprint (multilist)

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

items=[x for x in input().split(',')]
items.sort()
print (','.join(items))

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

lines = []
while True:s = input()if s:lines.append(s.upper())else:break;for sentence in lines:print(sentence)

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

print('请输入一组字符串:')
s = input()
words = [word for word in s.split(" ")]
print (" ".join(sorted(list(set(words)))))

题11
2级

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

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

解:

value = []
print('请输入逗号分隔的4位二进制数:')
items=[x for x in input().split(',')]
for p in items:intp = int(p, 2)# print(intp)if not intp%5:value.append(p)print (','.join(value))

题12
2级

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

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

values = []
for i in range(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))

题13
2级

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

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

解:

print('请输入:')
s = input()
d={"DIGITS":0, "LETTERS":0}
for c in s:if c.isdigit():d["DIGITS"]+=1elif c.isalpha():d["LETTERS"]+=1else:pass
print ("LETTERS", d["LETTERS"])
print ("DIGITS", d["DIGITS"])

题14
2级

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

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

解:

print('请输入:')
s = input()
d={"UPPER CASE":0, "LOWER CASE":0}
for c in s:if c.isupper():d["UPPER CASE"]+=1elif c.islower():d["LOWER CASE"]+=1else:pass
print ("UPPER CASE", d["UPPER CASE"])
print ("LOWER CASE", d["LOWER CASE"])

题15
2级

题:编写一个程序,计算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)

题16
2级

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

解:

print("输入:")
values = input()
numbers = [x for x in values.split(",") if int(x)%2!=0]
print (",".join(numbers))

题17
2级

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

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

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

解:

netAmount = 0
while True:print("请输入:")s = input()if not s:breakvalues = s.split(" ")operation = values[0]amount = int(values[1])if operation=="D":netAmount+=amountelif operation=="W":netAmount-=amountelse:pass
print (netAmount)

题18
3级

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

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

ABd1234 @ 1

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

解:

import re
value = []
print("请输入:")
items=[x for x in input().split(',')]
for p in items:if len(p)<6 or len(p)>12:continueelse:passif not re.search("[a-z]",p):continueelif not re.search("[0-9]",p):continueelif not re.search("[A-Z]",p):continueelif not re.search("[$#@]",p):continueelif re.search("\s",p):continueelse:passvalue.append(p)
print (",".join(value))

题19
3级

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

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

解:

from operator import itemgetter, attrgetterl = []
print("请输入:")
while True:s = input()if not s:breakl.append(tuple(s.split(",")))print (sorted(l, key=itemgetter(0,1,2)))

题20
3级

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

提示:考虑使用yield。

解:

def putNumbers(n):i = 0while i<n:j=ii=i+1if j%7==0:yield jfor i in putNumbers(100):print (i)

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

import math
pos = [0,0]
print("请输入:")
while True:s = input()if not s:breakmovement = s.split(" ")direction = movement[0]steps = int(movement[1])if direction=="UP":pos[0]+=stepselif direction=="DOWN":pos[0]-=stepselif direction=="LEFT":pos[1]-=stepselif direction=="RIGHT":pos[1]+=stepselse:passprint (int(round(math.sqrt(pos[1]**2+pos[0]**2))))

题22
3级

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

New to Python or choosing between Python 2 and Python 3? Read Python 2 or Python 3.

然后,输出应该是:

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

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

freq = {}   # frequency of words in text
print("请输入:")
line = input()
for word in line.split():freq[word] = freq.get(word,0)+1
words = sorted(freq.keys())  #按key值对字典排序for w in words:print ("%s:%d" % (w,freq[w]))

题23
1级

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

提示: 使用**运算符

def square(num):return num ** 2print (square(2))
print (square(3))

题24
1级

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

print(abs.__doc__)
print(int.__doc__)
print(input.__doc__)def square(num):'''Return the square value of the input number.The input number must be integer.'''return num ** 2print(square(2))
print(square.__doc__)

题25
1级

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

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

class Person:# Define the class parameter "name"name = "Person"def __init__(self, name=None):# self.name is the instance parameterself.name = namejeffrey = Person("Jeffrey")
print("%s name is %s" % (Person.name, jeffrey.name))nico = Person()
nico.name = "Nico"
print("%s name is %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

未完待续……


http://chatgpt.dhexx.cn/article/LohGlPVB.shtml

相关文章

c语言关于指针的编程题,C语言指针编程题

当前编程题&#xff1a;指针练习---字符串拼接 后一道编程题>>> 1. 【问题描述】用字符指针实现函数strcat(s&#xff0c;t)&#xff0c;将字符串t复制到字符串s的末端&#xff0c;并且返回字符串s的首地址&#xff0c;并编写主程序。 【输入形式】输入两个字符串 【输…

安卓编程题

<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:paddingB…

循环 — 你必须要会的十五道编程题

目录 前言&#xff1a; 本讲习题来自谭老先生的《C程序设计》 对于这些题目进行了细致的讲解&#xff0c; 以求带你掌握循环的知识。 ★博文转载请注明出处。 1. 请补充例5. 7程序,分别统计当“fabs(t)>…

50道基础编程题

1、输入3个数&#xff0c;求最大值 int main() { int a,b,c,m; cin>>a>>b>>c; ma; if(b>m) mb; if(c>m) mc; cout<<m; } 2、编程序&#xff0c;求方程ax2bxc0的根 #include <iostream> #include<algorithm> #include<cmath&g…

DSSD(Deconvolutional Single Shot Detector)

本文作者将当前表现最好的分类器Residual-101和SSD进行了结合&#xff0c;并为SSDResidual-101添加了额外的降卷积层以引入大尺度的context用于提高目标检测的精度&#xff0c;尤其是小目标。DSSD又叫做deconvolutional single shot detector。虽然这两种贡献容易在高层上表达&…

DSSD学习笔记

本专栏将从论文的角度解读一下CV方向的一些经典神经网络模型及其贡献与意义&#xff0c;以期加深自己的印象&#xff0c;后续可以随时翻看并且学习其中好的tricks。这一期介绍基于SSD改进的DSSD。 论文相关信息 论文全名为《DSSD : Deconvolutional Single Shot Detector》&a…

SSD系列(SSD、DSSD、FSSD 、RefineDet)

SSD:SingleShotMultiBoxDetector 简介 one-stage、基于回归的目标检测&#xff0c;74.3mAP、59FPS &#xff08; on VOC2007 test &#xff09;网络结构 SSD 300中输入图像的大小是300x300&#xff0c;特征提取部分使用了VGG16的卷积层&#xff0c;并将VGG16的两个全连接层转换…

DL之DSSD:DSSD算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略

DL之DSSD&#xff1a;DSSD算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略 相关文章DL之DSSD&#xff1a;DSSD算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略DL之DSSD&#xff1a;DSSD算法的架构详解 DSSD算法的简介(论文介绍) DSSD&#xff0…

SDD和SDT

语法制导语法分析语义翻译&#xff1a; 语义翻译语义分析中间代码生成&#xff1b; 一&#xff1a;SDD: 依赖&#xff1a;A->B&#xff0c;表明B依赖A,A决定B。lexeme是虚属性。

SSD目标检测算法改进DSSD(反卷积)

论文&#xff1a;DSSD : Deconvolutional Single Shot Detector 论文地址&#xff1a;https://arxiv.org/abs/1701.06659 代码&#xff1a;https://github.com/chengyangfu/caffe/tree/dssd DSSD是2017年的CVPR&#xff0c;二作就是SSD的一作Wei Liu。另外值得一提的是&#xf…

SSD、DSSD算法详解

SSD(Single Shot MultiBox Detector) 特点:多尺度特征图用于检测;采用了先验框,,SDD backbone采用VGG-16 SSD和YOLO一样都是采用一个CNN网络进行检测,但是采用了多尺度的特征图,如下图所示: 采用多尺度特征图用于检测 采用步长stride=2的卷积或者pool来降低特征图…

sds

双向链表(adlist.h/adlist.c) 链表(list)是Redis中最基本的数据结构,由adlist.h和adlist.c定义。 数据结构 typedef struct listNode {//指向前一个节点struct listNode *prev;//指向后一个节点struct listNode *next;//值void *value; } listNode;listNode是最基本的结构,表示…

xSSD: DSSD,FSSD,ESSD,MDSSD,fireSSD

1 DSSD title :DSSD : Deconvolutional Single Shot Detector conf & anthor: arXiv, Cheng-Yang Fu arXiv:https://arxiv.org/abs/1701.06659 intro:Deconvolutional 主要内容&#xff1a; DSSD使用ResNet-101代替VGG作为主干网络&#xff0c;在‘SSD layers‘后面添加了…

redis SDS介绍

Redis面试中经常被问到&#xff0c;Redis效率为什么这么快&#xff0c;很多同学往往回答&#xff1a; ① Redis基于内存操作② Redis是单线程的&#xff0c;采用了IO多路复用技术③ Redis未使用C语言字符串&#xff0c;使用了SDS字符串然而&#xff0c;很少有人能说清楚SDS字符…

DSSD: Deconvolutional Single Shot Detector 论文笔记

论文地址&#xff1a;DSSD : Deconvolutional Single Shot Detector 项目地址&#xff1a;Github 概述 这篇论文应该算是SSD: Single Shot MultiBox Detector的第一个改进分支&#xff0c;作者是Cheng-Yang Fu&#xff0c; 我们熟知的Wei Liu大神在这里面是第二作者&#xf…

DSSD(Deconvolutional Single Shot Detector)算法理解

论文地址&#xff1a;https://arxiv.org/abs/1701.06659 Github 源码&#xff08;caffe版&#xff09;&#xff1a;https://github.com/chengyangfu/caffe/tree/dssd 1、文章概述 DSSD(Deconvolutional Single Shot Detector)是SSD算法改进分支中最为著名的一个&#xff0c;SS…

DSSD : Deconvolutional Single Shot Detector

参考 DSSD : Deconvolutional Single Shot Detector - 云社区 - 腾讯云 目录 一、简介 二、相关工作 三、反卷积的单阶段检测器DSSD 3.1、SSD 3.2、用VGG代替Residual-101 预测模型 反卷积SSD 反卷积模块 训练 四、实验 基本网络 PASCAL VOC 2007 在VOC2007上的消…

DDS 介绍

​DDS&#xff0c;全称 Data Distribution Service (数据分发服务)&#xff0c;由对象管理组(OMG)发布和维护&#xff0c;是一个中间件协议和API标准&#xff0c;采用发布/订阅体系架构&#xff0c;强调以数据为中心&#xff0c;提供丰富的QoS服务质量策略&#xff0c;以保障数…

目标检测系列:SSD系列SSD、FSSD、DSSD、DSOD

SSDDSSDFSSDDSOD SSD 动机 目前目标检测的一些算法包括基于深度学习的&#xff0c;都是先假定一些候选框&#xff0c;接着对候选框内容进行特征提取再分类&#xff0c;然后再对边框的位置进行修正这一系列的计算&#xff0c;最典型的例如Faster RCNN&#xff0c;虽然准确&…

计算机保密dss是啥,什么是DSS?

什么是DSS 上线时间&#xff1a;2020年9月4日 以下引用猪弟写的设计文档&#xff1a; DFS的存款系统: DSS (DFS Saving System) 原名DSR&#xff0c;你也可以把它称作&#xff0c;DFS的银行或DFS的余额宝。 它是专门为DFS量身定做的DFS币本位无风险保障性收入系统。 特征&#…