声明:写博客的目的主要是记录自己的学习经历,并监督自己学习,本来是想自己把github上面翻译做的,然后发现已经有人翻译了,我就跟着他做了,有的程序也是参考博主的,见参考文献。
题目源自github Python-programming-exercises
参考博客:100+Python编程题给你练(附答案)

文章目录

  • 第一题:循环
  • 第二题:阶乘(递归)
  • 第三题:字典dict
  • 第四题:split,tuple
  • 第五题:类
  • 第六题:类型转换
  • 第七题:二维数组
  • 第八题:sort
  • 第九题:upper
  • 第十题:set
  • 第十一题:进制
  • 第十二题:
  • 第十三题:isdigit,isalpha
  • 第十四题:isupper,islower
  • 第十五题:
  • 第十六题:
  • 第十七题:
  • 第十八题:
  • 第十九题:itemgetter
  • 第二十题:yield
  • 第二十一题:
  • 第二十二题:字典,难
  • 第二十三题:**
  • 第二十四题:__doc__
  • 第二十五题:类__init__
  • 第二十六题:(这里开始很简单)
  • 第二十七题:
  • 第二十八题:
  • 第二十九题:
  • 第三十题:
  • 第三十一题:
  • 第三十二题:
  • 第三十三题:

第一题:循环

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

l=[]
for i in range(2000,3201):  #注意这里需要3201而不是3200if (i%7==0) & (i%5!=0):l.append(str(i))   #str() 函数将对象转化为适于人阅读的形式。
print (','.join(l))    #join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。

第二题:阶乘(递归)

题目: 编写一个可以计算给定数的阶乘的程序。
假设向程序提供以下输入:8;则输出为:40320
提示: 在为问题提供输入数据的情况下,应该假设它是控制台输入。考虑递归思想。

def fact(x):if x==0:return 1return x*fact(x-1)
print('请输入一个数字')
x=int(input())
print(fact(x))

第三题:字典dict

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

def fact(x):d=dict()for i in range(1,x+1):d[i]=i*ireturn d
print('请输入一个整数')
x=int(input())
print(fact(x))

第四题:split,tuple

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

print('请输入数字序列')
values=input()
l=values.split(",") #split():就是将一个字符串分隔成多个字符串组成的列表
t=tuple(l)
print (l)
print (t)

第五题:类

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

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

这里本来不想调用函数的,用for循环实现,但是str类型减去数字会报错,有大佬知道怎么操作吗?

第六题:类型转换

问题:
编写一个程序,根据给定的公式计算并打印值:Q = Square root of [(2 * C * D)/H]
C和H的固定值:C is 50. H is 30.
它的值应该以逗号分隔的序列输入到程序中。
Example:输入 100,150,180 输出 18,22,24

提示:
如果接收到的输出是小数,则应四舍五入到其最近的值(例如,如果接收到的输出是26.0,则应打印为26)。在为问题提供输入数据的情况下,应该假设它是控制台输入。

import math
print('请输入D的值,并以逗号分割')
DS=input()
DSS=DS.split(",")#字符串转列表
C=50
H=30
Q=[]
for D in DSS:#round四舍五入#str将数字转换为字符串Q.append(str(round(math.sqrt(2*C*int(D)/H))))
print (','.join(Q))#列表转字符串

第七题:二维数组

问题:
编写一个程序,用两个数字X,Y作为输入,生成一个二维数组。数组的第i行和第j列中的元素值应该是i*j。
Note: i=0,1, …, X-1; j=0,1,…, ­Y-1.
Example
输入: 3,5
输出: [[0, 0, 0, 0, 0], [0, 1, 2, 3, 4], [0, 2, 4, 6, 8]]
提示:
如果要为问题提供输入数据,应该假设它是一个控制台输入,以逗号分隔。

input_str = raw_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

升级版

print('请输入两个数字,并以逗号分割')
DATA_XY=input()
XY=DATA_XY.split(",")#字符串转列表
X=int(XY[0])
Y=int(XY[1])
mul=[[]]
mul = [[x*y for y in range(Y)] for x in range(X)]
print(mul)

第八题:sort

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

print('请输入单词序列,以逗号为分隔')
stringinput=input()
listinput=stringinput.split(",")
listinput.sort()
print(','.join(listinput))

第九题:upper

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

lines=[]
while True:print('请输入一句话')ins=input()if ins:lines.append(ins.upper())else:break
[print(line) for line in lines]

第十题:set

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

print('请输入以空格为分割的句子')
ju=input()
juu=set(ju.split(" "))
print(juu)
ju_list=list(juu)
print(ju_list)
ju_list.sort()
print(ju_list)
print(','.join(ju_list))

这里请注意y.sort()和sorted(y)的区别

第十一题:进制

问题: 编写一个程序,接受一系列逗号分隔的4位二进制数作为输入,然后检查它们是否可被5整除。 可被5整除的数字将以逗号分隔的顺序打印。
例:
输入 :0100,0011,1010,1001
那么输出应该是:1010
提示: 如果输入数据被提供给问题,则应该假定它是控制台输入。
整除是//哦,这里提供两种参考代码

print('请输入逗号分隔的4位二进制数')
data=input()
out=[]
for a in data.split(","):b=1*int(a)%10+2*(int(a)//10)%10+4*(int(a)//100)%10+8*(int(a)//1000)if b%5==0:out.append(a)
print(','.join(out))
print('请输入逗号分隔的4位二进制数')
data=input()
out=[]
for a in data.split(","):b=int(a,2)#直接转换进制if b%5==0:out.append(a)
print(','.join(out))

第十二题:

题目: 编写一个程序,它将找到1000到3000之间的所有,每一位都是偶数的数。获得的数字应以逗号分隔的顺序打印在一行上。

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

lis=[]
for i in range(1000,3001):if ((i%10)%2==0)&(((i//10)%10)%2==0)&(((i//100)%10)%2==0)&(((i//1000)%10)%2==0):lis.append(str(i))
print(','.join(lis))

这里记得i本来是数字,需要转换成字符串才能使用join

第十三题:isdigit,isalpha

题目:
编写一个接受句子并计算字母和数字的程序。
假设为程序提供了以下输入:Hello world! 123
然后,输出应该是:
字母10
数字3
提示: 如果输入数据被提供给问题,则应该假定它是控制台输入。

print('请输入句子')
s = input()
d={"字母":0, "数字":0}
for c in s:if c.isdigit():#判断是否为数字d["数字"]+=1elif c.isalpha():#判断是否为字母d["字母"]+=1else:pass
print("字母", d["字母"])
print("数字",  d["数字"])

第十四题:isupper,islower

题目: 编写一个接受句子的程序,并计算大写字母和小写字母的数量。
假设为程序提供了以下输入: Hello world!
然后,输出应该是:
UPPER CASE 1
LOWER CASE 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"])

第十五题:

题目: 编写一个程序,计算a + aa + aaa + aaaa的值,给定的数字作为a的值。
输入:9
输出 11106

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

print('请输入a的值')
b=input()
a=int(b)
out=a*4+a*10*3+a*100*2+a*1000
print(out)

第十六题:

题目: 使用列表推导来对列表中的每个奇数。 该列表由一系列逗号分隔的数字输入。
输入:1,2,3,4,5,6,7,8,9
输出:1,3,5,7,9
给出两种方法

print('请输入数字序列,以逗号为分割')
s=input()
ss=s.split(',')
lis=[]
for i in ss:if int(i)%2==1:lis.append(i)
print(','.join(lis))
print("输入:")
values = input()
numbers = [x for x in values.split(",") if int(x)%2!=0]
print (",".join(numbers))

第十七题:

题目: 编写一个程序,根据控制台输入的事务日志计算银行帐户的净金额。
事务日志格式如下所示:D表示存款,而W表示提款。
D 100
W 200
假设为程序提供了以下输入:
D 300
D 300
W 200
D 100
然后,输出应该是:
500

net=0
while True:print('请输入存取款操作')s=input()if not s:breakvalues=s.split(' ')if values[0]=='D':net+=int(values[1])elif values[0]=='W':net-= int(values[1])
print('存款为',net)

第十八题:

题目: 网站要求用户输入用户名和密码进行注册。编写程序以检查用户输入的密码的有效性。
以下是检查密码的标准:

  1. [a-z]之间至少有1个字母
  2. [0-9]之间至少有1个数字
  3. [A-Z]之间至少有一个字母
  4. [$#@]中至少有1个字符
  5. 最短交易密码长度:6
  6. 交易密码的最大长度:12

您的程序应接受一系列逗号分隔的密码,并将根据上述标准进行检查。将打印符合条件的密码,每个密码用逗号分隔。
输入:ABd1234@1,a F1#,2w3E*,2We3345
输出:ABd1234 @ 1

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

import re
print('请输入一系列以逗号分隔的密码')
s=input()
ss=s.split(',')
value=[]
for i in ss:if (len(i)<6)|(len(i)>12):continueif not re.search("[a-z]",i):continueif not re.search("[0-9]",i):continueif not re.search("[A-Z]",i):continueif not re.search("[$#@]",i):continuevalue.append(i)
print(','.join(value))

第十九题:itemgetter

题目: 您需要编写一个程序,按升序对(name > age > score)tuples 进行排序,其中name是string,age和score是数字。 tuples由控制台输入。 排序标准是:
1:根据name 排序;
2:然后根据age 排序;
3:然后按score排序。
优先级是name > age > score。
如果给出以下元组作为程序的输入:
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, attrgetter
l=[]
while True:print('请输入学生姓名,年龄,成绩')s=input()if not s:breakl.append(tuple(s.split(',')))
print (sorted(l, key=itemgetter(0,1,2)))

第二十题:yield

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

在做这道题的之前先理解一下yield的使用方法:

def foo():print("starting...")while True:res = yield 4print("res:",res)
g = foo()
print(next(g))
print("*"*20)
print(next(g))

我直接解释代码运行顺序,相当于代码单步调试:

  1. 程序开始执行以后,因为foo函数中有yield关键字,所以foo函数并不会真的执行,而是先得到一个生成器g(相当于一个对象)
  2. 直到调用next方法,foo函数正式开始执行,先执行foo函数中的print方法,然后进入while循环
  3. 程序遇到yield关键字,然后把yield想想成return,return了一个4之后,程序停止,并没有执行赋值给res操作,此时next(g)语句执行完成,所以输出的前两行(第一个是while上面的print的结果,第二个是return出的结果)是执行print(next(g))的结果,
  4. 程序执行print("*"20),输出20个
  5. 又开始执行下面的print(next(g)),这个时候和上面那个差不多,不过不同的是,这个时候是从刚才那个next程序停止的地方开始执行的,也就是要执行res的赋值操作,这时候要注意,这个时候赋值操作的右边是没有值的(因为刚才那个是return出去了,并没有给赋值操作的左边传参数),所以这个时候res赋值是None,所以接着下面的输出就是res:None,
  6. 程序会继续在while里执行,又一次碰到yield,这个时候同样return 出4,然后程序停止,print函数输出的4就是这次return出的4.

答案:

def foo(n):for i in range(n+1):if i%7==0:res=yield i
for n in foo(100):print(n)

第二十一题:

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

import math
x=0
y=0
while True:print('请输入机器人运动操作')s=input()if not s:breakvalues=s.split(' ')if values[0]=='UP':y+=int(values[1])elif values[0]=='DOWN':y-=int(values[1])elif values[0] == 'LETF':x += int(values[1])elif values[0]=='RIGHT':x-=int(values[1])
dis=math.sqrt(x*x+y*y)
print(round(dis))

第二十二题:字典,难

题目: 编写一个程序来计算输入中单词的频率。 按字母顺序对键进行排序后输出。
输入:
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]))

第二十三题:**

题目: 写一个可以计算数字平方值的方法
提示: 使用**运算符

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

第二十四题:doc

题目: 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__)

第二十五题:类__init__

题目: 定义一个类,它具有类参数并具有相同的实例参数。
提示: 定义一个实例参数,需要在__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))

第二十六题:(这里开始很简单)

问题: 定义一个可以计算两个数之和的函数。
提示: 用两个数字作为参数定义函数。您可以计算函数中的和并返回值。

第二十七题:

问题:定义一个可以将整数转换为字符串并在控制台中打印的函数。
提示: 使用str()将数字转换为字符串。

第二十八题:

问题: 定义一个可以接受两个字符串作为输入的函数,并在控制台中以最大长度打印字符串。如果两个字符串的长度相同,则函数应该逐行打印所有l个字符串。
提示: 使用len()函数获取字符串的长度

第二十九题:

问题: 定义一个可以接受整数作为输入的函数,如果数字是偶数,则打印“它是偶数”,否则打印“它是奇数”。
提示: 使用%运算符检查数字是偶数还是奇数。

第三十题:

问题: 定义一个函数,它可以打印一个字典,其中的key是1到3之间的数字(都包括在内),值是key的平方。

第三十一题:

问题: 定义一个函数,它可以打印一个字典,其中的key是1到20之间的数字(都包括在内),值是key的平方。

第三十二题:

问题: 定义一个函数,它可以生成一个列表,其中的值是1到20之间的数字的平方(两者都包括在内)。然后函数需要打印列表中最后5个元素。

第三十三题:

问题: 定义一个函数,它可以生成一个列表,其中的值是1到20之间的数字的平方(两者都包括在内)。然后函数需要打印列表中除前5个元素之外的所有值。

未完待续……

python基础——100多个Python挑战性编程练习相关推荐

  1. 什么是python基础教程-最好的Python入门教程是?

    Python教程领到手,学习不用愁!领! 作为一门编程语言,Python是属于入门比较简单的.所以身边不少人都选择了自学Python,而且网上相关资料也有很多,知识兔分享大量的Python教学课程,基 ...

  2. python基础教程是什么-python基础教程都有什么?

    分享一下传智播客的python基础教程 第一阶段 Python核心编程 可掌握的核心能力 1.掌握Python基础语法,具备基础的编程能力; 2.建立起编程思维以及面向对象程序设计思想.解决的现实问题 ...

  3. python菜鸟基础教程-python基础菜鸟教程,Python的基础语法

    原标题:python基础菜鸟教程,Python的基础语法 什么是Python?Python是一门简单直观的编程语言,并且目前是开源的,可以方便任何人使用. Python的开发哲学:用一种方法,最好是只 ...

  4. Python基础班---第一部分(基础)---Python基础知识---第一个Python程序

    01. 第一个 HelloPython 程序 1.1 Python 源程序的基本概念 Python 源程序就是一个特殊格式的文本文件,可以使用任意文本编辑软件做 Python 的开发 Python 程 ...

  5. python基础教程菜鸟教程-python基础菜鸟教程,Python的基础语法

    原标题:python基础菜鸟教程,Python的基础语法 什么是Python?Python是一门简单直观的编程语言,并且目前是开源的,可以方便任何人使用. Python的开发哲学:用一种方法,最好是只 ...

  6. Python基础教程:用Python怎么telnet到网络设备

    Python基础教程:用Python怎么telnet到网络设备 0.前言 Telnet协议属于TCP/IP协议族里的一种,对于我们这些网络攻城狮来说,再熟悉不过了,常用于远程登陆到网络设备进行操作,但 ...

  7. 一、 Python 基础知识笔记 —— 《Python编程:从入门到实践(第二版)》学习笔记

    前言 先安利这本书<Python编程:从入门到实践(第二版)>,作者埃里克-马瑟斯,很适合新手入门,我的python入门学习就是以这本书为核心: 再安利一个网站:菜鸟教程-Python3教 ...

  8. python基础教程是什么语言-0编程基础,什么语言也没学过,请问学Python怎样入门?...

    其实Python入门并不难,只要你有足够的自信心,明确学习目标,循序渐进就能不断享受到python带给你创新的乐趣. 大家为什么要学习python呢? 1.python简单易学 python的优势就是 ...

  9. python图形编程基础知识_少儿Python基础(14) | 图形用户界面编程(1)–easygui

    可爱的小朋友们,相信小朋友对哪些带有按钮,文本,输入框这些窗口的都不陌生了,这就是图形用户编程. 目前有很多Python的GUI工具包可以选择,那今天我们来学习GUI的一个很简单的工具包easygui ...

最新文章

  1. 履带机器人运动控制器c++_敏捷得像猫,被抛出后能平稳着地,有意思的美国西点军校机器人!...
  2. php缺失php5.dll,php5.dll丢失怎么办
  3. CodeSmith实用技巧(十四):使用Progress对象
  4. 软件工程能力漫谈:比编码更重要的,是项目管理能力
  5. stm32中stm32f10x_type.h(固件3.0以前)、stm32f10x.h(固件3.0以后)、stdint.h文件的关系
  6. php 上传多文件_php 多文件上传的实现实例
  7. windows server 2012服务器IIS基本配置
  8. avue下拉框中属性可以显示,但不能选中
  9. Git——单人操作及多人协同操作
  10. 【奇技淫巧】在安卓模拟器中安装busybox
  11. Linux 不同方法查看进程消耗CPU IO 等
  12. 多核技术对计算机技术的影响,计算机新技术——多核技术.doc
  13. quick-cocos2d-x GameCenter 排行榜
  14. 未来教育mysql下载_未来教育计算机二级题库中的视频为什么无法播放
  15. FPGA——按键消抖
  16. 现代雷达系统分析与设计---数字中频正交采样
  17. Python实现逆Radon变换——直接反投影和滤波反投影
  18. 11. Zigbee应用程序框架开发指南 - 命令行接口(CLI)
  19. 一个关于static块的编译面试题
  20. 盘点国内6大抗DDOS攻击服务商

热门文章

  1. chrome控制台console.log无法时实打印引用类型值的bug
  2. 进程地址空间(虚拟地址 | 物理内存)
  3. SUMO学习入门(一)SUMO介绍
  4. 智能音箱中喇叭腔体的参数测量
  5. 健康美味,茶油炒饭,一口香喷喷,好吃到停不下来。
  6. python课程介绍-少儿Python编程课程的具体介绍
  7. 【LOJ #572】【LibreOJ Round #11】—Misaka Network 与求和(min_25筛+杜教筛)
  8. iOS Provisioning Profile(配置文件)与Code Signing详解
  9. C语言的2个小例子,搞明白数组不再迷茫
  10. 【Arduino 和 HC-05 蓝牙模块完整教程】