问题
编写一个程序,它将找到所有这些数字,可被7整除,但不是5的倍数,2000年至3200年(包括在内)。得到的数字应按逗号分隔的顺序打印在一行上。
解题思路
-
循环遍历2000至3200
-
对每个数字进行检查是否可被7整除,但不能被5整除
-
将满足条件的数字存储到一个序列里边
-
使用str.join(sequence),完成用逗号分隔的字符串
代码及运行结果
l=[]
for i in range(2000, 3201):
if (i%7==0) and (i%5!=0):
l.append(str(i))
print(','.join(l))
运行结果
代码解析
range函数解析
函数语法:range(start, stop[, step])
参数说明:
-
start 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5)
-
stop 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
-
step 步长,默认为1。例如:range(0, 5)等价于 range(0, 5, 1)
补充一下,range函数对于起始和结束来说,是左闭右开区间,在这里我们需要遍历2000年至3200年(包括在内),因此应该写成range(2000, 3201)或者range(2000, 3201, 1)。
检查是否可被7整除,但不能被5整除
Python当中,%是取模运算符,返回除法的余数;
我们看看实例:
-
假设变量a=21, b=10,那么a%b 输出结果为1
-
假设变量a=20, b=10,那么a%b 输出结果为0
因此我们需要可被7整除,但不能被5整除,可以将用(i%7==0) and (i%5!=0)来进行判断。
List append函数
函数功能::append() 用于在列表末尾添加新的对象。
函数语法:list.append(obj)
这里我们使用l.append(str(i))将满足条件的数字转换成字符串再添加到列表末尾
join函数
函数功能:join() 用于将序列中的元素以指定的字符连接生成一个新的字符串
函数语法:str.join(sequence)
该函数需要满足sequence必须是字符串序列,因此上述在append的时候,我们将数字类型转化为字符串类型str(i),然后通过’,'.join(l)将列表中的这些字符串拼接成一个字符串。
问题
编写一个可以计算给定数字的阶乘的程序。 结果应该以逗号分隔的顺序打印在一行上。 假设向程序提供以下输入: 8 则输出为:40320
解题思路
任何大于等于1 的自然数n 阶乘表示方法:
或
0的阶乘:0!=1。
基于此定义,我们可以用两种解法来实现,一种是非递归实现,第二种是递归的方式来实现。
运行代码
解法1(非递归实现):
n = int(input())
count = 1
for i in range(1, n+1):
count = count * i
print(count)
解法2(递归实现):
def fact(x):
if x == 0:
return 1
return x*fact(x-1)
n = int(input())
print(fact(n))
运行结果
我们这里输入8,得到的结果是40320
代码解析
range函数解析
函数语法:range(start, stop[, step])
参数说明:
-
start 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5)
-
stop 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
-
step 步长,默认为1。例如:range(0, 5)等价于 range(0, 5, 1)
range函数对于起始和结束来说,是左闭右开区间,在这里我们输入的是8,因此需要从1到8(包括在内),因此应该写成range(1, 8+1)或者range(1, 8+1, 1)。
递归
通俗的来讲:递归就是在函数内部调用自己的函数被称之为递归。
递归的特点:
-
必须有一个明确的结束条件
-
每次进入更深一层递归时,问题规模(计算量)相比上次递归都应有所减少
-
递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)
在这里我们输入8,然后调用的是8 * fact(7),即8乘以7的阶乘;而7的阶乘为 7 * fact(6),即7乘以6的阶乘,直到为1时,返回1。
问题
使用给定的整数n,编写一个程序生成一个包含(i, i*i)的字典,该字典包含1到n之间的整数(两者都包含)。然后程序应该打印字典。
假设向程序提供以下输入:8
则输出为: {1:1,2:4,3:9,4:16,5:25,6:36,7:49,8:64}
解题思路
-
通过input函数接收输入
-
通过range函数来循环
-
设置字典的key和value
运行代码
print('请输入一个数字:')
n=int(input())
d=dict()
for i in range(1,n+1):
d[i]=i*i
print(d)
运行结果
请输入一个数字:
8
{1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64}
代码解析
range函数解析
函数语法:range(start, stop[, step])
参数说明:
-
start 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5)
-
stop 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
-
step 步长,默认为1。例如:range(0, 5)等价于 range(0, 5, 1)
补充一下,range函数对于起始和结束来说,是左闭右开区间,在这里我们需要遍历1至8(包括在内),因此应该写成range(1, 8+1)或者range(1, 8+1, 1)。
字段增加键值对
向字典添加新内容的方法是增加新的键/值对,如下语法
d[i]=i*i
问题
问题:编写一个程序,该程序接受控制台以逗号分隔的数字序列,并生成包含每个数字的列表和元组。假设向程序提供以下输入:
34岁,67年,55岁,33岁,12日,98年
则输出为:[‘34’, ‘67’, ‘55’, ‘33’, ‘12’, ‘98’]
(‘34’, ‘67’, ‘55’, ‘33’, ‘12’, ‘98’)
解题思路
-
通过
,
来分割字符串,采用split函数 -
通过正则来匹配数字
运行代码
import re
print('请输入一组数字:')
values=input()
l=values.split(",")
k=re.findall(r'[0-9]+',values)
t=tuple(k)
print (k)
print (t)
运行结果
请输入一组数字:
12牛,123牛
['12', '123']
('12', '123')
代码解析
split函数
split() 通过指定分隔符对字符串进行切片,返回一个由字符串内单词组成的列表,使用 sep 作为分隔字符串。 如果给出了 maxsplit,则最多进行 maxsplit 次拆分(因此,列表最多会有 maxsplit+1
个元素)。 如果 maxsplit 未指定或为 -1
,则不限制拆分次数(进行所有可能的拆分)。
str.split(sep=None, maxsplit=-1)
正则匹配数字
[0-9]表示匹配任何数字。类似于 [0123456789],也可以使用\d,和[0-9]等价。
+
表示匹配1个或多个的表达式。
而[0-9]+
表示匹配1个或多个数字
问题
定义一个至少有两个方法的类:getString:从控制台输入获取字符串 printString:打印大写母的字符串。 还请包含简单的测试函数来测试类方法。
解题思路
- 使用_init__方法构造一些参数
运行代码
class MyString(object):
def __init__(self):
self.s = ""
def getString(self):
print('请输入字符串:')
self.s = input()
def printString(self):
print (self.s.upper())
myStr = MyString()
myStr.getString()
myStr.printString()
运行结果
请输入字符串:
myStr
MYSTR
代码解析
类的定义
Python当中使用 class 语句来创建一个新类,class之后为类的名称(通常首字母大写)并以冒号结尾
__init__
方法
使用__init__
方法将类当中的变量进行初始化,这里我们定义并且初始化了一个变量s
def __init__(self):
self.s = ""
string upper方法
upper() 方法将字符串中的小写字母转为大写字母
问题
编写一个程序,根据给定的公式计算并打印值:
以下是C和H的固定值:C是50。H是30。D是一个变量,它的值应该以逗号分隔的序列输入到程序中。 例子假设程序的输入序列是逗号分隔的:100,150,180, 程序输出为:18,22,24
提示:如果接收到的输出是小数,则应四舍五入到其最近的值(例如,如果接收到的输出是26.0,则应打印为26)。在为问题提供输入数据的情况下,应该假设它是控制台输入。
解题思路
-
可以用split函数来进行分割字符串中的数字
-
使用math库中的sqrt开进行开方
运行代码
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))
运行结果
请输入一组数字: 100,150,80 18,22,16
代码解析
列表推导式x for x in range()
列表推导式创建列表的方式更简洁。常见的用法为,对序列或可迭代对象中的每个元素应用某种操作,用生成的结果创建新的列表;或用满足特定条件的元素创建子序列。
例如,创建平方值的列表:
squares = []
for x in range(10):
squares.append(x**2)
print(squares)
可以采用如下方式来完成
squares = [x**2 for x in range(10)]
sqrt函数
math.sqrt(x)
:返回 x 的平方根。
round函数
round(number[, ndigits])
:方法返回浮点数 x 的四舍五入值,准确的说保留值将保留到离上一位更近的一端。
问题
问题:编写一个程序,以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*col
print (multilist)
运行结果
请输入两个数字:
3,5
[[0, 0, 0, 0, 0], [0, 1, 2, 3, 4], [0, 2, 4, 6, 8]]
代码解析
列表推导式x for x in range()
列表推导式创建列表的方式更简洁。常见的用法为,对序列或可迭代对象中的每个元素应用某种操作,用生成的结果创建新的列表;或用满足特定条件的元素创建子序列。
例如,创建平方值的列表:
squares = []
for x in range(10):
squares.append(x**2)
print(squares)
可以采用如下方式来完成
squares = [x**2 for x in range(10)]
创建和使用二维数组
这里也是使用了列表推导式来创建一个二维数组,而这里创建的二维数组所有的值都是0
multilist = [[0 for col in range(colNum)] for row in range(rowNum)]
二维数组的元素访问和修改:
multilist[row][col]= row*col
问题
问题:编写一个程序,接受逗号分隔的单词序列作为输入,按字母顺序排序后按逗号分隔的序列打印单词。
假设向程序提供以下输入: without,hello,bag,world
则输出为: bag,hello,without,world
提示:在为问题提供输入数据的情况下,应该假设它是控制台输入。
解题思路
-
使用split函数来进行分割单词
-
使用sort来进行排序
-
使用join来进行字符串的拼接
运行代码
items=[x for x in input().split(',')]
items.sort()
print (','.join(items))
运行结果
without,hello,bag,world
bag,hello,without,world
代码解析
列表推导式x for x in range()
列表推导式创建列表的方式更简洁。常见的用法为,对序列或可迭代对象中的每个元素应用某种操作,用生成的结果创建新的列表;或用满足特定条件的元素创建子序列。
例如,创建平方值的列表:
squares = []
for x in range(10):
squares.append(x**2)
print(squares)
可以采用如下方式来完成
squares = [x**2 for x in range(10)]
List sort()方法
函数功能:函数用于对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数
函数语法:list.sort( key=None, reverse=False)
join函数
函数功能:join() 用于将序列中的元素以指定的字符连接生成一个新的字符串
函数语法:str.join(sequence)
该函数需要满足sequence
必须是字符串序列,因此上述在append
的时候,我们将数字类型转化为字符串类型str(i)
,然后通过,'.join(l)
将列表中的这些字符串拼接成一个字符串。
读者福利:知道你对python感兴趣,便准备了这套python学习资料
如果大家对Python感兴趣,这套python学习资料一定对你有用
对于0基础小白入门:
如果你是零基础小白,想快速入门Python是可以考虑的。
一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。
包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、机器学习、Python量化交易等习教程。带你从零基础系统性的学好Python!
零基础Python学习资源介绍
① Python所有方向的学习路线图,清楚各个方向要学什么东西
② 600多节Python课程视频,涵盖必备基础、爬虫和数据分析
③ 100多个Python实战案例,含50个超大型项目详解,学习不再是只会理论
④ 20款主流手游迫解 爬虫手游逆行迫解教程包
⑤ 爬虫与反爬虫攻防教程包,含15个大型网站迫解
⑥ 爬虫APP逆向实战教程包,含45项绝密技术详解
⑦ 超300本Python电子好书,从入门到高阶应有尽有
⑧ 华为出品独家Python漫画教程,手机也能学习
⑨ 历年互联网企业Python面试真题,复习时非常方便
👉Python学习路线汇总👈
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取哈)
👉Python必备开发工具👈
温馨提示:篇幅有限,已打包文件夹,获取方式在:文末
👉Python学习视频600合集👈
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
👉实战案例👈
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
👉100道Python练习题👈
检查学习结果。
👉面试刷题👈
资料领取
这份完整版的Python全套学习资料已经上传网盘,朋友们如果需要可以点击下方微信卡片免费领取 ↓↓↓【保证100%免费】