大数协2020.11.03培训作业

大数协2020.11.03培训作业

不好意思鸽了有点久…下面来展示一下我这次培训的作业吧!

一.1000以内的素数

emmmm,这个作业想了我好久了…上水课时偷偷在课上用手机敲,但是一直出现问题。做这份作业时,我总共有如下这几个思路:
1.两个for循环+if判断余数是否为0;
2.用while,当出现余数为0时跳出循环;
3.设置函数def(i)使满足除以任一∈[2,i]余数都不为0时return i.

后两种实验了很多次都没成功,害,而且第一种也耗费了我好长时间。下面主要列出第一种方法

for i in range(2,1001):
	for j in range(2,i):
		if i%j ==0:
			break
		else:
			print(i)

结果不用我多说吧,看到大家都有遇到过,就是。。。大数协2020.11.03培训作业_第1张图片就就就很尴尬,我试了好久都没找出原因。直到看了大家的代码。。。

啊我去原来还有for else语句的啊。。。
大数协2020.11.03培训作业_第2张图片

害。。。原来就几行的事。。。

for i in range(2,1001):
    for j in range(2,i):
        if i%j==0:
            break#跳出最近一层for循环,开始代入下一个i值
    else:#else放在和for相同位置,即对所有j元素进行一次迭代后,如果对所有j都不满足i%j==0这个条件,才进行else语句。
        print(i)

看了大家的代码还有用true,false判断的,大家都好厉害啊。。。(一开始确实找不到上面那种方法的问题,只好借鉴一下各位的,大家真的很厉害hhh)

count = 0
for i in range(2,1001):
    a = True
    for j in range(2,i):
        if i%j==0:
            a = False#只要遇到余数为0就返回false值并退出最近一层for循环开始下一个i值的判断
            break
    if a==True:
        count +=1
        print("%d."%count,i)
total = count
print("1000以内的素数一共有%d个"%total)

两种方法输出如下图
大数协2020.11.03培训作业_第3张图片
大数协2020.11.03培训作业_第4张图片

二.判断是否为换位符

彩笔只会用最简单的方法-w-

a=list(input("请输入第一段字符串"))
b=list(input("请输入第二段字符串"))
a1 = a[:]
b1 = b[:]
a.sort()
b.sort()
#这里要注意,用list.sort()函数如果用a1=a,无论是在前还是在后,a1值也会随a一起改变,这里最好的方法就是复制一段a的列表(a=a[:])([:]表示将a从第一项复制到最后一项)
print("第一段字符串是:",a1)
print("第二段字符串是:",b1)
if a==b:
    print("{}与{}是换位符".format(a1,b1))
else:
    print("{}与{}不是换位符".format(a1,b1))

大数协2020.11.03培训作业_第5张图片

三.判断是否是山脉数列
我写的代码比较简单。。。所以看到学长发的那段基本看不懂的代码我就开始慌了= =。

while True:#主要想试多几遍
    a = list(input("请输入一组数:"))
    print(a)
    print()
    if max(a) == a[0] or max(a) == a[len(a)-1]:
    #判断最大值是否在数组两端
        print(a,"最高点在端点,不是山脉数组。")
    else:
        n=0
        for i in range(len(a)):
            if max(a) == a[i]:
                n=n+1
    #使山脉顶点只有一个
        if n ==1:
            b=a[0:a.index(max(a))]
            c=a[a.index(max(a))+1:]
           #这里将数组分为最大值(峰顶)左边一段和右边一段
            print("您输入的数组是:",a)
            print("顶峰是",max(a))
            print("顶峰的左边:",b)
            print("顶峰的右边:",c)
            z = True
            for elem1 in b:#判断左边是否有平坦处
                for elem2 in b[b.index(elem1)+1:]:
                    if elem1 == elem2:
                        z = False
                        break#只要有一个值重复后面就不用判断了,下同
                if z == False:
                    break
            for elem3 in c:#判断右边是否有平坦处
                for elem4 in c[c.index(elem3)+1:]:
                    if elem3 == elem4:
                        z = False
                        break
                if z == False:
                    break
            if z:
                c1= c[:]#复制c数组
                c.sort(reverse=True)#倒序
                print("倒序后右边:",c1)
                if c1==c:
            #比较c数组和c1数组(即原右边数组和整理后的右边数组)是否完全相等
                    print("原右边数组和倒叙后的数组顺序相同")
                    print(a,"是山脉数组。")
                else:
                    print("原右边数组和倒叙后的数组顺序不同")
                    print(a,"不是山脉数组。")
            if z == False:
                print(a,"有平坦区域,不是山脉数组。")

        else:
            print(a,"的顶峰有%d个,不是山脉数组。"%n)

下面是输出:
(最上端漏截的部分:)
请输入一组数:1234
[‘1’,‘2’,‘3’,‘4’]

大数协2020.11.03培训作业_第6张图片

呃,刚刚尝试了一下,这段代码还是存在问题的,我有时间再去调整下吧。例如:

大数协2020.11.03培训作业_第7张图片
最近更新完善的代码(手机上敲的),已修复上述问题。

while True:#重复输入数组判断
    a0 = list(input("请输入一组数:"))
    a = list()
    for k in a0:
        a.append(int(k))
    #将输入的字符串一个个转换为整数
    print("您输入的数组是:",a)
    print()
    if max(a) == a[0] or max(a) == a[len(a)-1]:
    #判断最大值是否在数组两端
        print(a,"最高点在端点,不是山脉数组。")
    else:
        n=0
        for i in range(len(a)):
            if max(a) == a[i]:
                n=n+1
    #使山脉顶点只有一个
        if n ==1:
            b=a[0:a.index(max(a))]
            c=a[a.index(max(a))+1:]
            #把数组分成最大值(峰顶)左边一段和右边一段
            print("顶峰是",max(a))
            print("顶峰的左边:",b)
            print("顶峰的右边:",c)
            z = True       
            b1= b[:]#复制b数组
            c1= c[:]#复制c数组
            b.sort()#倒序
            c.sort(reverse=True)
            print("倒序后左边:",b)
            print("倒序后右边:",c)
            if c1==c and b1==b:
                for elem1 in b:#判断左边是否有平坦处
                        for elem2 in b[b.index(elem1)+1:]:
                            if elem1 == elem2:
                                z = False
                                break
                        if z == False:
                            break
                for elem3 in c:#判断右边是否有平坦处
                        for elem4 in c[c.index(elem3)+1:]:
                            if elem3 == elem4:
                                 z = False
                                 break
                        if z == False:
                            break
            #比较b,b1数组和c,c1数组(即原数组和整理后的数组)是否完全相等
                if z:
                    print("原数组和倒叙后的数组顺序相同")
                    print(a,"是山脉数组。")
            else:
                print("原数组和倒叙后的数组顺序不同")
                print(a,"不是山脉数组。")
            if z == False:
                print(a,"有平坦区域,不是山脉数组。")

        else:
            print(a,"的顶峰有%d个,不是山脉数组。"%n)

In words,各位xdjm们都好强,在大数协学到了很多知识,非常感谢各位同事和部长们,希望以后大家一起努力!

昨晚太晚睡啦,先睡觉咯,溜了溜了~~
大数协2020.11.03培训作业_第8张图片

你可能感兴趣的:(笔记)