您的位置:首页 > 编程语言 > Python开发

python一些小习题 田字格、isodd、isnum、multi、isprime、绝对素数、哥德巴赫猜想

youngerlily 2020-06-29 05:04 176 查看 https://blog.csdn.net/youngerl

Lily学python

一些小习题,答案和我的思路差好多啊,代沟,一定是代沟……

1.1.定义函数输出一个简单的田字格。

建立主程序,由用户输入一个整数,输出更大的田字格图形。
输出结果:

这个好简单啊,Lily就厚着脸皮先放上自己的代码:

#田字格
a=int(input('请输入一个整数'))
b='- '*a+'+ '#空格真的坑死人
print('+ '+b*a)#第一行
for j in range(a):#后面的行
for i in range(a):
c='  '*a+'1 '
print('1 '+c*a)
d='- '*a+'+ '
print('+ '+d*a)

可能我功力太浅,压根没往函数那边想
好了,放老师的吧

def bc(x):
print("+ ", end="")
for i in range(x):
print("- "*x+"+ " , end="")
print()
def zj(x):
for i in range(x):
print("1 " , end="")
for j in range(x):
print("  "*x+"1 ", end="")
print()
def main():
x=eval(input("请输入一个整数"))
bc(x)
for j in range(x):
zj(x)
bc(x)
main()

对于老师的代码,我没有任何注释hhh,就是定义了两个函数分别控制两种行的输出。我还是喜欢我的代码hhh,亲生的就是不一样(捂脸)

2.实现isodd函数,

参数为整数,如果整数为奇数,返回True,否则返回False

在主程序中输入整数,调用该函数(考虑输入异常)
输出结果:
Lily的答案,等待命运的批判吧

#isodd
def isodd(a):
io=bool(0)#这是我的个人风格啦,不喜欢直接True、False
if a%2!=0:
io=bool(1)
print('{}是奇数' .format(a))
else:
print('{}是偶数' .format(a))
return io
try:
a=eval(input("请输入一个整数"))
if type(a)==int:
#这估计和老师的写法就会不一样,我超喜欢type()==这种直接的函数
isodd(a)
except:
print("输入错误")

貌似没有错误哈,那就看看大神的脑回路吧

def isodd(x):
if x%2==1:
return True
else:
return False
try:
y=int(input("请输入一个整数"))
if isodd(y):
print("{}是奇数".format(y))
else:
print("{}是偶数".format(y))
except:
print("输入错误")

冰冰凉凉,感觉差不多,我好像画蛇添足太多了(不是的我不信)

3. 实现 isnum 函数,

参数为一个字符串,如果字符串属于
整数、浮点数或复数的表示,返回 True,否则返回 False
(提示:通过输入异常实现)
在主程序中输入字符串,调用该函数
输出结果:

我好像,审题时不太明白,就没有把异常处理放进函数里,为了不啰嗦,我只放一个代码好了

def isnum(x):
try:
if int(x):
#尽管不愿意承认,这的确简洁不少,好了,打算弃暗投明
return True
except:
try:
if float(x):
return True
except:
try: #try except嵌套
if complex(x):
return True
except:
return False
y=input("请输入数值")
if isnum(y): #把输出结果都放在主程序,会是个好习惯吧
print("{}是数值".format(y))
else:
print("输入错误")

4. 实现multi函数,

参数个数不限,返回所有参数的乘积。
在主程序中,调用该函数,求多数的乘积

一开始我没明白“参数个数不限”如何实现,我就,打算让用户input哈哈哈

def multi(l):
mu=1
for i in l:
mu*=i
print (mu)

l=eval(input('请输入参数,用逗号分隔'))

multi(l)

妈妈再也不用担心我找不到计算器了
看看老师的本意吧

def multi(*b):
s=1
for x in b:
s=s*x
return s
print(multi(2,3,4,5,6,7))

不怪我,怪你的交互机制不行

5.实现isprime函数,

参数为整数。如果参数为质数,返回True,否则返回False。
在主程序中调用该函数,显示100之内的质数,每行显示五个数。
输出结果:

难点就是每行输出5个数吧,还有一个右对齐需要注意

#isprime
def isprime(a):  #判断是不是素数
for i in range(2,a):  #从2开始
if a%i==0:
return False
else:
return True
c=0  #不要放在for循环里面,否则c每次都会被刷回0,起不到计数器的作作用
for j in range(2,100):
#因为j已经定在这个范围,所以j=1的情况不需要在上面的函数体现出来
if isprime(j):
print(str(j).rjust(5),end='')  #右对齐,不换行
c+=1
if c%5==0:  #够了5个,就换行
print(end = "\n")

看看升阶版本

def isprime(a):
try:   #又一次把异常处理放在函数里
for x in range(2,a):   #难得的与老师心连心
if a%x==0:
return False
return True
except:
print("输入格式错误")
k=0
for i in range(2,100):
if isprime(i):
k=k+1
print("{:5}".format(i),end="")
if k%5==0:
print()   #哦我忘了,print()自带换行效果

6.绝对素数

一个素数,当它的数字位置对换以后扔为素数,这样的数称为绝对素数。例如17和71都是素数
编写一个程序,调用isprime函数,求出所有的两位绝对素数。
输出结果:

我以前的思路就会是,把这个数变成字符串,总觉得,[i]打得很爽(在vscode里面)。后来,我成长了hhh。现在的分离方法就是,求商求余

#绝对素数
def isprime(a):  #先判断是不是素数
for i in range(2,a):
if a%i==0:
return False
else:
return True

for j in range(10,100):  #所有两位数
J2=j//10 #分离出十位数
J1=j%10 #分离出个位数

j2=J2+J1*10 #求出颠倒之后的数
if isprime(j) and isprime(j2): #够素数,则绝对
print(j)

想不想知道老师是怎么做的?请看

def isprime(a):
try:
for x in range(2,a):
if a%x==0:
return False
return True
except:
print("输入格式错误")
for i in range(2,100):
if isprime(i) and isprime(i%10*10+i//10):
#老师就是不一样,我哭了我这么多行
print(i)

好了,思路相似

7.哥德巴赫猜想

在主程序中调用isprime函数,验证100之内大于2的偶数符合哥赫巴德猜想。每行显示五个数。
哥赫巴德猜想是任一大于2的偶数都可写成两个质数之和。
输出效果:

格式上依旧是五个一行,不着急。
等式的关系就是左边等于右边两个数的和,这俩数都是质数
左边的数据很容易得到,一个for循环遍历100之内的整数;所以就打算用第一、二个推出第三个数,然后验证最后一个数是不是质数就行。
但仅有这样的思考是不周到的,因为你会发现……

类似这样的窘境,重复了太多。每个偶数只要有一个式子成立就够啦,所以,人生苦短,及时break。

```clike
#哥德巴赫猜想
def isprime(a):
try:
for x in range(2,a):
if a%x==0:
return False
return True
except:
print("输入格式错误")
c=0
for i in range(4,100,2):
for j in range(2,i//2+1):
if isprime(j) and isprime(i-j):
print("{:2}={:2}+{:2}".format(i,j,i-j),end="    ")
c=c+1
if c%5==0:
print()
break

不用看我都知道,老师的代码肯定超简洁,枯了
我的代码,输出的,心宽体胖,代码就不放出来了
等我明白,我该怎么给结果塑形再写吧,路漫漫,还有一堆作业,还是去学习吧。

标签: