1. 在一组单词中,查找出所有长度最长的单词,如果给定的一组单词是:“cad” ,“VB”.“Python” ,“MATLAB” , “hel1o” , “world”
则输出结果为:the longest words are:
Python
MATLAB
def proc(strings):
m = 0
lst = []
for i in range(len(strings)): #查找最长的单词
if len(strings[i]) > m:
m = len(strings[i])
for i in range(len(strings)):
if len(strings[i]) == m:
lst.append(strings[i])
return lst
strings = ['cad', 'VB', 'Python', 'MATLAB', 'hello', 'world']
result = proc(strings)
print("the longest words are:")
for item in result:
print("{: >25}".format(item))
2. 程序接收用户输入的一个数字并判断是否为正整数,如果不是正整数,则显示“请输入正整数"并等待用户重新输入,直至输入正整数为止,并显示输出该正整数。
while True:
try:
a = eval(input('请输入一个正整数: '))
if a > 0 and type(a) == int:
print(a)
break
else:
print("请输入正整数")
except:
print("请输入正整数")
3. 将程序里定义好的std列表里的姓名和成绩与已经定义好的模板拼成一段话,显示在频幕上。
std = [['张三',90,87,95],['李四',83,80,87],['王五',73,57,55]]
modl = "亲爱的{}, 你的考试成绩是: 英语{}, 数学{}, Python语言{}, 总成绩{}.特此通知."
for st in std:
cnt = 0
for i in range(1,4):
cnt += st[i]
print(modl.format(st[0],st[1],st[2],st[3],cnt))
4. 获得用户输入的以逗号分隔的三个数字,记为a、b、c,以a为起始数值,b为前后相邻数的比值,c为数列长度,产生一个等比数列,将这个数列以逗号分隔的形式输出,最后一个元素输出后无逗号。
a, b, c = [eval(x) for x in input().split(',')] #列表推导式:将a、b、c分别赋值
ls = []
for i in range(c) :
ls.append(str(a * (b ** i)))
print(",".join(ls))
等差数列通项公式: a n = a 1 + ( n − 1 ) ⋅ d a_n =a_1+(n−1)⋅d an=a1+(n−1)⋅d
等比数列通项公式: a n = a 1 ⋅ r n − 1 a_n=a_1⋅r^{n−1} an=a1⋅rn−1
5. 以100为随机数种子,随机生成3个在1(含)到9(含)之间的随机整数,计算这三个随机整数的立方和。
import random
random.seed(100) # 此处可多行
s = 0 #
for i in range(3) :
n = random.randint(1, 9)
s += n ** 3 #此处可多行
print(s)
6. 接收用户输入的以英文逗号分隔的一组数据,其中,每个数据都是整数或浮点数,打印输出这组数据中的最大值。
s = input("请输入一组数据: ")
ls = s.split(',')
lt = []
for i in ls:
lt.append(eval(i))
print(max(lt))
7. 以26个小写字母和0~9数字为基础,以用户输入的数字为种子,随机生成10个8位密码,并将每个密码在单独一行打印输出。
import random
s = input("请输入随机种子: ")
ls = []
for i in range(26):
ls.append(chr(ord('a')+i))
for i in range(10):
ls.append(chr(ord('0')+i))
random.seed(eval(s))
for i in range(10):
for j in range(8):
print(ls[random.randint(0,35)],end='')
print()
8. 利用random库和turtle库,在屏幕上绘制3个黑色的正方形,正方形的左下角点坐标和正方形边长由randint()函数产生,参数在代码中给出。
import turtle as t
import random as r
r.seed(1) #以1为随机数种子
t.pensize(2) #设置画笔宽度
for i in range(3):
length = r.randint(20,80)
x0 = r.randint(-100, 100)
y0 = r.randint(-100, 100)
t.penup() #抬起画笔,移动时不绘制轨迹
t.goto(x0,y0) #将画笔移动到指定坐标(x0,y0)
t.pd() #pd()是pendown()的缩写
for j in range(4):
t.fd(length)
t.seth(90 * (j + 1))
t.done()
9. 实现下面功能:让用户输入一个自然数n,如果n为奇数,输出表达式1+1/3+1/5+…+1/n的值;如果n为偶数,输出表达式1/2+1/4+1/6+…+1/n的值。输出结果保留2位小数。
def f(n):
s = 0
if n % 2 == 1:
for i in range(1, n + 1, 2):
s += 1/i
else:
for i in range(2, n + 1, 2):
s += 1/i
return s
n = int(input())
print('{:.2f}'.format(f(n)))
10. 获得用户输入的一个整数,记为n,以100为随机数种子,随机生成10个1到n之间的随机数,输出生成的随机数,数字之间以逗号分隔。
import random
n = eval(input('请输入一个整数:'))
random.seed(100)
for i in range(1,11):
if i < 10:
print(random.randint(1, n),end = ",")
else:
print(random.randint(1, n))
11. 若n整除n,则m是n的因子。例如:9的因子有1、3、9。定义一个因子函数,用于求整数n的所有因子列表。用户输入一个整数n,调用该因子函数,输出整数n所有因子的列表;如果输入非法字符,则检测异常,输出"输入有误!"。
def allFactor(n) :
if n <= 1 :
return[n]
if n <= 3 :
return[1, n]
i = 1
rlist = []
while i <= n :
if n % i == 0 :
rlist.append(i)
i += 1
return rlist
try :
n = eval(input("请输入一个正整数:"))
print("整数{}的因子是:{}".format(n, allFactor(n)))
except :
print("输入错误!")
12. 实现以下功能:data1.txt文件保存了一组汉字,输出该文件不同字符的数量。
f = open('data1.txt')
ls = []
for line in f:
for c in line:
if c not in ls:
ls.append(c)
f.close()
print(len(ls))
13. 获得用户输入的三个整数,以逗号分隔,分别记为:n、m、k,其中n>k。以1为随机数种子,产生n个在k和m之间的随机整数(包括和m),将这些随机数输出,每个数一行。
import random as r
r.seed(1)
s = input("请输入三个整数 n,m,k:")
slist = s.split(",")
n, m, k = eval(slist[0]), eval(slist[1]), eval(slist[2])
for i in range(n) :
print(r.randint(k, m))
总结
列表推导式
[表达式 for 变量 in 列表]
[out_exp_res for out_exp in input_list]
或者
[表达式 for 变量 in 列表 if 条件]
[out_exp_res for out_exp in input_list if condition]
a, b, c = [eval(x) for x in input().split(',')] #列表表达式
print('a:{0},b:{1},c:{2}'.format(a,b,c))
#输出结果:a:1,b:2,c:3
实例1:
>>> names = ['Bob','Tom','alice','Jerry','Wendy','Smith']
>>> new_names = [name.upper()for name in names if len(name)>3]
>>> print(new_names)
#['ALICE', 'JERRY', 'WENDY', 'SMITH']
实例2:
>>> multiples = [i for i in range(30) if i % 3 == 0]
>>> print(multiples)
#[0, 3, 6, 9, 12, 15, 18, 21, 24, 27]
字典推导式
{键表达式: 值表达式 for 迭代变量 in 可迭代对象}
{ key_expr: value_expr for value in collection }
或
{键表达式: 值表达式 for 迭代变量 in 可迭代对象 if 条件}
{ key_expr: value_expr for value in collection if condition }
实例1:
listdemo = ['Google','Runoob', 'Taobao']
# 将列表中各字符串值为键,各字符串的长度为值,组成键值对
>>> newdict = {key:len(key) for key in listdemo}
>>> newdict
#{'Google': 6, 'Runoob': 6, 'Taobao': 6}
实例2:
>>> dic = {x: x**2 for x in (2, 4, 6)}
>>> dic
#{2: 4, 4: 16, 6: 36}
>>> type(dic)
#<class 'dict'>
集合推导式
{元素表达式 for 迭代变量 in 可迭代对象}
{ expression for item in Sequence }
或
{元素表达式 for 迭代变量 in 可迭代对象 if 条件}
{ expression for item in Sequence if conditional }
实例1:
>>> setnew = {i**2 for i in (1,2,3)}
>>> setnew
#{1, 4, 9}
实例2:
>>> a = {x for x in 'abracadabra' if x not in 'abc'}
>>> a
#{'d', 'r'}
>>> type(a)
#<class 'set'>
元组推导式(生成器表达式)
(元素表达式 for 迭代变量 in 可迭代对象)
(expression for item in Sequence )
或
(元素表达式 for 迭代变量 in 可迭代对象 if 条件)
(expression for item in Sequence if conditional )
实例:
>>> a = (x for x in range(1,10))
>>> a
#<generator object <genexpr> at 0x7faf6ee20a50> # 返回的是生成器对象
>>> tuple(a) # 使用 tuple() 函数,可以直接将生成器对象转换成元组
#(1, 2, 3, 4, 5, 6, 7, 8, 9)