python练习笔记(二)
Question 11
编写一个程序,接受一串以逗号分隔的4位二进制数字作为其输入,然后检查它们是否能被5整除。能被5整除的数字将以逗号分隔的序列打印出来。
例如:
0100,0011,1010,1001
那么输出应该是
1010
解法一
def check(x): # 如果能被5整除,检查函数返回真
return int(x,2)%5 == 0 # int(x,b)将x作为字符串,将b作为转换的进制数。
# 它将被转换为小数
data = input().split(',')
# 在filter(func,object)函数中,如果通过'check'函数发现元素为真,则从'data'中挑选。
data = list(filter(check,data))
print(",".join(data))
解法二
data = input().split(',')
data = list(filter(lambda i:int(i,2)%5==0,data))
print(",".join(data))
解法三
value=[]
items=[x for x in input().split(',')]
for p in items:
intp = int(p,2)
if not intp %5: #如果能整除,结果为0,not之后为真
value.append(p)
print(','.join(value))
Question 12
写一个程序,它将找到所有在1000和3000之间的数字(包括这两个数字),使数字的每个数字都是偶数。
得到的数字应以逗号分隔的顺序打印在一行中。
解法一
values = []
for i in range(1000, 3001):
s = str(i)
if (int(s[0])%2==0) and (int(s[1])%2==0) and (int(s[2])%2==0) and (int(s[3])%2==0):
values.append(s)
print (",".join(values))
解法二
lst = []
for i in range(1000,3001):
flag = 1
for j in str(i): # 每个整数i都被转换为字符串
if ord(j)%2 != 0: # ord返回ASCII值,j是i的每个数字。
flag = 0 # 如果发现任何奇数数字,标志将变为零
if flag == 1:
lst.append(str(i)) # i作为字符串存储在列表中
print(",".join(lst))
解法三
def check(element):
return all(ord(i)%2 == 0 for i in element) # 如果所有数字i在元素中是偶数,则返回真。
lst = [str(i) for i in range(1000,3001)] # 创建字符串数据类型的所有给定数字的列表
lst = list(filter(check,lst)) # 如果检查条件失败,过滤器将元素从列表中移除
print(",".join(lst))
解法四
lst = [str(i) for i in range(1000,3001)]
lst = list(filter(lambda i:all(ord(j)%2 == 0 for j in i),lst )) # 用lambda来定义过滤函数中的函数
print(",".join(lst))
Question 13
编写一个接受句子并计算字母和数字数量的程序。
假设将以下输入提供给程序: