Python代码补全计划: DAY-1

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

文章目录

  • Question 1
      • 1、Question:
        • Hints:
      • 2、Solution:

Question 1

1、Question:

Write a program which will find all such numbers which are divisible by 7 but are not a multiple of 5,
between 2000 and 3200 (both included).The numbers obtained should be printed in a comma-separated sequence on a single line.

写一个程序,找到所有能被7整除但不是5的倍数的数字,2000年至3200年之间(两者都包括在内)。获得的数字应以逗号分隔的顺序打印在一行上。


Hints:

Consider use range(#begin, #end) method.
考虑使用范围(#begin,#end)方法。


2、Solution:

Main author’s Solution: Python 2

l=[]
for i in range(2000, 3201):
    if (i%7==0) and (i%5!=0):
        l.append(str(i))

print ','.join(l)

时间复杂度为 O(n),其中 n 是从 2000 到 3200 之间符合条件的数字的个数。空间复杂度为 O(m),其中 m 是符合条件的数字的个数,因为需要将这些数字存储在列表或字符串中。


l=[]  # 创建一个空列表,用于存储符合条件的数字
for i in range(2000, 3201):  # 遍历2000到3200之间的所有整数(包括2000和3200)
    if (i%7==0) and (i%5!=0):  # 判断是否符合条件:能够被7整除但不能被5整除
        l.append(str(i))  # 如果符合条件,则将该数字转换为字符串,并添加到列表l中
print ','.join(l)  # 将列表l中的所有元素用逗号连接起来,并输出到控制台
整个代码使用了for循环遍历20003200之间的所有整数(包括20003200),并使用条件语句判断每个数字是否符合条件。如果符合条件,则将该数字转换为字符串,并添加到一个空列表中。最后,使用join()函数将列表中的所有元素用逗号连接起来,并输出到控制台。
append() 是 Python 列表(List)对象的一个方法,用于向列表的末尾添加一个元素。它的语法为:

list.append(elem)
其中,list 是要添加元素的列表对象,elem 是要添加的元素。执行该方法后,elem 将被添加到 list 的末尾。

示例:

my_list = [1, 2, 3]
my_list.append(4)
print(my_list)  # 输出 [1, 2, 3, 4]
在上面的示例中,append() 方法将整数 4 添加到了 my_list 列表的末尾。

My Solution: Python 3

  • Using for loops
for i in range(2000,3201):
    if i%7 == 0 and i%5!=0:
        print(i,end=',')
print("\b")

时间复杂度为 O(n),其中 n 是从 2000 到 3200 之间符合条件的数字的个数。在最坏的情况下,需要遍历从 2000 到 3200 之间的所有数字,即 n = 457。在每次迭代中,只需要进行两个取模运算和一个条件判断,这些操作的时间复杂度都是 O(1)。因此,整个代码的时间复杂度为 O(n)。

空间复杂度也很小,只需要存储符合条件的数字的个数,因此它的空间复杂度为 O(1)。

1for i in range(2000,3201):对于从 20003200(包括 20003200)之间的所有整数,依次执行下面的操作。
2if i%7 == 0 and i%5!=0::如果当前的数字能够被 7 整除且不能被 5 整除,执行下面的操作。
3print(i,end=','):输出当前的数字,并在数字之后加上逗号,而不是换行符。
4print("\b"):在所有数字输出完毕后,输出一个回退字符(backspace),从而删除最后一个逗号。

  • Using generators and list comprehension
print(*(i for i in range(2000, 3201) if i%7 == 0 and i%5 != 0), sep=",")

时间复杂度为 O(n),其中 n 是从 2000 到 3200 之间符合条件的数字的个数。空间复杂度为 O(1),因为不需要额外的空间来存储符合条件的数字。

1print(*(...), sep=","):使用print()函数输出括号中的内容,每个元素之间用逗号分隔。
2(i for i in range(2000, 3201) if i%7 == 0 and i%5 != 0):生成器表达式,用于生成从20003200之间能够被7整除但不能被5整除的所有数字。

range() 是 Python 中的一个内置函数,用于生成一个整数序列。它的语法如下:
range(stop)
range(start, stop[, step])
参数说明:
start:可选,生成的整数序列的起始值(默认为 0)。
stop:必选,生成的整数序列的终止值(不包括该值)。
step:可选,生成的整数序列的步长(默认为 1)。

3*:解包操作符,用于将生成器表达式生成的所有元素解包为print()函数的不定长参数。
4、sep=",":指定输出的元素之间用逗号分隔。

Y1X1n Solution: Python 3

result = ""
for i in range(2000, 3201):
    if i % 7 == 0 and i % 5 != 0:
        if result:
            result += ","
        result += str(i)
print(result)

时间复杂度为 O(n),其中 n 是从 2000 到 3200 之间符合条件的数字的个数。在最坏的情况下,需要遍历从 2000 到 3200 之间的所有数字,即 n = 457。在每次迭代中,只需要进行两个取模运算和一个条件判断,这些操作的时间复杂度都是 O(1)。同时,对于每个符合条件的数字,需要将它转换为字符串,并将它添加到 result 中。这些操作的时间复杂度也是 O(1)。因此,整个代码的时间复杂度为 O(n)。

空间复杂度取决于符合条件的数字的个数,因为需要将这些数字存储在 result 字符串中。在最坏的情况下,所有数字都符合条件,因此需要存储 457 个数字。因此,它的空间复杂度为 O(n)。


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

你可能感兴趣的:(Python,python)