不好意思鸽了有点久…下面来展示一下我这次培训的作业吧!
一.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)
结果不用我多说吧,看到大家都有遇到过,就是。。。就就就很尴尬,我试了好久都没找出原因。直到看了大家的代码。。。
害。。。原来就几行的事。。。
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)
二.判断是否为换位符
彩笔只会用最简单的方法-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))
三.判断是否是山脉数列
我写的代码比较简单。。。所以看到学长发的那段基本看不懂的代码我就开始慌了= =。
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’]
呃,刚刚尝试了一下,这段代码还是存在问题的,我有时间再去调整下吧。例如:
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们都好强,在大数协学到了很多知识,非常感谢各位同事和部长们,希望以后大家一起努力!