Python练习题

文章目录

    • 1. 实现输出 1 - 2 + 3 -­ 4 + 5 -­ 6 ... + 99 的和。
    • 2. 求100以内所有的质数2,3,5,7,11...质数只能被1和自身整除。
    • 3. 打印99乘法表。
    • 4. 有这样一种数叫回文数,如:12321(第一个等于最后一个,第二个等于倒数第二个,以此类推,直到中间仅剩一个数),写一个函数,传入一个整数,判断这个数是不是这种前后一样的数。
    • 5. 《算经》中有这样一个问题:今有鸡翁一,值钱伍;鸡母一,值钱三;鸡鶵三,值钱一。凡百钱买鸡百只,问鸡翁、母、鶵各几何?
    • 6. 实现登录,账号名为admin,密码123,则提示“登录成功”,如果账号或者密码错误,则提示“账号名或密码错误”并允许重新输入用户名和密码,如果3次登录失败,则提示“登录失败”并退出程序。
    • 7. 一些四位数,百位数字都是3,十位数字都是6,并且它们既能被2整除,又能被 3整除,求这样的四位数中最大的和最小的两数各是几?

1. 实现输出 1 - 2 + 3 -­ 4 + 5 -­ 6 … + 99 的和。

思路:偶数的时候为负数

s=0
for i in range(1,100):
    # i为偶数时置为负数
	if i%2 == 0:
		i = -i
	s += i
print(s)

2. 求100以内所有的质数2,3,5,7,11…质数只能被1和自身整除。

思路 一:质数只能被1和自身整除,每个数除以小于等于自身的所有数,如果整除的数量只有2,则表示只被1和自身整除。当然也可以求2到自身-1,那么整除的数量为0,也是质数。

for i in range(2,101):
	s = 0
	for j in range(1, i+1):
    	if i%j==0:
    		s += 1
	if s == 2:
		print(i)

思路 二:质数既然只能被1和自身整除,那么在除小于自身且大于0的数的过程中,一旦出现整除则表示不是质数。

for i in range(2,101):
	for j in range(2, i):
    	if i%j==0:
           break
  	# 与for联用的else,如果循环没有执行完,比如中途跳出,则else中的语句不会执行
  	else:
    	print(i)

3. 打印99乘法表。

思路: 两层循环,外层决定行数,内层决定列数。

for i in range(1,10):
	for j in range(1,i+1):
    # print()方法的end参数,表示print的语句以什么字符结尾,默认是\n换行符
    	print('%d * %d = %2d' % (j, i, i*j), end='  ')
  	# 用一个print打印一个换行
 	 print()

4. 有这样一种数叫回文数,如:12321(第一个等于最后一个,第二个等于倒数第二个,以此类推,直到中间仅剩一个数),写一个函数,传入一个整数,判断这个数是不是这种前后一样的数。

思路:既然要对比前后是否一致,整数肯定处理不了的,需要转换成字符串,转换成字符串只有用前后(0,-1)进行对比,比较次数为整数位数的一半取整。

def palindromic(data):
	data = str(data)
	bool_=True
	for i in range(len(data)//2):
		if data[i]!=data[-i-1] or len(data)%2==0:
			bool_=False
	if bool_:
		print("%s是回文数!"%data)
	else:
		print("%s不是回文数!"%data)

palindromic(32123)

5. 《算经》中有这样一个问题:今有鸡翁一,值钱伍;鸡母一,值钱三;鸡鶵三,值钱一。凡百钱买鸡百只,问鸡翁、母、鶵各几何?

思路:百钱买百鸡,那么鸡的总数是100只,钱总共是100,那么公鸡最多只可能有20只,母鸡最多34只,小鸡三百只?(小鸡可以100-公鸡-母鸡)

for i in range(21):  #i代表公鸡
    for j in range(34):#j代表母鸡
        k=100-i-j        #k代表小鸡数量
        if(k%3==0)and (i*5 + j*3 + k/3)==100:
            print('公鸡%2d只,母鸡%2d只,小鸡%2d只' %(i,j,k))

6. 实现登录,账号名为admin,密码123,则提示“登录成功”,如果账号或者密码错误,则提示“账号名或密码错误”并允许重新输入用户名和密码,如果3次登录失败,则提示“登录失败”并退出程序。

count = 0
while True:
    user = input("账号:")
    pwd = input("密码:")
    if user == "admin" and pwd == "123":
        print("登录成功!")
        break
    count += 1
    if count == 3:
        print("登录失败!")
        break

7. 一些四位数,百位数字都是3,十位数字都是6,并且它们既能被2整除,又能被 3整除,求这样的四位数中最大的和最小的两数各是几?

numbers = []
for i in range(1, 10):  # 必须从1开始,0就是三位数了
    for j in range(10): # 必须以10结束,才能取到9
        number = i * 1000 + 3 * 100 + 6 * 10 + j
        if number % 2 == 0 and number % 3 == 0:
            numbers.append(number)
print("max:", max(numbers))
print("min:", min(numbers))

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