Python代码补全计划: DAY-8

声明:该系列文章首发于公众号:Y1X1n安全,转载请注明出处!本公众号所分享内容仅用于每一个爱好者之间的技术讨论,所有渗透及工具的使用都需获取授权,禁止用于违法途径,否则需自行承担,本公众号及作者不承担相应的后果。

前言:
1、以后每天会在文末附上第二天的题目,可以提前写写,打开思路;
2、遇到不懂的地方可以多看看注释和🍭相关知识点部分;
3、每题至少会给出两个写法,可根据自身情况学习掌握;
4、量不在多,需持之以恒!


Question 10

1、Question

编写一个程序,接受一系列空白分隔的单词作为输入,并在删除所有重复的单词并按字母数字排序后打印单词.

假设向程序提供了以下输入:

hello world and practice makes perfect and hello world again

然后,输出应该是:

again and hello makes perfect practice world

Hints:

如果输入数据被提供给问题,则应将其假定为控制台输入。我们使用设置容器自动删除重复的数据,然后使用sorted()对数据进行排序.


2、Solution

2.1 Python 3 count+remove
word = input().split()

for i in word:
    if word.count(i) > 1:    #计数函数返回作为参数发送的元素的总重复
        word.remove(i)     # 每次调用恰好删除一个元素

word.sort()
print(" ".join(word))

2.2 列表推导式
word = input().split()
[word.remove(i) for i in word if word.count(i) > 1 ]   # 去除操作
word.sort()
print(" ".join(word))

2.3 set函数
word = sorted(list(set(input().split()))) #  输入字符串拆分->转换为set()以存储唯一
                                          #  元素->转换为列表,以便能够应用排序
print(" ".join(word))

2.4 使用循环和判断语句
inp_string = input("Enter string: ").split()
out_string = []
for words in inp_string:
    if words not in out_string:
        out_string.append(words)
print(" ".join(sorted(out_string)))

2.5 Python 2
s = raw_input()
words = [word for word in s.split(" ")]
print " ".join(sorted(list(set(words))))

3、相关知识点🍭

3.1 count函数

在Python中,count函数可以用于字符串、列表、元组等序列类型。
具体来说,count函数的语法为:
序列.count(元素)
其中,序列表示要进行统计的序列,元素表示要统计的元素。count函数的返回值为该元素在序列中出现的次数。
例如,在一个列表中统计元素1的出现次数,可以使用以下代码:

lst = [1, 2, 3, 1, 4, 1]
count = lst.count(1)
print(count) # 输出3

在上述代码中,lst是一个列表,count函数用于统计元素1在列表中出现的次数,最后输出结果为3,表示元素1在列表中出现了三次。

同样地,在一个字符串中统计字符a的出现次数,可以使用以下代码:

s = 'hello world'
count = s.count('o')
print(count) # 输出2

在上述代码中,s是一个字符串,count函数用于统计字符’o’在字符串中出现的次数,最后输出结果为2,表示字符’o’在字符串中出现了两次。


3.2 remove函数

remove函数是一种常用的列表操作函数,用于从列表中删除指定的元素。在Python中,remove函数只能删除列表中第一个出现的指定元素,如果要删除所有指定元素,需要使用循环或其他方法。

具体来说,remove函数的语法为:

列表.remove(元素)
其中,列表表示要进行删除操作的列表,元素表示要删除的元素。remove函数会在列表中查找第一个等于元素的元素,并删除它。

例如,在一个列表中删除元素1,可以使用以下代码:

lst = [1, 2, 3, 1, 4, 1]
lst.remove(1)
print(lst) # 输出[2, 3, 1, 4, 1]

在上述代码中,lst是一个列表,remove函数用于删除元素1,由于列表中有多个元素1,remove函数只会删除第一个出现的元素1,最后输出结果为[2, 3, 1, 4, 1],表示元素1已被从列表中删除。

需要注意的是,如果要删除的元素不在列表中,remove函数会抛出ValueError异常。因此,在使用remove函数时,需要确保要删除的元素在列表中存在。

例如,在一个列表中删除不存在的元素5,会导致ValueError异常:

lst = [1, 2, 3, 1, 4, 1]
lst.remove(5) # 抛出ValueError异常

在上述代码中,lst是一个列表,remove函数用于删除元素5,由于列表中不存在元素5,remove函数会抛出ValueError异常。因此,在使用remove函数时,需要对要删除的元素进行判断,以避免出现异常。


3.3 set函数

在 Python 中,set() 函数用于创建一个无序且不重复的集合。集合是一种数据类型,类似于列表和元组,但是集合中的元素是无序的,且每个元素都是唯一的,不会重复出现。

set() 函数的语法如下:

set(iterable)
其中,iterable 是一个可迭代对象,例如列表、元组、字符串等。set() 函数会将 iterable 中的元素去重,然后将结果放入一个新的集合中,并返回该集合。

例如,下面的代码创建了一个列表 lst,然后将其转换为一个集合 s:

lst = [1, 2, 3, 2, 4, 3]
s = set(lst)
print(s)  # 输出 {1, 2, 3, 4}

可以看到,由于列表 lst 中包含重复的元素,因此将其转换为集合时,重复的元素被去除了。

集合支持一些常见的集合运算,例如并集、交集、差集等。例如,下面的代码演示了如何使用集合进行交集运算:

s1 = {1, 2, 3, 4}
s2 = {3, 4, 5, 6}
s3 = s1 & s2  # 交集运算,结果为 {3, 4}

在实际编程中,集合常常用于去重、判断元素是否存在等操作。


Question 11

Question

编写一个程序,接受逗号分隔的4位二进制数序列作为输入,然后检查它们是否被5整除。可被5整除的数字将以逗号分隔的顺序打印.

Example:

0100,0011,1010,1001

那么输出应该是:

1010

注意:假设数据是由控制台输入的。


Hints:

如果输入数据被提供给问题,则应将其假定为控制台输入.


2、Solution

2.1 Python 3 filter函数
def check(x):                   # 如果可被5整除,则检查函数返回true
    return int(x,2)%5 == 0      # int(x,b) int用法
data = input().split(',')
data = list(filter(check,data)) # 在filter(func,object)函数中,如果通过“check”函数找到True,则从“data”中选择元素
print(",".join(data))

2.2 Lambda匿名函数
data = input().split(',')
data = list(filter(lambda i:int(i,2)%5==0,data))    # Lambda匿名函数
print(",".join(data))

2.3 列表推导式
data = input().split(',')
data = [num for num in data if int(num, 2) % 5 == 0]
print(','.join(data))

2.4 生成器表达式
print(*(binary for binary in input().split(',') if int(binary,base=2)%5==0))

1、input() 函数用于读取一行输入。
2、split(',') 方法将输入的字符串以逗号为分隔符,切分成多个二进制数,并返回一个列表。
3、int(binary,base=2) 将每个二进制数转换为十进制数。
4、%5==0 判断该十进制数是否能够被 5 整除。
5、(binary for binary in input().split(',') if int(binary,base=2)%5==0) 是一个生成器表达式,它返回能够被 5 整除的二进制数。
6、* 操作符将生成器表达式的输出值拆解成多个参数,传递给 print() 函数。
7、print(*...) 函数将这些参数以空格分隔的形式打印输出。


2.5 Python 2
value = []
items=[x for x in raw_input().split(',')]
for p in items:
    intp = int(p,2)
    if not intp % 5:
        value.append(p)

print ','.join(value)

3.相关知识点🍭

3.1 二进制转10进制

可使用 Python 内置的 int() 函数。int() 函数可以将一个字符串或数字转换为整数。

具体来说,可以将二进制数表示为一个字符串,然后将其作为参数传递给 int() 函数,同时指定第二个参数 base 为 2,表示将字符串解释为二进制数。例如,下面的代码将二进制数 1101 转换为十进制数:

binary_num = "1101"
decimal_num = int(binary_num, 2)
print(decimal_num)  # 输出 13

在这个例子中,int() 函数将字符串 “1101” 解释为二进制数,并将其转换为十进制数 13。


3.2 python中的位数运算

Python 中的整数没有位数限制,因此可以直接对二进制数进行位运算,而不必将其转换为十进制数。例如,下面的代码将两个二进制数相加,然后输出其二进制表示:

a = 0b1010
b = 0b1101
c = a + b
print(bin(c))  # 输出 0b10111

在这个例子中,0b1010 和 0b1101 分别表示二进制数 10 和 13,将它们相加得到 23,然后使用 bin() 函数将其转换为二进制表示 “0b10111”。


3.3 int函数

在 Python 中,int() 函数用于将一个对象转换为整数。具体来说,int() 函数可以接受一个字符串、浮点数、布尔值、字节串(bytes)、字节数组(bytearray)等对象作为参数,并将其转换为整数。如果不能将对象转换为整数,则会抛出一个 ValueError 异常。

int() 函数的语法如下:

int(x, base=10)

其中,x 表示要转换为整数的对象,base 表示转换时使用的基数,默认为 10。如果 x 是一个字符串,那么它必须表示为指定基数的数字。

例如,下面的代码将一个字符串 s 转换为十进制数:

s = "123"
x = int(s)
print(x)  # 输出 123

如果要将一个字符串表示的二进制数转换为十进制数,可以指定 base 参数为 2。例如,下面的代码将一个二进制字符串 b 转换为十进制数:

b = "1101"
x = int(b, 2)
print(x)  # 输出 13

在这个例子中,int() 函数将字符串 “1101” 解释为二进制数,并将其转换为十进制数 13。

除了将对象转换为整数之外,int() 函数还可以用于进制转换,例如将一个十进制数转换为二进制、八进制或十六进制数。具体来说,可以使用以下方式将一个十进制数 n 转换为二进制、八进制或十六进制数:

bin_n = bin(n)   # 转换为二进制数
oct_n = oct(n)   # 转换为八进制数
hex_n = hex(n)   # 转换为十六进制数

在这些函数中,bin() 函数将一个整数转换为二进制字符串,前缀为 “0b”;oct() 函数将一个整数转换为八进制字符串,前缀为 “0o”;hex() 函数将一个整数转换为十六进制字符串,前缀为 “0x”。

3.4 filter函数

filter(func, object) 是 Python 内置函数之一,它接受两个参数,一个是函数 func,另一个是可迭代对象 object。该函数的作用是将可迭代对象中的每个元素传递给函数 func 进行判断,如果函数返回值为 True,则保留该元素,否则将其过滤掉。最终,函数返回一个新的可迭代对象,其中只包含那些函数返回值为 True 的元素。

具体来说,filter() 函数的执行过程如下:

1、对于可迭代对象中的每个元素,调用函数 func 并传入该元素作为参数。
2、如果函数 func 返回值为 True,则保留该元素,否则将其过滤掉。
3、将所有被保留下来的元素保存到一个新的可迭代对象中。
4、返回新的可迭代对象。
以下是一个使用 filter() 函数的示例代码:

def is_even(n):
    return n % 2 == 0

lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
result = filter(is_even, lst)
print(list(result))  # 输出 [2, 4, 6, 8, 10]

在这个示例中,is_even() 函数用于判断一个数是否为偶数。然后,代码使用 filter() 函数将一个列表中的所有偶数筛选出来。最终,函数返回一个新的列表,其中只包含那些偶数元素。

总的来说,filter() 函数是 Python 中用于对可迭代对象进行过滤操作的函数,它可以根据一个自定义的函数对每个元素进行判断,并将符合条件的元素保留下来。


3.5 Lambda匿名函数

Lambda 是 Python 的一种匿名函数(anonymous function),它可以快速定义简单的、单行的函数。Lambda 表达式可以用于任何需要函数对象的地方,例如作为参数传递给其他函数,或者作为其他函数的返回值。

Lambda 表达式的语法形式为 lambda arguments: expression,其中 arguments 是该函数的参数列表,可以包含零个或多个参数,用逗号分隔;expression 是该函数的返回值,也是一个表达式,通常只包含一行代码。Lambda 表达式的执行过程和普通函数类似,当 Lambda 表达式被调用时,它会执行其中的代码,并返回表达式的结果。

以下是一个使用 Lambda 表达式的示例代码:

# 使用 Lambda 表达式定义一个函数,用于计算一个数的平方
squared = lambda x: x ** 2

# 使用该函数计算某个数的平方
result = squared(5)
print(result)  # 输出 25

在这个示例中,lambda x: x ** 2 定义了一个 Lambda 表达式,用于计算一个数的平方。然后,代码将该 Lambda 表达式赋值给了一个变量 squared。最后,代码使用 squared 函数计算某个数的平方,并将结果打印出来。

Lambda 表达式可以用于任何需要函数对象的地方,例如在列表中使用 Lambda 表达式对元素进行排序,或者作为 map() 和 filter() 等函数的参数。使用 Lambda 表达式可以使代码更加简洁、易读,尤其是对于一些简单、短小的函数,使用 Lambda 表达式可以避免定义过多的函数。


3.6 生成器表达式

生成器表达式(Generator Expression)是 Python 中一种用于生成迭代器的语法结构。它类似于列表推导式(List Comprehension),但生成器表达式不会一次性生成所有的元素,而是按需逐个生成,从而节省内存空间。

生成器表达式的语法形式为 (expression for item in iterable),其中 expression 是生成表达式,item 是可迭代对象中的每个元素,iterable 是一个可迭代对象,例如列表、元组、集合或字典等。生成器表达式会根据生成表达式对可迭代对象中的每个元素进行计算,并将计算结果作为生成器的输出值,返回一个生成器对象,可以使用 next() 函数或 for 循环逐个获取生成器的输出值。

以下是一个使用生成器表达式的示例代码:

# 使用生成器表达式生成一个迭代器,用于计算所有数的平方
squares = (x ** 2 for x in range(10))

# 使用 next() 函数获取迭代器的输出值
print(next(squares))  # 输出 0
print(next(squares))  # 输出 1

# 使用 for 循环遍历迭代器的所有输出值
for square in squares:
    print(square)

在这个示例中,(x ** 2 for x in range(10)) 定义了一个生成器表达式,用于计算 0 到 9 的所有数的平方。然后,代码使用 next() 函数分别获取生成器的前两个输出值,以及使用 for 循环遍历生成器的所有输出值,并将它们打印出来。

生成器表达式可以在需要迭代的元素很多的情况下,避免一次性生成所有的元素所带来的内存开销。因此,它在 Python 中被广泛应用于迭代器的生成和处理,例如使用 map() 和 filter() 函数,或者将生成器表达式作为函数的参数等。


3.7 next函数

next() 函数是 Python 中用于获取迭代器下一个输出值的内置函数。它可以用于遍历序列类型的对象(如列表、元组、字典等)、自定义迭代器对象和生成器对象等。

next() 函数的语法形式为 next(iterator[, default]),其中 iterator 是一个迭代器对象,default 是一个可选参数,用于在迭代器已经到达末尾时返回一个默认值。如果迭代器已经到达末尾,而且没有提供默认值,则 next() 函数会抛出 StopIteration 异常。

以下是一个使用 next() 函数的示例代码:

# 创建一个列表对象
my_list = [1, 2, 3, 4, 5]

# 创建一个迭代器对象
my_iterator = iter(my_list)

# 使用 next() 函数获取迭代器的输出值
print(next(my_iterator))  # 输出 1
print(next(my_iterator))  # 输出 2
print(next(my_iterator))  # 输出 3
print(next(my_iterator))  # 输出 4
print(next(my_iterator))  # 输出 5

# 再次使用 next() 函数会抛出 StopIteration 异常
print(next(my_iterator, None))  # 输出 None

在这个示例中,my_list 是一个列表对象,my_iterator 是 my_list 的迭代器对象,使用 iter() 函数将列表对象转换为迭代器对象。然后,代码使用 next() 函数依次获取迭代器的输出值,并将它们打印出来。最后,当迭代器到达末尾时,使用带有默认值参数的 next() 函数返回了一个默认值 None。

需要注意的是,当使用 next() 函数时,迭代器会被“消耗”,即每次调用 next() 函数后,迭代器都会向前移动一个位置。因此,在使用 next() 函数时,需要确保迭代器还有足够的元素可以遍历,并且不会超出迭代器的范围。


【Next Question】

Question 12

Question:

编写一个程序,它将找到1000到3000之间的所有此类数字(都包括在内),使得数字的每个数字都是偶数。获得的数字应按逗号分隔的顺序打印在一行上。


Hints:

如果输入数据被提供给问题,则应将其假定为控制台输入.


📌 如果你对网络安全或编程感兴趣,可以搜索公众号“Y1X1n安全”,每天都会分享相关知识点,让我们一同加油!路漫漫其修远兮,吾将上下而求索。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值