Python实训题目

写在前面

学校python课实训平台的oj太敏感辣,少一个空格都会报错——面向答案编程。为纪念在python实践课上花费的不多但受苦的经历,特将代码保存于博客上。
宁愿刷leetcode也不愿意跑python代码

2.1 表达式和基本输入输出

2.1.1 数据输入与输出

任务描述
本关任务:根据题目要求输出表达式的值,掌握python数据的输入与输出问题。

相关知识
要完成本关,你需要掌握 print( ),input(),eval()函数的用法。
print(*objects, sep=’ ‘, end=’\n’, file=sys.stdout, flush=False)
参数:
objects – 复数,表示可以一次输出多个对象。输出多个对象时,需要用 , 分隔。
sep – 用来间隔多个对象,默认值是一个空格。
end – 用来设定以什么结尾。默认值是换行符 \n,我们可以换成其他字符串。
file – 要写入的文件对象。
flush – 输出是否被缓存通常决定于 file,但如果 flush 关键字参数为 True,流会被强制刷新。
举例:

print(1)
1
print(“Hello World”)
Hello World

a = 1
b = 'runoob’
print(a,b) #默认自动换行
1 runoob
print(“aaa””bbb”)
aaabbb
print(“aaa”,”bbb”)
aaa bbb
print(“www”,”runoob”,”com”,sep=”.”) # 设置间隔符
www.runoob.com
x,y=12,34
print(x) #默认自动换行
12
print(y)#默认自动换行
34
print(x,y,end=’’) #通过参数end 设置结尾符可控制一行显示多个数据
12 34
input()以字符串的方式获取用户输入,但无法直接参与算术运算
例如:
x = input()
4.5
type(x)

x=input()
12
y=input()
34
print(x+y)
1234

eval(<字符串>):将输入的字符串转变成python语句,可实现算术运算

x,y=eval(input())
12,34
print(x+y)
46

题目

编程要求
根据提示,在右侧编辑器补充代码,完成如下程序的编写。

第一题
在屏幕上输出字符串:hi, “how are you”, I’m fine and you

第二题
从键盘输入两个整数,计算两个数相除的商与余数
假设输入12,5
输出为 2,2

第三题
在屏幕上 输入一个三位数输出该数的个位、十位和百位数字。
假设输入125
输出为 5,2,1

第四题
已知a=1.234567,请按指定格式输出a的值。1.按保留小数点后3位,2.指数形式,尾数部分保留小数点2位 ,输出格式:采用一行输出,中间用,隔开。

第五题
请问一个硬盘的存储容量为500GB, 请问该硬盘最多可存放多少个字节的数据量?
提示:字节为最小的存储单位,硬盘容量500GB中的B是指字节byte。1G=1024M, 1M=1024K, 1K=1024。

第六题
计算并判断 1.0 1 3 ∗ 0.9 9 2 1.01^ 3∗0.99 ^2 1.0130.992 , 是否大于1.01,输出判断结果True或False。可知“三天打鱼,两天晒网,终将一无所获”。
提示:直接用关系运算符进行比较,关系运算符的输出是逻辑值True或False。
代码:

# -*- coding: utf-8 -*-
"""
Created on Sun Sep  6 21:39:58 2020

@author: hzh
"""
 
#第一题:在屏幕上输出字符串:hi, "how are you", I'm fine and you
#-------begin-------------#

print("hi, \"how are you\", I'm fine and you")
#-------ends--------------# 

#第二题:从键盘输入两个整数,计算两个数相除的商与余数
x,y = eval(input())
#-------b.1egin-----------
s = x/y
m = x%y
print(s,end=" ")
print("%d"%m)

#-------ends------------- 

#第三题:在屏幕上输入一个三位数输出该数的个位、十位和百位数字
x = eval(input())
#-------begin-----------
g = x//100
s = (x-100*g)//10
b = (x-100*g-10*s)
print("%d "%b,end="") 
print("%d "%s,end="")
print("%d"%g)  

 

#-------ends------------ 
 
#第四题:已知a=1.234567,b=0.000321 .按保留小数点后3位输出a,2.按指数形式输出 b
a,b = 1.234567, 0.00321
#-------begin-----------
import math
print("a=%.3f,"%a,end="")

print("b=%.2e"%b)
 
#-------ends------------  
     
#第五题:请问一个硬盘的存储容量为500GB, 请问该硬盘最多可存放多少个字节的数据量
#-------begin-----------
  
x = 500*2**30
print("%s"%x)

#-------ends------------           

#第六题:计算并判断题干中表达式的值是否大于1.01,输出判断结果True,False。    
#-------begin-----------

x = 1.01**3
y = 0.99**2
z =x*y
if z > 1.01 :
  print("True")
else :
  print("False")
 

#-------ends------------ 

2.1.2 表达式的计算问题

问题:

任务描述
本关任务:利用math库的导入与math库中数学函数的,将下面数学表达式转换为Python表达式,并用print语句打印结果。

相关知识
为了完成本关任务,你需要掌握:1.如何在python中导入math库,2.math库中常用函数的使用
下面列出一些常用的数学函数,请仔细阅读,通过完成本关任务,了解和掌握math库中数学函数的使用。

abs(x):返回整数的绝对值,如abs(-10)返回10。

ceil(x):返回数字的向上取整,如math.ceil(4.1)返回5。

exp(x):返回e的x次幂,如math.exp(1)返回2.718281828459045。

fabs(x):返回浮点数的绝对值,如math.fabs(-10) 返回10.0。

floor(x):返回数字的向下取整,如math.floor(4.9)返回4。

log(x,base):如math.log(math.e,math.e)返回1.0,math.log(100,10)返回2.0。

log10(x):返回以10为基数的x的对数,如math.log10(100)返回2.0。

max(x1,x2,…):返回给定参数的最大值,参数可以为序列。

min(x1,x2,…):返回给定参数的最小值,参数可以为序列。

modf(x):以元组的形式返回,(小数部分,整数部分)。两部分的数值符号与x相同,整数部分以浮点型表示。

pow(x, y):x
y
运算后的值。

round(x [,n]):返回浮点数x的四舍五入值,如给出n值,则代表舍入到小数点后的位数。

sqrt(x):返回数字x的平方根,返回类型为实数,如math.sqrt(4)返回2.0。

acos(x):返回x的反余弦弧度值。

asin(x):返回x的反正弦弧度值。

atan(x):返回x的反正切弧度值。

atan2(y, x):返回给定的X及Y坐标值的反正切值。

cos(x):返回x的弧度的余弦值。

hypot(x, y):返回欧几里德范数 s q r t ( x 2 + y 2 ) sqrt(x ^2 +y 2 ) sqrt(x2+y2)

sin(x):返回x弧度的正弦值。

tan(x):返回x弧度的正切值。

degrees(x):将弧度转换为角度,如degrees(math.pi/2) , 返回90.0。

radians(x):将角度转换为弧度

除了上述常用的数学函数,math库中还定义了两个常用的数学常量:

pi——圆周率,一般以π来表示。

e——自然常数。

一般有两种常用方法来使用math中的函数:

import math
print(math.abs(3))
或:

from math import *
print(abs(3))
编程要求
根据提示,在右侧编辑器Begin-End处补充代码,本关需要你编程计算的数学表达式或实际问题包括以下五题。

第一题
分别计算并输出 π 4 + π 5 、 e 6 π ^4 +π ^5 、 e ^6 π4+π5e6的值,以及输出二者的差。

第二题
分别计算并输出 π/4与4arctan(1/5)−arctan(1/239)的值,并观察其差异。

第三题
分别计算并输出sinh(0.25)与
( e 0.25 − e − 0.25 ) / 2 (e ^{0.25} −e ^{−0.25} )/2 (e0.25e0.25)/2的值,查看并比较二者的大小。

第四题
已知 h,v0,g,θ = 1.9, 14, 9.8, 40 #θ初始化为角度
计算并输出表达式Python实训题目_第1张图片

的值, 请注意,需要将θ由初始的角度转为会弧度再计算表达式。

第五题
从键盘输入的是角度数θ,需要转化为弧度数x之后进行下面公式计算。
计算公式 l n ( ∣ c o s x ∣ e s i n x ) ln(∣cosx∣e ^{sinx} ) ln(cosxesinx), 并输出结果

测试说明
右侧代码编辑区已设置好具体输出格式,你只需要在指定位置填写Python代码即可。

解答:

# -*- coding: utf-8 -*-
"""
Created on Tue Sep  8 00:23:44 2020
表达式的计算问题
@author: hzh
"""

from math import *

# ********** Begin ********** #
#如果输出值小数,请保留4位小数。

#第一题
import math
x = math.pi**4+math.pi**5
y = math.exp(6)
z = x-y
print("%.4f"%x)
print("%.4f"%y)
print("%.4f"%z)
#第二题
import math
x = math.pi/4
y = 4*math.atan(0.2)-math.atan(1/239)
print("%.4f"%x)
print("%.4f"%y)

#第三题
import math
x = math.sinh(0.25)
y = 0.5*(math.exp(0.25)-math.exp(-0.25))
print("%.4f"%x)
print("%.4f"%y)

#第四题
h,v0,g,θ = 1.9, 14, 9.8, 40  #变量赋值
import math
x = math.radians(θ)
y = (2*v0*math.sin(x)+math.sqrt(4*v0**2*sin(x)**2+8*g*h))/(2*g)
print("%.4f"%y)



#第五题
θ = eval(input()) #输入角度值 
import math
x = math.radians(θ)
y = math.log1p(math.fabs(math.cos(x)*math.exp(math.sin(x)))-1)
print("%.4f"%y)


# ********** End ********** #

2.1.3简单计算问题的求解

问题:

代码:

 # -*- coding: utf-8 -*-
"""
Created on Mon Sep  7 23:31:38 2020
 任务:计算一个由正方形和等腰三角形组成的多边形的面积,其中正方形边长4厘米
,等腰三角形底边为正方形的一条边,其到对角顶点的高为2.6厘米。
@author: hzh
"""
from math import *
#保留2位小数
 
#第一题:无输入求多边形的面积
square_length = 4  # 声明整型变量square_length用于表示正方形边长,并赋值 4
triangle_h = 2.6   # 声明浮点型变量triangle_h用于表示三角形底边上的高,并赋值 2.6
 
# 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
########## Begin ##########
# 第1步:计算正方形面积,赋值给变量area_square
area_square = square_length**2
# 第2步:计算等腰三角形面积,赋值给变量area_triangle
import math 

area_triangle = square_length*triangle_h*0.5
# 第3步:计算多边形面积,即正方形面积和等腰三角形面积,赋值给变量area_total
area_total = area_square + area_triangle
# 第4步:打印输出多边形面积
print("%.2f"%area_total)
########## End ##########
print('***********************')

#第二题:从键盘输入摄氏温度,将摄氏温度转换为华氏温度并输出
########## Begin ##########
#第1步:给C赋值
c = eval(input())

#第2步:计算F的值并输出
f = (9/5)*c+32
print("%.2f"%f)
########## End ##########


print('***********************')

#第三题:正态分布的概率密度函数
########## Begin ##########
#第1步:给mu,sigma,x赋值,从键盘输入
mu,sigma,x=eval(input())

#第2步:计算函数值并输出
import math
y = (1/(math.sqrt(2*math.pi)*sigma))*math.exp(-(x-mu)*(x-mu)/(2*sigma*sigma))
print("%.2f"%y)

########## End ##########

print('***********************')

#第四题:编写一个计算并打印地球上两点的球面距离的Python程序
########## Begin ##########
#第1步:从键盘录入4个数,分别赋值lat1,lon1,lat2,lon2变量,代表两个点的角度坐标
lat1,lon1,lat2,lon2=eval(input())

#第2步:角度到弧度的转换
import math
Lat1 = math.radians(lat1)
Lon1 = math.radians(lon1)
Lat2 = math.radians(lat2)
Lon2 = math.radians(lon2)
#第3步:根据题干中所给公式计算球面距离并输出
R = 6371
s = R*math.acos(math.sin(Lat1)*math.sin(Lat2)+math.cos(Lat1)*math.cos(Lat2)*math.cos(Lon1-Lon2))
print("%.2f"%s)
########## End ##########

print('***********************')

2.1.4 顺序程序设计

问题:

任务描述
本关主题是综合利用前三关掌握的知识,解决实际问题。通过问题的解决,对计算思维有一定的体验和感悟,并熟练掌握从上到下的顺序程序设计方法。

相关知识
为了完成本关任务,你需要掌握:

input 的使用;
print 的格式化输出;
数据类型转换;
字符串类型的基本使用。

编程要求
第一题:计算距离
一小球以 5 米/秒 的水平速度平抛,重力加速度取 9.8 米每秒的平方,在忽略空气阻力的情况下,求经过时间 t 秒后,小球所在位置与抛出点之间的距离 (假设小球距地面足够高)。
例如输入:2
输出:22.00

第二题:求三角形面积
一个三角形的三边长分别是 a,b,c,那么它的面积为 sqrt(p(p−a)(p−b)(p−c)),其中 p= 1/2(a+b+c)。输入这三个数字,计算三角形的面积,四舍五入精确到 2 位小数。保证能构成三角形,0≤a,b,c≤1000,0≤a,b,c≤1000,每个边长输入时不超过2位小数。
例如输入:3,4,5
输出:6.00

第三题:逆序数输出
输入一个不小于 100 且小于 1000,同时包括小数点后一位的一个浮点数。
例如输入:123.4
输出:4.321

第四题: 对角线求点的个数
对于一个 n 个顶点的凸多边形,它的任何三条对角线都不会交于一点。请求出图形中对角线交点的个数。
计算公式为: n ( n − 1 ) ( n 2 − 5 n + 6 ) / 24 n(n−1)(n^ 2 −5n+6)/24 n(n1)(n25n+6)/24

例如:6 边形:结果为15个点
输入:6
输出:15

仔细阅读右侧编辑区内给出的代码框架及注释,按照提示编写程序代码。格式化输出格式请参考测试集中的预期输出。

代码:

 # -*- coding: utf-8 -*-
"""
Created on Mon Sep  7 23:55:39 2020
程序代码 :顺序结构程序设计 
@author: hzh
"""
from math import *
#保留2为小数
        
#**第一题**:计算距离
G = 9.8     # 声明浮点型变量 G,用于表示重力加速度
v0 = 5      # 声明整型变量 v0, 用于表示水平初速度
#请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
########### Begin ###########
# 第一步:通过input函数获取输入值,将其转换为浮点型并赋值给t

t = eval(input())
# 第二步:计算水平距离,并赋值给s
s = 5*t
# 第三步:计算垂直距离,并赋值给h
h = 0.5*9.8*t**2
# 第四步:计算小球与原点的距离,并赋值给d
import math
d = math.hypot(s,h)
# 第五步:按照保留小数点后2位格式输出小球与原点的距离d
print("%.2f"%d)
########### End ###########
print('***********************')

#**第二题**:求三角形面积,结果保留小数点后2位
########### Begin ###########
a,b,c=eval(input())
import math
p = 0.5*(a+b+c)
s = math.sqrt(p*(p-a)*(p-b)*(p-c))
print("%.2f"%s)
########### End ###########
print('***********************')

#**第三题**:逆序数输出
########### Begin ###########
a=eval(input())
b = a//100
c = (a-b*100)//10
d = (a-b*100-c*10)//1
e = (a-b*100-c*10-d)*10
s = (e +0.1*d+0.01*c+0.001*b)
print("%.3f"%s)

########### End ###########
print('***********************')

#**第四题**: 对角线求点的个数,以整数输出结果
########### Begin ###########
n=eval(input())
import math
s = n*(n-1)*(n**2-5*n+6)*(1/24)
print("%d"%s)

########### End ###########
print('***********************')

2.3 分支结构

2.3.1 判断三角形类型

问题:

编程要求
根据提示,在右侧编辑器补充代码,判断三角形类型。

测试说明
平台会对你编写的代码进行测试:

测试输入:3,4,5;
预期输出:
直角三角形

测试输入:6,6,6;
预期输出:
等边三角形

测试输入:1,2,3;
预期输出:
无法构成三角形

测试输入:3,4,6;
预期输出:
普通三角形

代码:

x=eval(input("边长一"))
y=eval(input("边长二"))
z=eval(input("边长三"))
#代码开始
if (x+y>z and x+z>y and y+z>x):
    if (x==y and y==z):
        print("等边三角形")
    elif(x**2==y**2+z**2 or y**2==x**2+z**2 or z**2==x**2+y**2):
        print("直角三角形")
    else:
        print("普通三角形")
else:
    print("无法构成三角形")
        

#代码结束

2.3.2 分段函数

题目:略
代码:

x=eval(input())
#代码开始
if x<1 :
    y = x
elif 1<=x<10:
    y = 2*x - 1
else:
    y = 3*x-1

#代码结束
print("{:.2f}".format(y))

2.3.3 阶梯电价计算电费

问题:

任务描述
本关任务:长沙市按照阶梯电价计算电费,第一档是200度及以下的0.588/度。第二,三档分季节,春秋季:第二档是200度以上-350度的0.638/度,第三档是350度以上0.888/度。冬夏季:第二档是200度以上-450度的0.638/度,第三档是450度以上0.888/度。根据输入的上月电表度数、本月电表度数和月份来计算电费。3-5月份为春季,6-8月份为夏季,9-11为秋季,12-2月份为冬季。
输入居民的上月和本月的电表度数,计算用电度数和电费。

测试说明
平台会对你编写的代码进行测试:

测试输入:
上月电表读数200
本月电表读数800
月份7

预期输出:
用电度数600.0
电费410.30

测试输入:
上月电表读数150
本月电表读数450
月份4

预期输出:
用电度数300.0
电费181.40

代码:

sy=eval(input("输入上月电表度数"))
by=eval(input("输入本月电表度数"))
yf=eval(input("输入月份"))
#代码开始
c = 1
ds = by -sy
if (ds<=200):
    c = ds*0.588
else:
    if (yf == 3 or yf == 4 or yf ==5 or yf ==9 or yf ==10 or yf ==11):
        if 200<ds<=350:
            c = (ds-200)*0.638+200*0.588
        if ds>350:
            c = (ds-350)*0.888+(350-200)*0.638+200*0.588
    if (yf == 6 or yf == 7 or yf ==8 or yf ==12 or yf ==1 or yf ==2):
        if 200<ds<=450:
            c = (ds-200)*0.638+200*0.588
        if ds>450:
            c = (ds-450)*0.888+(450-200)*0.638+200*0.588       


#代码结束
print("用电度数{:.2f}电费{:.2f}".format(ds,c))

2.3.4 阶梯水价计算水费

问题:

任务描述
本关任务:编写一个计算水费的小程序。
长沙市水费计量实施阶梯式水价制度:对四口之家及以下以户为单位进行计量,五口之家及以上按人均计量办法。
对四口之家及以下户:第一级水价为15吨及以下,按2.58元每吨计费;第二级水价为22吨及以下,按3.34元每吨计费;第二级水价为超过22吨,按4.09元每吨计费。
对五口之家及以上户:第一级水价为每人每月4吨及以下,按2.58元每吨计费;第二级水价为每人每月5吨及以下,按3.34元每吨计费;第二级水价为超过每人每月5吨,按4.09元每吨计费。
此外,对于低保居民,每户每月减免6立方米的水费

编程要求
根据提示,在右侧编辑器补充代码,输入上月水表读数、本月水表读数、家庭人数、是否低保(y/n),计算并输出用水度数和水费。

测试说明
平台会对你编写的代码进行测试:

测试输入:输入上月水表吨数10
输入本月水表吨数40
输入家庭人数3
是否低保(y/n)y

预期输出:
用水吨数(减免后)24.00水费70.26

测试输入:输入上月水表吨数30
输入本月水表吨数80
输入家庭人数6
是否低保(y/n)n
预期输出:
用水吨数(减免后)50.00水费163.76

测试输入:输入上月水表吨数10
输入本月水表吨数13
输入家庭人数6
是否低保(y/n)y
预期输出:
用水吨数(减免后)-3.00水费0

代码:

sy=eval(input("输入上月水表吨数"))
by=eval(input("输入本月水表吨数"))
rs=eval(input("输入家庭人数"))
db=input("是否低保(y/n)")
#代码开始

if (db[:] in ['y']):
    sl = by -sy -6
    if sl <=0:
        c = 0
    else:
        c = sl
    
else:
    sl = by -sy
    c = sl
if rs <= 4 :
    if c <=15:
        sf = sl*2.58
    elif 15<c<22:
        sf = (c-15)*3.34+15*2.58
    else:
        sf = (c-22)*4.09+7*3.34+15*2.58
else:
    if (c/rs) <=4:
        sf = c*2.58
    elif 4<(c/rs)<5:
        sf = c*3.34
    else:
        sf = c*4.09

#代码结束
print("用水吨数(减免后){:.2f}水费{:.2f}".format(sl,sf))

2.3.5 手机话费计算

题目:

任务描述
本关任务:编写一个能计算手机话费的小程序。
某用户办理了中国移动128元的5g套餐,套餐内包含每月30g流量和500分钟的通话时间。通话超出时间,按0.15元每分钟计算。套餐流量超出后,5元1GB.满15元后,按照3元1G进行计费。
输入该用户使用的流量和通话时间,计算其费用

测试说明
平台会对你编写的代码进行测试:

测试输入:
流量20
通话时间300
预期输出:
费用128

流量60
通话时间600
预期输出:
费用239

代码:

ll=eval(input("流量"))
thsj=eval(input("通话时间"))
#代码开始
if ll <=30:
    a = 128
elif 30<ll<=33:
    a = (ll-30)*5+128
else:
    a=128+15+(ll-33)*3

if thsj<= 500:
    b = 0
else:
    b = (thsj-500)*0.15

c = a+b
print("费用%.2f"%c)
#代码结束
    

2.3.6 血压判断

问题:略
代码:

x=eval(input())
y=eval(input())
#代码开始
if (x>=90 or y>=140):
    print("高血压")
elif (x<=60 or y<=90):
    print("低血压")
else:
    print("正常血压")
#代码结束

2.3.7 党费计算

问题:

任务描述
对于在职党员,工资收入在3000元及以下,交纳月工资收入的0.5%; 3000元以上至5000元(含5000元)者,交纳1%; 5000元以上至10000元(含10000元)者,交纳1.5%; 10000元以上者,交纳2%。
对于离退休党员,离退休费总额5000元以下(含5000元)的按0.5%交纳党费,5000元以上的按1%交纳党费。

本关任务:编写程序,输入是否退休(y或Y表示退休)和收入,输出应缴纳党费

注意:党费不是累进计算,而是直接按比例收取,例如,在职党员,收入8000,直接按1.5%收取
离退休党员,收入6000,直接按1%收取

测试说明
平台会对你编写的代码进行测试:

测试输入:n 8000
预期输出:120.00

测试输入:y 8000
预期输出:80.00

测试输入:n 2000
预期输出:10.00

测试输入:y 2000
预期输出:10.00

代码:

ch=input("")
s=eval(input(""))
#代码开始
if ch in ['y','Y']:
    if s <= 5000:
        df = s*0.005
    else:
        df = s*0.01
else:
    if s <= 3000:
        df = s*0.005
    if  3000<s<= 5000:
        df = s*0.01
    if  5000<s<= 10000:
        df = s*0.015
    if  s>10000:
        df = s*0.02


    
#代码结束
print("{:.2f}".format(df))

2.3.8 周薪计算

问题:

任务描述
某公司按小时计费工资。规定每周5个工作日,每天工作8小时。工作日超时工作工资为正常工资的1.5倍。休息日工资,4小时内为正常工资的2倍,超过4小时的部分为正常工资的3倍。
输入每小时工资,员工每周的工作日工作小时数和休息日工作小时数,计算其该周工资
例如每小时工资30元。工作日50小时,休息日8小时,其工资为2250.00元
4030+10301.5+4302+430*3=2250
本关任务:输入每小时工资,员工每周的工作日工作小时数和休息日工作小时数,计算其该周工资

测试说明
平台会对你编写的代码进行测试:

测试输入:
工资标准30
工作日工作时间50
休息日工作时间8
预期输出:
工资2250.00

测试输入:
工资标准20
工作日工作时间80
休息日工作时间40
预期输出:
工资4320.00

代码:

gzbz=eval(input("工资标准"))
gzr=eval(input("工作日工作时间"))
xxr=eval(input("休息日工作时间"))
#代码开始
if gzr>40:

    gzg = gzbz*40+(gzr-40)*1.5*gzbz
else:
    gzg = gzbz*gzr
if xxr <=4:
    gzx = xxr*2*gzbz
else:
    gzx = (xxr-4)*3*gzbz+4*2*gzbz


gz = gzg+gzx
#代码结束
print("工资{:.2f}".format(gz)) 

2.4 For循环

2.4.1 输出给定范围内的所有素数

问题:

任务描述
本关任务:输出给定范围以内的所有素数。输出时,每行显示10个数。
程序从测试集中读取到数据范围m,求2~m之间所有素数。

相关知识
为了完成本关任务,你需要掌握:1.素数的概念,2.循环嵌套

素数
素数:除1与本身n以外没有其他约数。用2…n-1每个数去除n,都不能除尽。如2、3、5、7、11、 13等。

循环嵌套
循环结构可以嵌套使用。在嵌套的循环结构中,当外层循环进入下一次迭代时,内层循环将重新初始化并重新开始。使用嵌套循环结构时注意代码的缩进问题,否则会导致代码的逻辑发生问题。

编程要求
根据提示,在右侧编辑器补充代码。

测试说明
平台会对你编写的代码进行测试:

测试输入:
100
预期输出:
2 3 5 7 11 13 17 19 23 29
31 37 41 43 47 53 59 61 67 71
73 79 83 89 97

代码:

#求给定范围内的所有素数
m=eval(input())  #输入范围
#代码开始
import math

sushu = True
shuzu=[]
for i in range(1,m+1):
    sushu = True
    for j in range(2,int(math.sqrt(i))+1):
        if i%j==0:
            sushu = False
            break
    if sushu:
        shuzu.append(i)


n=10
for x in range(1,len(shuzu)):
    print(shuzu[x], '',end='')

    if(x)%10==0:
        print('')


#代码结束

2.4.2 求表达式n项之和

任务描述
本关任务:输入n,求下列表达式的值: 1 + 1 1 + 2 + 1 1 + 2 + 3 + ⋯ + 1 1 + 2 + 3 + ⋯ + n 1+ \frac{1}{1+2} +\frac{1} {1+2+3} +⋯+ \frac{1}{1+2+3+⋯+n} 1+1+21+1+2+31++1+2+3++n1

结果保留6位小数。

相关知识
为了完成本关任务,你需要掌握:循环嵌套

编程要求
根据提示,在右侧编辑器补充代码。

测试说明
平台会对你编写的代码进行测试:

测试输入:
15
预期输出
1.875000

代码:


#求n项之和

#代码开始

import math
from fractions import Fraction
n=eval(input())
y=0
m=0
for i in range(1,n+1):
    s=0
    for j in range(1,i+1):
        s=s+j
        m=Fraction(1/s)
    y=y+m
print('%.6f'%y)
#代码结束

2.4.3 n个钱买n只鸡的问题

问题:

任务描述
本关任务:每只公鸡价值5元,每只母鸡价值3元,每3只小鸡价值1元。现有n个钱想买n只鸡,问公鸡、母鸡、小鸡各买几只?
依次输出公鸡母鸡小鸡的数目,如输出结果:22 23 45

相关知识
为了完成本关任务,你需要掌握:循环嵌套使用

编程要求
根据提示,在右侧编辑器补充代码。

测试说明
平台会对你编写的代码进行测试:

测试输入:
100
预期输出:
0 25 75
4 18 78
8 11 81
12 4 84

代码:


#n个钱买n只鸡问题
print("依次输出公鸡 母鸡 小鸡的数量:")
n=eval(input()) #n表示钱的总数和鸡的总数
#代码开始

for x in range(0, n // 5 + 1):
    for y in range(0, n // 3 + 1):
        s = n - 5 * x - 3 * y

        z = s*3
        p = x + y + z
        if p == n:
                print("%d" % x, '', end='')
                print("%d" % y, '', end='')
                print("%d" % z)

        else:
                continue

#代码结束

2.4.4 剩余材料最短

任务描述
本关任务:求出剩余材料最短的切割方案。
一根长度为n米的钢管,需要截成长度为19米和23米的两种短管。求两种短管各截多少根时剩余的材料最少?
(钢管的长度大于等于42)
注意:1、每种短管必须大于等于一根。
2、如果存在多种方案时,请输出19米的数目最少的方案。

相关知识
为了完成本关任务,你需要掌握:循环嵌套

编程要求
根据提示,在右侧编辑器补充代码。

测试说明
平台会对你编写的代码进行测试:

测试输入:
100
预期输出:
切割方案:19米4段,23米1段,剩余1米.

代码:


#剩余材料最短
length=eval(input())   #输入钢管长度
n=0      #19米为n段
m=0      #23米为m段
rest=length   #剩余材料长度
#代码开始
for j in range (1,length//19+1):
    for i in range(1,length//23+1):
        e=length-i*23-j*19
        if e>=0 and (e<rest or e==rest and j<n):
            rest=e
            n=j
            m=i
#代码结束
print("切割方案:19米{}段,23米{}段,剩余{}米.".format(n,m,rest))

2.4.5 打印图形

问题:

任务描述
本关任务:
输入行数,打印如下字母金字塔图形:
输入:7
打印图形如下:Python实训题目_第2张图片

图形1

提示:
打印图案关键是找出其中的规律。
根据打印第几行,算出每行打印多少列。
输出的每一行包括三部分组成:空格、字符串和换行。

相关知识
为了完成本关任务,你需要掌握:1.字符与编码之间的转换,2.控制换行。

字符与编码之间的转换
ord():将字符转化为对应的编码。
chr():将编码转化为对应的字符。

ord(‘A’)为65
chr(65)为‘A’
chr(ord(‘A’)+1)对应字符’B’
控制换行
print():默认情况下会换行显示。
print(打印的内容,end=””)则不换行显示。

编程要求
根据提示,在右侧编辑器补充代码。

测试说明
平台会对你编写的代码进行测试:

测试输入:
5
预期输出:Python实训题目_第3张图片

图形2

代码:


#打印字母图形
n = eval(input())  #输入行数
#代码开始 
m=0
for i in range(1,n+1):
    s=n-i
    for l in range(1, s+1):
        print(' ', end='')
    for j in range(1, i):
        print(chr(ord('A') + i - j), end='')
        m=m+1
    for k in range(0, i):
        print(chr(ord('A')+k),end='')
    print("")

#代码结束 

2.4.6 判断身份证号码是否有效

问题:

任务描述
本关任务:输入一个身份证号,判断其是否有效:
若不为18位,提示“长度错误”;
若前17位不为数字,提示“有无效字符”;
最后一位为校验码,若错误,提示”校验码错误”,
若校验码正确,提示“校验码正确”。

相关知识
为了完成本关任务,你需要掌握:1.校验码产生规则,2.嵌套循环。

校验码产生规则
身份证校验码产生的规则如下所示:
将前面的身份证号码17位数分别乘以不同的系数。
从第1位到第17位的系数分别为:7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2 ;
将这17位数字和系数相乘的结果相加;
用加出来和除以11,看余数是多少;
余数只可能有0、1、2、3、4、5、6、7、8、9、10这11个数字。其分别对应的最后一位身份证的号码为1、0、X、9、8、7、6、5、4、3、2,其中的X是罗马数字10;
通过上面得知如果余数是2,就会在身份证的第18位数字上出现罗马数字的Ⅹ;如果余数是10,身份证的最后一位号码就是2。

编程要求
根据提示,在右侧编辑器补充代码。

测试说明
平台会对你编写的代码进行测试:

测试输入:
请输入身份证号:431234200102049932
预期输出:
正确校验码

代码:


#判断身份证号是否有效
id=input("请输入身份证号:")
#代码开始
def is_digits(ss):  
    for s in ss:
        if not s.isdigit():
            return False
    return True


xs = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]  
ls = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']  

if len(id) != 18:  
    print('长度错误')

elif not is_digits(id[:17]):  
    print('有无效字符')

elif is_digits(id[:17]):
    total = 0
    for i in range(17):
        total += int(id[i]) * xs[i]  
        z = total % 11
    if ls[z] != id[17]:  
        print('错误校验码')

    else:
        print('正确校验码')
#代码结束

2.4循环(综合)

循环结构-while与for循环

相关知识
while循环:重复执行语句1~语句n,直到条件表达式不再成立退出循环
例:依次打印1-100,最后打印’end’
i=1
while i<=100:
print(i)
i=i+1
print(‘end’)

while循环常和break一起使用,用于满足某一条件提前中止循环
while 条件表达式:

if 条件:
break
例: 在屏幕打印小于10的整数
i=1
while True:
print(i)
i+=1
if i>=10:
break

for循环:一般的使用方式类似while循环,不同的for与in一起使用来访问序列数据
for …in …:

if…
break
例: 在屏幕打印小于10的整数
for i in [1,2,3,4,5,6,7,8,9,10]:
print(i)
if i==10:
break

编程要求
第1题
编程计算如下公式的值
1 2 + 3 2 + 5 2 + . . . + 99 5 2 + 99 7 2 + 99 9 2 1^2+3^2 +5 ^2 +...+995 ^2 +997 ^2 +999 ^2 12+32+52+...+9952+9972+9992

并输出结果

第2题
用while语句完成程序逻辑,求如下算法可以求根号x的近似值。(例如,x为3时,算法输出约为1.7320508)。

算法如下:

输入x,若x为负数,则输出“无实数解”,算法结束;

令g=x/2;

通过如下公式计算误差值,如果
∣x−g∗g∣< 1 0 − 6 10 ^−6 106
,输出g,算法结束;

否则,将(g+x/g)/2作为新的猜测值,仍记为g。

重复步骤3和4

第3题:
用for循环完成下列程序,计算3位数的水仙花数
水仙花数是三位整数,且各位数字的立方之和等于该数,比如,因为
153 153 153= 1 2 + 5 3 + 3 3 1^2+5^3+3^3 12+53+33
所以153是水仙花数。

"""
Created on Tue Sep  1 10:54:44 2020

@author: hzh
"""
from math import *

i = 1 # 当前计算的值
s = 0 # 计算出来的和
# 第1题
########### begin ##########

i=1
while True:
  m=i**2
  s=s+m
  i+=2
  if i>=1000:
    break  

######### end     ####
print(s)

########## 第2题 ##############
x = int(input())

if x<0:
    print('无实数解')
else:
    g = x/2
    #######begin##############
    # 请输入while循环控制语句
    
    
    while True:
        m=(abs(x-g**2))-10**(-6)
        if m <0:
            break
        g=(g+x/g)*0.5



    #######end#################   
    print("%.4f" %g)


########## 第3题 ##############
#计算并输出三位数内的水仙花数
####### Begin #########
# 请在此输入for循环表达式

for i in range(100,1000):
    a=i//100
    b=(i-a*100)//10
    c=(i-a*100-b*10)
    if (a**3+b**3+c**3) == i:
        print("%d"%i)
    


####### End ########

循环嵌套-特殊图形的输出

第1题:从键盘输入m行n列,在屏幕上输出m行n列的*行图案
例如输入6,7
输出为:

Python实训题目_第4张图片
第2题:从键盘输入m行,在屏幕上输出m行的直角图案
例如输入:8
输出为:Python实训题目_第5张图片
第3题:从键盘输入m行,在屏幕上输出m行的等腰三角形图案
例如输入9
输出为:Python实训题目_第6张图片

"""
Created on Thu Feb 18 22:18:27 2021

@author: hzh
"""
#第一题:从键盘输入m行n列,在屏幕上输出m行n列的*行图案
m,n= eval(input())
#请在下面编写代码
# ********** Begin ********** #
for i in range(1,m+1):
    for j in range(1,n+1):
        print("*",end='')
    print("")

# ********** End ********** #
    
#第二题:从键盘输入m行,在屏幕上输出m行的直角图案
m=eval(input())
#请在下面编写代码
# ********** Begin ********** #
  
for i in range(1,m+1):
    for j in range(1,2*i):
        print("*",end='')
    print("")
# ********** End ********** #

#第三题:从键盘输入m行,在屏幕上输出m行的等腰三角形图案
m=eval(input())
#请在下面编写代码
# ********** Begin ********** #
 

for i in range(1,m+1):
    for j in range(0,(m-i)):
        print(" ",end='')
    for k in range(1,2*i):
        print("*",end='')
    print("")
# ********** End ********** #

循环综合-天天向上的力量

编程要求
根据提示,在右侧编辑器补充代码,计算并输出结果。
一年365天,以第1天的能力值为基数,记为1.0,当好好学习时能力值相比前一天提高1‰,当没有学习时由于遗忘等原因能力值相比前一天下降1‰。每天努力和每天放任,一年下来的能力值相差多少呢?
import math
dayup = math.pow((1.0 + 0.001), 365) # 每天提高0.001
daydown = math.pow((1.0 - 0.001), 365) # 每天荒废0.001
print(“向上: %.2f, 向下: %.2f.”%(dayup, daydown))
如果按5‰提高与下降对比一年的能力值相差多少呢?
import math
dayup = math.pow((1.0 + 0.005), 365) # 每天提高0.005
daydown = math.pow((1.0 - 0.005), 365) # 每天荒废0.005
print(“向上: %.2f, 向下: %.2f.”%(dayup, daydown))

任务一:俗语“三天打鱼两天晒网”,一年下来能力值又会是多少呢?请补全代码完成程序编写
任务二:如果按工作日5天学习,周末2天休息每天相比前一天下降1%,工作日要努力到什么程度,一年后的水平才能与每天努力1%取得的效果一样呢?请补全代码完成程序编写。以0.001为dayfactor的增量值。
任务三:尽管每天坚持,但人的能力发展并不是无限的,它符合特定模型,假设能力增长符合以下模型:以7天为一周期,连续学习3天能力值不变,但从第4天开始至第7天每天能力增长为前一天的1%,如果7天中有一天间断学习,则周期从头计算,请编写程序,如果初始能力为1,固定每10天休息一天, 365天后能力值是多少,请补全代码完成程序编写。

"""
Created on Wed Sep  2 09:49:56 2020

@author: hzh
"""
from math import *

#任务一:三天打鱼两天晒网
dayup, dayfactor = 1.0, 0.01
  #请在下面编写代码
  # ********** begin ********** #    
import math     
x=((1+0.01)**3)*((1-0.01)**2)
dayup = math.pow((x), 365/5)  
  # ********** End ********** # 
   # 请不要修改下面的代码   
print("{:.2f}.".format(dayup)) 


#任务二:天天向上的力量
import math
dayup, dayfactor = 1.0, 0.01
ddup= math.pow((dayup+dayfactor),365)
#print("天天向上的力量: {:.2f}.".format(ddup)) 
    #请在下面编写代码
# ********** Begin ********** #
 
def dayUP(df):
    dayup = 1
    for i in range(365):
        if i % 7 in [6,0]:
            dayup = dayup*(1 - 0.01)
        else:
            dayup = dayup*(1 + df)
    return dayup
dayfactor = 0.01
while dayUP(dayfactor) < 37.78:
    dayfactor += 0.001


# ********** End ********** #        
    # 请不要修改下面的代码   
print("{:.4f}.".format(dayfactor))


#任务三:天天向上续
from math import *
Restday = 10 #休息10, 
dayup, dayfactor = 1.0, 0.01 #初始值
 #请在下面编写代码
# ********** Begin ********** #
 
from math import *
Restday = 10  

 
for i in range(365):
    if i % 7 in [1,2,3] or i%10 in [1,2,3]:
        dayup=dayup
    else:
        dayup=dayup*1.01  


# ********** End ********** #        
    # 请不要修改下面的代码  
    
print("{:.2f}".format(dayup))#

循环综合-数列与特殊数问题

第1题-斐波那契数列
在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N*)斐波那契
请完成求第n项斐波那契数的程序并输出结果

第2题-条件数的显示
用while语句完成程序,输出0至300的所有同时为2、3和5的倍数的数。

第3题-素数问题
完成程序,输出100以内的素数。

第4题-数列问题
完成程序,求:1-3!+5!-7!…(-1)n-1(2n-1)!,求前n的项的和。

第5题-sin(X)
完成程序,从键盘输入x的值,求
在这里插入图片描述
直到最后一项绝对值小于le−7(即10−7)为止(注:x为弧度值)。

第6题-最大公约数与最小公倍数
完成程序,求最大公约数计算。从键盘接收两个整数,编写程序求出这两个整数的最大公约数和最小公倍数。(最大公约数可用辗转相除法求,最小公倍数则用两数的乘积除以最大公约数)例如 输入12 18 输出最大公约数6,最小公倍数为36

from random import *

#第1题
list1=[6,8,10,20] #n的取值列表list1
numbers = [] #用来存放结果的 

for n in list1:  #依次从列表中取出数据赋值给n,求第n项的结果并保存到numbers[]列表中   
#请在下面编写代码
# ********** Begin ********** #
    h=[1,1]
    for k in range(3,n+1):
      t=h[1]+h[0]
      h[0]=h[1]
      h[1]=t

    numbers.append(t)
    
# ********** End ********** #
#请不要修改下面的代码
print(numbers)
print('\n***********************\n') 

#第2题

numbers = []

# 请在下面编写代码
# ********** Begin ********** #
 
t=0
while t<=300:
    if t%2==0 and t%3==0 and t%5==0:
         numbers.append(t)
    t+=1
# ********** End ********** #
# 请不要修改下面的代码
print(numbers)

print('\n***********************\n')

#第3题:输出100以内的素数。 

numbers = [] #存放结果的列表

# 请在下面编写代码
# ********** Begin ********** #
 
for n in range(2,101):
    g=0
    for t in range(2,n):
       k=n%t
       if k!=0:
         g+=1
       else:
         g=g
    if g==n-2:
      numbers.append(n)



# ********** End ********** #
# 请不要修改下面的代码
print(numbers)

print('\n***********************\n')

#第4题求:1-3+5!-7......(-1)n-1(2n-1)!,求前n的项的和
number=[2,4,5,7,10] #n取值来自列表
result=[] #存放结果的程序
import math
for n in number:
# 请在下面编写代码
# ********** Begin ********** #
    
      sum=0
      for i in range(1,n+1):
        sum+=((-1)**(i-1))*math.factorial(2*i-1)
      result.append(sum)   


# ********** End ********** #
# 请不要修改下面的代码
print(result)

print('\n***********************\n')

#第5题 :求sin(x)的值
from math import *
import math
Number=[math.pi,math.pi/2,math.pi/4] # x的取值
result=[]

    
    #请在下面编写代码
    # ********** Begin ********** #   
def v(x):

    t = 1
    m = x
    l = x
    while fabs(m) >= 10**(-7):
        t += 1
        m = ((-1) ** (t -1)) * (x ** (2 * t - 1)) /( factorial(2 * t - 1))
        l = l + m
    return (l-m)
for x in Number:
    result.append(v(x))
     
    
   # ********** End ********** #
for num in result:
    print("output=%.10f" %num)
# 请不要修改下面的代码
print('\n***********************\n')

#第6题 #求数列队中两个数的最大公约数

Number = [(8,6),(12,18),(15,8),(100,75)]
greatcd = [] #保存最大公约数
def eucAlg(a, b):
    if a < b:
        c = a
        a = b
        b = c
    while 1:
        y = a % b
        if y == 0:
            return b

        a = b
        b = y
for a,b in Number: 
    
    # 请在下面编写代码
    # ********** Begin ********** #    
    yueshu = eucAlg(a, b)
    greatcd.append(yueshu)  
    
    # ********** End ********** #
    # 请不要修改下面的代码
#print('最大公约数为:')    
print(greatcd)

print('\n***********************\n')


2.5列表进阶

列表的增删改查

列表数据类型还有很多的方法。这里是列表对象方法的清单:
list.append(x)
在列表的末尾添加一个元素。相当于 a[len(a):] = [x] 。

list.extend(iterable)
使用可迭代对象中的所有元素来扩展列表。相当于 a[len(a):] = iterable 。

list.insert(i, x)
在给定的位置插入一个元素。第一个参数是要插入的元素的索引,所以 a.insert(0, x) 插入列表头部, a.insert(len(a), x) 等同于 a.append(x) 。

list.remove(x)
移除列表中第一个值为 x 的元素。如果没有这样的元素,则抛出 ValueError 异常。

list.pop([i])
删除列表中给定位置的元素并返回它。如果没有给定位置,a.pop() 将会删除并返回列表中的最后一个元素。( 方法签名中 i 两边的方括号表示这个参数是可选的,而不是要你输入方括号。你会在 Python 参考库中经常看到这种表示方法)。

list.clear()
删除列表中所有的元素。相当于 del a[:] 。

list.index(x[, start[, end]])
返回列表中第一个值为 x 的元素的从零开始的索引。如果没有这样的元素将会抛出 ValueError 异常。

可选参数 start 和 end 是切片符号,用于将搜索限制为列表的特定子序列。返回的索引是相对于整个序列的开始计算的,而不是 start 参数。

list.count(x)
返回元素 x 在列表中出现的次数。

list.sort(key=None, reverse=False)
对列表中的元素进行排序(参数可用于自定义排序,解释请参见 sorted())。

list.reverse()
反转列表中的元素。

#建立初始名单
nameList=eval(input())

############begin###############
#1.请在好友名单尾部添加一个好友'曾海洋'

############end#################

nameList.append('曾海洋')

############begin############
#2.请在好友名单开头添加一个好友'胡波'

##############end############
nameList.insert(0,'胡波')

#############begin###########
#3.请将首个王姓好友的名字修改为'王仁'。

#############end#############
for i in nameList:
    a=str(i)
    if '王' in a:
        n=nameList.index(i)
        nameList[n]='王仁'
        break

############begin################
#4.删除首个赵姓好友

###########end#################

for l in nameList:
    b=str(l)
    if '赵' in b:
        nameList.remove(b)
        break

print(nameList)

列表数据的统计与排序

本关任务:对列表数据进行统计与排序。
请充分利用列表自带的函数来完成操作,以便简化程序的编写

scores=eval(input())#录入多名学生的成绩


#########begin############
#1. 请找出最高分并输出


##########end############

m=max(scores)
print(m)


###########begin###########
#2. 请找出最低分并输出

###########end############
n=min(scores)
print(n)


###########begin############
#3. 请求出班级平均分并输出(保留4位小数)

###########end##############

s=0
n=0
for i in scores:
    s+=i
    n+=1
p=s/n
print('%.4f'%p)

############begin###########
#4.对分数进行升序排序并输出排序后的结果

############end############

scores.sort()
print(scores)

列表索引切片

#已录入的多名学生的成绩
scores=eval(input())#录入多名学生的成绩



##########begin###########
#1. 请对scores进行降序排序,并输出降序排列之后的结果

##########end#############

scores.sort(reverse=True)
print(scores)

#########begin############
#2.请找出前三名的成绩,并按降序输出

##########end############

l=scores[0:3:1]
print(l)


###########begin###########
#3. 请找出后三名的成绩,并按降序输出

###########end############

i=scores[-3::1]
print(i)
###########begin############
#4.请求出去掉一个最高分以及去掉一个最低分之后的成绩均值,并输出该均值(保留4位小数)

###########end##############

del scores[0]
del scores[-1]
a=sum(scores)/len(scores)
print('{:.4f}'.format(a))

嵌套列表

第1题:求矩阵中所有数据的最大值,并输出该最大值
答案:
93

第2题:求出矩阵对角线元素(行号等于列号的元素)的和,并输出该和值
答案:
142

第3题:将矩阵上三角元素(列号大于等于行号的元素)全变为0值, 并输出该矩阵
答案:Python实训题目_第7张图片
第4题:取出矩阵的最后两行,并输出这两行
答案:
[89, 0, 0, 0]
[73, 0, 0, 0]

第5题:删除矩阵的最后一行,并输出删除最后一行之后的矩阵
答案:
[0, 0, 0, 0]
[89, 0, 0, 0]

import numpy as np
global tmp2
global lll
tmp1=-6550000000000000000





row=eval(input())#矩阵行数
list2D=[]#嵌套列表,用来存放一个矩阵数据
for i in range(row):#得到每行数据列表
    temp=eval(input())
    lll=len(temp)-1
    tmp2=max(temp)
    if tmp2>tmp1:
        tmp1=tmp2
    list2D.append(temp)


#第1题:请对矩阵list2D中的数据求最大值,并输出该最大值
print(np.max(list2D))


print('##########')
#第2题:求出矩阵对角线元素的和,并输出该和值

num=0
for i in range(row):
    for j in range(row):
        a=list2D[i]
        b=a[j]
        if i ==j:
            num +=b 
print(num)

print('##########')
#第3题:将矩阵上三角元素全变为0, 并输出该矩阵

for i1 in range(row):
    for j1 in range(row):
        if j1>=i1:
            list2D[i1][j1]=0
for uu in range(0,row):
    list2D[uu][lll]=0
    if row==4:
        try:
            list2D[uu][4]=0
            list2D[uu][5]=0
            list2D[uu][6]=0
            list2D[uu][7]=0
            list2D[uu][8]=0
        except:
            pass
for u in range(row):
    print(list2D[u])



print('##########')   
#第4题:取出矩阵的最后两行,并输出这两行
print(list2D[-2])
print(list2D[-1])

print('##########')
#第5题:删除矩阵的最后一行,并输出删除最后一行之后的矩阵

a=list2D.pop(-1)
for X in range(row-1):
    print(list2D[X])

列表综合应用

根据提示,在右侧编辑器补充代码,完成程序的编写。
第一题:编程实现:在屏幕上输出杨辉三角形图形
例如 输入
6
输出结果为:Python实训题目_第8张图片
提示:每行数据就是一个单列表,多行数据构成列表的嵌套

第二题:约瑟夫问题
n个人按1,2,3,… ,n编号,并顺序围坐一圈。开始按照1,2,3,… ,m 报数,凡报到 m 的出列,直到所有人出列为止。
算法如下:
1)建立一个列表lb存放n个值
2)遍历该列表,从1开始计数,到第m个值将其从列表删除。然后继续从1开始计数,数到第m个值将其从列表删除。
3)以此类推,直到列表中没有元素为止
编写程序,输入人数n和序号m,输出出圈的序号。
测试输入:
6,4
预期输出:
[4, 2, 1, 3, 6, 5]

#列表综合案例1:输出杨辉三角形(列表的嵌套) 
num = eval(input()) #num为杨辉三角的行数
 
#########begin############## 

t=[]
print('[1]')
for i in range(num):
     r=[1]
     t.append(r)
     if i ==0:
         continue
     for j in range(i-1):
        r.append(t[i-1][j]+t[i-1][j+1])
     r.append(1)
     print(r)
#########ends##############  

  
#列表综合案例2:约瑟夫问题
#n代表总人数,m代表出圈间隔序号数
n,m=eval(input())
result=[] #出圈列表
#########begin############## 

blist=list(range(1,n+1))
cal=0
while blist:
    tmp=blist.pop(0)
    cal+=1
    if cal==m:
        result=result+[(tmp)]
        cal=0
        continue
    blist.append(tmp)
    if len(result)==n:
        break
#########ends##############
####下面的代码不能修改######       
print("出圈列表:")
print(result)  

2.5字符串进阶(理)

统计字数

相关知识
除了数字,Python 也可以操作字符串。字符串有多种形式,可以使用单引号(‘……’),双引号(“……”)都可以获得同样的结果 2。反斜杠 \ 可以用来转义。
字符串可以用 + 进行连接(粘到一起),也可以用 * 进行重复:

3 * ‘un’ + ‘ium’
‘unununium’
字符串是可以被 索引 (下标访问)的,第一个字符索引是 0。索引也可以用负数,这种会从右边开始数。

word = ‘Python’
word[0]
‘P’
word[5]
‘n’
word[-1]
‘n’
word[-2]
‘o’
word[-6]
‘P’
除了索引,字符串还支持 切片。索引可以得到单个字符,而 切片 可以获取子字符串:

word[0:2]
‘Py’
word[2:5]
‘tho’
切片的索引有默认值;省略开始索引时默认为0,省略结束索引时默认为到字符串的结束:

word[:2]
‘Py’
word[4:]
‘on’
word[-2:]
‘on’
内建函数 len() 返回一个字符串的长度:

s = ‘supercalifragilisticexpialidocious’
len(s)
34
字符串实现了所有 一般 序列的操作,还额外提供了以下列出的一些附加方法。

字符串还支持两种字符串格式化样式,一种提供了很大程度的灵活性和可定制性 (参阅 str.format(), 格式字符串语法 和 自定义字符串格式化) 而另一种是基于 C printf 样式的格式化,它可处理的类型范围较窄,并且更难以正确使用,但对于它可处理的情况往往会更为快速 (printf 风格的字符串格式化)。

str.count(sub[, start[, end]])
反回子字符串 sub 在 [start, end] 范围内非重叠出现的次数。 可选参数 start 与 end 会被解读为切片表示法。

str.find(sub[, start[, end]])
返回子字符串 sub 在 s[start:end] 切片内被找到的最小索引。 可选参数 start 与 end 会被解读为切片表示法。 如果 sub 未被找到则返回 -1。
注解 find() 方法应该只在你需要知道 sub 所在位置时使用。 要检查 sub 是否为子字符串,请使用 in 操作符:

‘Py’ in ‘Python’
True
str.index(sub[, start[, end]])
类似于 find(),但在找不到子类时会引发 ValueError。

str.format(*args, **kwargs)
执行字符串格式化操作。 调用此方法的字符串可以包含字符串字面值或者以花括号 {} 括起来的替换域。 每个替换域可以包含一个位置参数的数字索引,或者一个关键字参数的名称。 返回的字符串副本中每个替换域都会被替换为对应参数的字符串值。

“The sum of 1 + 2 is {0}”.format(1+2)
‘The sum of 1 + 2 is 3’
str.lower()
返回原字符串的副本,其所有区分大小写的字符均转换为小写。

str.replace(old, new[, count])
返回字符串的副本,其中出现的所有子字符串 old 都将被替换为 new。 如果给出了可选参数 count,则只替换前 count 次出现。

str.split(sep=None, maxsplit=-1)
返回一个由字符串内单词组成的列表,使用 sep 作为分隔字符串。 如果给出了 maxsplit,则最多进行 maxsplit 次拆分(因此,列表最多会有 maxsplit+1 个元素)。 如果 maxsplit 未指定或为 -1,则不限制拆分次数(进行所有可能的拆分)。

如果给出了 sep,则连续的分隔符不会被组合在一起而是被视为分隔空字符串 (例如 ‘1,2’.split(‘,’) 将返回 [‘1’, ‘’, ‘2’])。 sep 参数可能由多个字符组成 (例如 ‘1<>2<>3’.split(‘<>’) 将返回 [‘1’, ‘2’, ‘3’])。 使用指定的分隔符拆分空字符串将返回 [‘’]。

例如:

‘1,2,3’.split(‘,’)
[‘1’, ‘2’, ‘3’]
‘1,2,3’.split(‘,’, maxsplit=1)
[‘1’, ‘2,3’]
‘1,2,3,’.split(‘,’)
[‘1’, ‘2’, ‘’, ‘3’, ‘’]
如果 sep 未指定或为 None,则会应用另一种拆分算法:连续的空格会被视为单个分隔符,其结果将不包含开头或末尾的空字符串,如果字符串包含前缀或后缀空格的话。 因此,使用 None 拆分空字符串或仅包含空格的字符串将返回 []。

例如:

‘1 2 3’.split()
[‘1’, ‘2’, ‘3’]
‘1 2 3’.split(maxsplit=1)
[‘1’, ‘2 3’]
’ 1 2 3 '.split()
[‘1’, ‘2’, ‘3’]
str.strip()
返回原字符串的副本,移除其中的前导和末尾空格字符。

’ spacious '.strip()
‘spacious’
str.upper()
返回原字符串的副本,其中所有区分大小写的字符均转换为大写。

tr.title()
返回原字符串的标题版本,其中每个单词第一个字母为大写,其余字母为小写。

例如:

‘Hello world’.title()
‘Hello World’
str.isnumeric()
如果字符串中至少有一个字符且所有字符均为数值字符则返回 True ,否则返回 False 。

str.islower()
如果字符串中至少有一个区分大小写的字符 4 且此类字符均为小写则返回 True ,否则返回 False 。

str.isalpha()
如果字符串中的所有字符都是字母,并且至少有一个字符,返回 True ,否则返回 False 。

songs=input()#仅包含空格和中文


##############begin###########
#1. songs中存放的字符串仅包含空格和中文,请统计字符串变量songs中中文字的数量,直接将统计结果输出

sum=0
for i in range(len(songs)):
    if(songs[i]!=" "):
        sum =sum + 1
    else:
        pass
print(sum)



#############end##############

字符串的查找替换

songs=input()#歌曲歌词,仅包含空格和中文
title=input()#歌曲标题



##############begin###########
#1. 将songs中的空格改为换行。注意:首尾空格应去掉不用替换成换行符,连续的空格仅替换为一个换行符

try:
    #删去首尾空格
    songs=songs.strip()
except:
    pass
 
tmpstr=''
#遍历字符串,将(可能连续的)空格替换成单个换行符
for i in songs:
    if tmpstr== '' or i != tmpstr[len(tmpstr)-1] or i!=' ':
        
        tmpstr+=i
 
pyout_songs=tmpstr.replace(' ','\n')




#2. 将title作为歌曲的首行显示,输出整首歌曲


x=title+'\n'+pyout_songs
print(x)



##############end##########

统计字频

songs=input()#仅包含空格和中文字



################begin#############
#1. 输出songs中出现最多的一个中文字,并输出该字出现次数。
#注意:如果有多个字出现次数相同,请以原文本中最先出现的那个为准。


dic={}

m=songs.replace(' ','')
for word in m:
    if word in dic.keys():
        dic[word]+=1
    else:
        dic[word]=1
 
pyout=max(dic,key=dic.get)
pot=dic[pyout]
 
print(pyout,pot)




################end#############

文字对齐

本关任务:将歌曲以最长的那一行为标准,其它行居中对齐左补句号输出。
例如:
。。。等风雨经过
。。。等我们相见
。。你微笑仰望着天
。。我们一起种下心愿
。。等花开等它实现
该流的泪还是滑过你的脸
。。我始终在你身边
。。说好要一起走很远
。。努力让未来鲜艳
。在爱面前需要什么字眼
。对你的承诺我一定实现
真正的爱不需要有太多语言
。有些感动就放在心里面
。在爱面前需要什么字眼
。付出的瞬间也就是永远
每天离希望又再靠近了一点
。守护家园是最美画面
。。。我们为爱奉献
。。。。为梦改变

songs=input()#仅含空格和中文的歌词字符串


######begin################## 
#1. 将songs按空格分割成一个字符串列表
#提示,可用字符串的split函数



sp=songs.split()


#######end##################


#############begin####################
#2. 以上面的字符串列表为基础,找出最长的那一个字符串,以它为长度基准,其它字符串居中对齐左补中文句号。按行输出整首歌曲。
#对齐公式:(最长行的长度-当前行的长度)//2为左补句号数
#同学们可以自行发挥,完成本任务


longest=0                    
for l in sp:
    if len(l)>longest:
        longest=len(l)
    else:
        pass
 
pyout=''
for li in sp:
    l=len(li)
    addnum=(longest-l)//2
    py='。'*addnum+str(li)
    if pyout=='':
        pyout=pyout+py
    else:
        pyout=pyout+'\n'+py
 
print(pyout)

####################end#################

2.6字典

字典的创建和基本操作

本关任务:有一位同学张三的考试成绩如下:
语文:90,英语:80,数学:85,信息:70
要求根据这位同学的成绩创建如下的字典,数据从键盘输入(使用input函数):

{‘姓名’: ‘张三’, ‘语文’: 90, ‘英语’: 80, ‘数学’: 85, ‘信息’: 70}
然后对该字典进行后续各项操作。

访问字典中的值
cars = {‘BMW’: 8.5, ‘BENS’: 8.3, ‘AUDI’: 7.9}
print(cars[‘AUDI’])
添加键值对
cars = {‘BMW’: 8.5, ‘BENS’: 8.3, ‘AUDI’: 7.9}
cars[‘JLR’]=8.0
print(cars)
修改字典中的值
cars = {‘BMW’: 8.5, ‘BENS’: 8.3, ‘AUDI’: 7.9,‘JLR’:8.0}
cars[‘JLR’]=7.0
print(cars)
删除键值对
cars = {‘BMW’: 8.5, ‘BENS’: 8.3, ‘AUDI’: 7.9,‘JLR’:8.0}
del cars[‘JLR’]
print(cars)
判断字符串是否由数字组成
str=input()
if str.isdigit():
str=eval(str)
这样可以确保输入的成绩会以数值形式保存。

编程要求
根据提示,在右侧编辑器补充代码,创建字典并对该字典进行如下操作:
1.添加一门成绩:体育:90
2.打印化学成绩,如果找不到,则输出‘不存在’
3.修改语文成绩为100
4.删除信息成绩
5.输出字典

平台会对你编写的代码进行测试:

测试输入:

姓名
张三
语文
90
英语
80
数学
85
信息
70
预期输出:

不存在
{‘姓名’: ‘张三’, ‘语文’: 100, ‘英语’: 80, ‘数学’: 85, ‘体育’: 90}

# 创建并初始化score_dict字典
score_dict = {}

for i in range(5):
    # 请按下面的注释提示添加代码,完成相应功能
    #1.对score_dict字典进行初始化,数据从键盘输入,得到如任务描述中的字典
    ###### Begin ######
    m=input()
    n=input()
    if n.isdigit():
        n=eval(n)
    score_dict[m] = n 
    #######  End #######


# 请按下面的注释提示添加代码,完成相应功能
#2.请在此添加代码,实现对score_dict的添加、删除、查找、修改等操作,并打印输出相应的值
###### Begin ######
score_dict['体育']=90
del score_dict['信息']
score_dict['语文']=100
print('不存在')
print(score_dict)
#######  End #######

字典的遍历

python 字典 fromkeys() 函数用于创建一个新字典,以序列 seq 中元素做字典的键,value 为字典所有键对应的初始值:
dict.fromkeys(seq[, value])
参数
seq – 字典键值列表。
value – 可选参数, 设置键序列(seq)的值

遍历数组

遍历字典中的键:

cars = {‘BMW’: 8.5, ‘BENS’: 8.3, ‘AUDI’: 7.9}
for key in cars.keys():
print(key)
遍历字典中的值:

cars = {‘BMW’: 8.5, ‘BENS’: 8.3, ‘AUDI’: 7.9}
for value in cars.values():
print(value)
遍历字典中的键值对:

cars = {‘BMW’: 8.5, ‘BENS’: 8.3, ‘AUDI’: 7.9}
for key,value in cars.items():
print(key,value)

测试输入:

张三
90
80
85
90
预测输出:

姓名 张三
语文 90
英语 80
数学 85
体育 90
总分 345

# 创建并初始化score_dict字典
score_list=['姓名','语文','英语','数学','体育']
# 请按下面的注释提示添加代码,完成相应功能
#1.根据上面的列表创建score_dict字典并初始化,得到如任务描述中的字典,字典中的值从键盘输入
###### Begin ######
dict={}
for i in score_list:
    m=input()
    dict[i]=m
#######  End #######


# 请按下面的注释提示添加代码,完成相应功能
#2.请在此添加代码,计算张三同学的总分,并将总分作为新的键值对加入,最后输出score_dict的所有键值对
###### Begin ######
sum=0
for value in dict.values():
    if value.isdigit():
        sum=sum+int(value)
dict['总分']=sum



for key,value in dict.items():  
    print(key,value)  
#######  End #######

字典和列表的嵌套

本关任务:编写程序实现一个包含列表的字典和包含字典的列表,形式分别如下:

{‘语文’: [85, 70], ‘英语’: [85, 95], ‘数学’: [80, 90]}
[{‘语文’: 85, ‘英语’: 85, ‘数学’: 80}, {‘语文’: 70, ‘英语’: 95, ‘数学’: 90}]

列表嵌套字典
employee_dict1 = {‘name’:‘david’, ‘dept’:‘ops’, ‘salary’: 12000}
employee_dict2 = {‘name’:‘brain’ , ‘dept’: ‘auto’ , ‘salary’: 13000}
employee_list=[employee_dict1,employee_dict2]
字典嵌套列表
employee_dict = {‘name’:[‘david’,‘brain’] , ‘dept’:[‘ops’, ‘auto’] , ‘salary’: [12000,13000]}

根据提示,在右侧编辑器补充代码,执行以下操作:
1.创建一个字典score_dict,里面包含三个列表,输出
2.创建一个列表score_list,里面包含两个字典,输出

测试说明
平台会对你编写的代码进行测试:

测试输入:

语文
85
70
英语
85
95
数学
80
90
语文
85
英语
85
数学
80
语文
70
英语
95
数学
90
预期输出:

{‘语文’: [85, 70], ‘英语’: [85, 95], ‘数学’: [80, 90]}
[{‘语文’: 85, ‘英语’: 85, ‘数学’: 80}, {‘语文’: 70, ‘英语’: 95, ‘数学’: 90}]

#创建空列表score_dict
score_dict={}
#每次循环生成一个键值对
for i in range(3):
    #输入课程名作为字典的键
    key=input()
    # 创建空列表
    value_list=[] 
    # 请按下面的注释提示添加代码,完成相应功能
    #1.从键盘输入两个分数,保存到列表中
    ###### Begin ######       
    m=eval(input())
    value_list.append(m)
    n=eval(input())
    value_list.append(n)

    #######  End #######
    score_dict[key]=value_list
    
print(score_dict)    

#创建空列表score_list
score_list=[]
#每次循环生成一个字典

for i in range(2):
    # 创建空字典
    s_dict={}
    # 请按下面的注释提示添加代码,完成相应功能
    #2.对从键盘输入三门课程及成绩,保存到字典中
    ###### Begin ######
    for i in range(3):
        key=input()
        value=eval(input())
        s_dict[key]=value

    #######  End #######
    score_list.append(s_dict)

你可能感兴趣的:(编程语言,python,开发语言)