记录一些基础编程练习题和一些遇见的坑

1)输出0到100的数字,如果数字是3的倍数输出Fizz,5的倍数输出Buzz。同时是3和5的倍数输出FizzBuzz,其他情况则打印原数字

for i in range(100):
if i==0:
print(i)
elif i%3==0 and i%5==0:
print("FizzBuzz")
elif i%3==0:
print("Fizz")
elif i%5==0:
print("Buzz")
else:
print(i)

ps:条件语句依次执行,满足第一个条件后不会执行下一个条件。所以同时满足3和5的需要放在上面。

2)根据输入的数字,打印相对应层数的等腰三角形星星塔

ps:先打印空格,空格数量:总层数-当前层数。再打印星星,星星数量:当前层数*2-1

num = int(input("输入一个数字:"))
for i in range(1,num+1):#外层循环定义 星星塔层数
y = num-i#计算出空格要打印的次数
print(" "*y,end="")#打印空行
for j in range(1,2*i):#每行星星的数量
print("*",end="")
print()

如range(1,7),生成的数列是1到6,所以需要通过num+1的方式来控制层数

print()里end=""可以让打印时不换行

2*i是星星的数量,利用range()自动减一。-、

使用while循环实现

num = int(input("输入一个数字:"))
row=1
while row<=num:
print(" "*(num-row)+"*"*(2*row-1))
row+=1

row为层数,默认为第一层

num-row为空格数量

2*row-1位星星数量

3)有1,2,3,4四个数字,能组成多少个互不相同且不重复的三位数字

list = []
sum = 0
for i in range(1,5):
for j in range(1,5):
for k in range(1,5):
if i!=j and j!=k and k!=i:
num=i*100+j*10+k
list.append(num)
sum+=1
print(list)
print(sum)

三个数字可填在个十百位上,组成所有排列然后去掉重复的

4)递归返回None值

def get_op():
str = input("请输入你的选择1/2/3/4:")
try:
no = int(str)
if no not in[1,2,3,4]:
print("请输入正确的运算符")
get_op() #这里前面应该加上return
else:
return no
except ValueError as f:
print("请输入正确的运算符")
get_op() #这里前面应该加上return operator = get_op()
print(operator)

在做下面一题的时候,我如果直接输1到4是没有问题的,但是如果输入不是数字,或者不是1到4的数字,会返回None值

后来查了很多才发现。这样写递归调用后产生的值并没有return出来,要在递归函数调用前加上return。把值一层层传出去。

def get_op():
str = input("请输入你的选择1/2/3/4:")
try:
no = int(str)
if no not in[1,2,3,4]:
print("请输入正确的运算符")
return get_op()
else:
return no
except ValueError as f:
print("请输入正确的运算符")
return get_op() operator = get_op()
print(operator)

5)编写一个程序,提示“选择运算符”,输入“1/2/3/4”后,继续输入要进行运算的两个数字后,打印出运算结果

def add(n1,n2):
value = n1+n2
print("%d + %d = %d"%(n1,n2,value)) def minus(n1,n2):
value = n1-n2
print("%d - %d = %d"%(n1,n2,value)) def multiply(n1,n2):
value = n1*n2
print("%d * %d = %d"%(n1,n2,value)) def divide(n1,n2):
value = n1/n2
print("%d / %d = %d"%(n1,n2,value)) dict={1:add,2:minus,3:multiply,4:divide} def get_op():
str = input("请输入你的选择1/2/3/4:")
try:
no = int(str)
if no not in dict:
print("请输入正确的运算符")
return get_op()#一定要return 递归,不然返回值是none
else:
return no
except ValueError as f:
print("请输入正确的运算符")
return get_op() def get_num1():
str = input("输入第一个数:")
try:
num = int(str)
return num
except ValueError as f:
print("请输入整数")
return get_num1() def get_num2():
str = input("输入第二个数:")
try:
num = int(str)
return num
except ValueError as f:
print("请输入整数")
return get_num1() print("选择运算:\n1 is +\n2 is -\n3 is *\n4 is /")
operator = get_op()
num1=get_num1()
num2=get_num2()
dict[operator](num1,num2)

ps:这个做了很久,一个是递归返回值的问题。还有一个通过字典存放函数指针。减少代码量

前四个是加减乘除的函数,然后存放到字段里,然后字典名[key](函数的参数)这样的形式调用。就不用写很多判断的代码。

6)冒泡排序,数组之间相邻值,两两进行比较。然后从大到小,或者从小到大排序

ls = [7,12,34,4,24,20,11]
for i in range(len(ls)-1):#外层决定比较的轮次
for j in range(len(ls)-1-i):#多少个数进行两两比较
if ls[j] < ls[j+1]:#两两比较大小 <是从大到小排序 >是从小到大排序
ls[j],ls[j+1] = ls[j+1],ls[j]#互换位置 print(ls)

数组的下标是从0开始的

从大到小排是找出最小的放到最后面,从小到大排是找出最大的放到最后面
ps:以上图从大到小排序为例。第一轮是7个数进行比较,然后比较出最小的值放在最后。然后第二轮比较前6个值。以此类推。剩下2个数的时候,一次比完。所以需要比的轮次是 数组的长度减去1 。每轮需要比较数量,第一轮是数组长度,之后每轮减1.

7)二分查询,对一个有序的数组进行查询,从数组中间取出一个值,和需要查询的值进行对比。如果大于需要查询的值,则取左边一半继续进行二分查询。如果小于需要查询的值,则取右边一半继续进行二分查询。如果相同,则给出下标。没有提示没找到

使用循环实现

ls = [10,20,30]
def binary_search(alist,item):
left =0 #下标最小值
right = len(alist)-1 #下标最大值
while left<=right: #一定要有=,不然数组第一或最后一个无法查询到
numb = int((left+right)/2) #中间值的下标
if item == alist[numb]: #相等直接返回下标
return numb
elif item > alist[numb]: #查询的值大于数组中间值
left = numb+1 #更新区间下标
else:
right = numb-1 #更新区间下标
return None
s = binary_search(ls,20)
print(s)

left和right确定数组下标区间,找到中间值,比较大小后,根据升序还是降序的排序方式。来确定更换左边还是右边的下标。

一定要<= 因为数组最小或最大时,left=right

left一定要+1,不然会导致查询数组最大时,取中间值下标这步出现死循环

使用递归实现

ls = [10,20,30]
def binary_search(alist,item,left,right):
if left > right:
return None
numb = int((left+right)/2)
if alist[numb] == item:
return numb
elif item > alist[numb]:
return binary_search(alist,item,numb+1,right)
else:
return binary_search(alist,item,left,numb-1)
s = binary_search(ls,10,0,3)
print(s)

python3编程练习题的更多相关文章

  1. 6、50道JAVA基础编程练习题跟答案

    50道JAVA基础编程练习题 [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 程序分析 ...

  2. 50道JAVA基础编程练习题

    50道JAVA基础编程练习题 [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少? 程序分析 ...

  3. 50道JAVA基础编程练习题 - 题目

    50道JAVA基础编程练习题[1]题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? [2]题目:判断 ...

  4. python012 Python3 编程第一步

    Python3 编程第一步在前面的教程中我们已经学习了一些 Python3 的基本语法知识,下面我们尝试来写一个斐波纳契数列.实例如下: #!/usr/bin/python3 # Fibonacci ...

  5. Python3 编程之字符串处理

    Python3 编程之字符串处理 在编程中最常见的任务就是字符串的处理,So,学好字符串的使用非常重要 一.变量的定义规范 Python中声明变量时,要符合以下规则为准: 只能使用数字.字母.下划线组 ...

  6. python3编程基础之一:关键字

    在学习编程的过程中每种语言都会有一些特殊的字母组合在本语言中表示特定的含义,这种字母组合就是关键字.原则上,关键字是无法被重复定义的,否则,语言在应用中,就无法正确确定标号的意义了. 1.关键字的获取 ...

  7. 豆瓣工程师为你解答关于 Python3 编程方面的问题

    Python是如此活跃的一种语言,几乎伴随互联网的发生而创立,又伴随互联网的极速发展而繁荣.使用Python会遇到这样的问题:什么时候该用多进程?怎样提高代码执行效率?Flask为什么流行?学习Pyt ...

  8. MySQL基础CRUD编程练习题的自我提升(1)

    基础知识: 1.数据库的连接 mysql -u -p -h -u 用户名 -p 密码 -h host主机 2:库级知识 2.1 显示数据库: show databases; 2.2 选择数据库: us ...

  9. Java-每日编程练习题②(数组练习)

    1.有一个已经排好序的数组.现输入一个数,要求按原来的规律将它插入数组中. 分析思路: 先通过Random类随机创建一个数组,再调用Arrays类中的排序方法sort排好序,然后再开始实现功能. 按原 ...

随机推荐

  1. openstack第三章:nova

    第三篇nova— 计算服务 一.nova介绍:             Nova 是 OpenStack 最核心的服务,负责维护和管理云环境的计算资源.OpenStack 作为 IaaS 的云操作系统 ...

  2. Neutron local network 学习

    local network 的特点是不会与宿主机的任何物理网卡相连,也不关联任何的 VLAN ID.   对于每个 local netwrok,ML2 linux-bridge 会创建一个 bridg ...

  3. Python如何将整数转化成二进制字符串

    Python 如何将整数转化成二进制字符串 1.你可以自己写函数采用 %2 的方式来算. >>> binary = lambda n: '' if n==0 else binary( ...

  4. 【翻译】IdentityServer4:基于资源的配置

    这篇文章基于https://leastprivilege.com/2016/12/01/new-in-identityserver4-resource-based-configuration/进行翻译 ...

  5. Python基础知识5-递归函数、生成器

    函数执行流程* 递归Recursion 递归的性能  递归总结 递归练习: def fac(n): if n==1: return n return n*fac(n-1) def fac1(n, f= ...

  6. Shell命令-系统信息及显示之stat、du

    文件及内容处理 - stat.du 1. stat:显示inode内容 stat命令的功能说明 stat 命令用于显示 inode 内容.stat 以文字的格式来显示 inode 的内容. stat命 ...

  7. STS启动springboot项目,加载不了resources下的配置文件的问题

    从这篇博客的评论中找到了解决方案 答案: eclipse的设置中,它默认是不包括resources下的文件的,把它改了就行了 原本用idea没这些事的,不过idea旗舰版到期了,社区版的话,对前端又没 ...

  8. Python中的 一些常用技巧函数[.join()]

    1.str.join(item)字符串操作函数,参数item可以是字符串.元组.字典,示例 ','.join('abc') [','.join('abc')] 输出: 'a,b,c'['a', 'b' ...

  9. ElasticSsarch汇总

    用途: 分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索: 实时分析的分布式搜索引擎: 可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据. 点击查看安装.基本增删改查操作REST ...

  10. ESXI 6.5安装详细步骤

    网址:http://blog.51cto.com/laotang6/2044861 ESXi是专为运行虚拟机.最大限度降低配置要求和简化部署而设计.只需几分钟时间,客户便可完成从安装到运行虚拟机的全过 ...