Python第三天鞏固練習題(循環加強)

循環加強

練習題

1、求一個數是否是質數(素數)?

友情提示:質數是隻能被1和自身整除的數字

2、求50~150之間的質數是那些?

3、圖案的打印

4、完整計算器程序
用戶輸入第一個數據
用戶輸入操作符號
用戶輸入第二個數據
運算展示結果
擴展:eval()函數的使用

5、一個自然數與3的和是5的倍數,與3的差是6的倍數,這個自然數最小是幾?

6、在400–500之間求一個數,它被2除餘1,被5除餘3,被9除餘1,這個數是多少?

7、有一些四位數,百位數字都是3,十位數字都是6,並且它們既能被2整除,又能被3整除,求這樣的四位數中最大的和最小的兩數各是幾?
8、打印輸出標準水仙花數,輸出這些水仙花數

9.編程求一個四位自然數ABCD,它乘以A後變成DCBA

10.編程求出滿足以下條件的三位數:它除以11所得的商等於
它各位數字之和.

11.某數被80除所得的商,不但是7的倍數,而且用2,3,4,5,6去
除餘數都是1,求這 個自然數.

12.有一種最簡真分數,它們的分子與分母的乘積都是140,把
所有這樣的真分數從小到大打印出來

13.一個五位數,若在它的後面寫上一個7,得到一個六位數A,
若在它前面寫上一個7,得到一個六位數B,B是A的五倍,求此
五位數.

14.把123456789這個數乘以一個什麼數,能使它的結果不但
不含零,而且仍然是 由1,2,3,4,5,6,7,8,9這九個數字組成的,
只是順序不同而已.

15.驗證:任意一個大於9的整數減去它的各位數字之和所得
的差,一定能被9整除.

16.今有四個人,他們得年齡各不相同,他們年齡總和是129,
而其中有三個人的年齡是平方數,若倒退15年,這四人中仍
有三個人的年齡是平方數,求他們各自的年齡

17.如果兩個素數之差爲2,這樣的兩個素數就叫作"孿生數",
找出100以內的所有"孿生數".

18、判斷某一年是否是閏年

解題

​ 1、求一個數是否是質數(素數)?

友情提示:質數是隻能被1和自身整除的數字

import sys
while True:
	print("1.進入系統 2.退出系統")
	choice = int(input("請做出選擇:"))
	if choice == 1:
		num = int(input("請輸入一個數字:"))

		#定義一個布爾值,flag爲真代表是素數
		flag = True
		#range(2,num)表示了1-num之間的數字,用num整除這之間的數字,若爲0了,則不是素數,反之亦然
		for i in range(2,num):
			if num%i == 0:
				#被整除了,所以不是質數,將flag設置爲Flase
				flag = False
				#判斷出來後,不需要再循環了,所以直接跳出即可
				break
		if flag:
			print("{}是素數".format(num))
		else:
			print("%s不是素數" %(num))
	elif choice == 2:
		sys.exit()
	else:
		input("您的輸入有誤,請重新輸入~ 按任意鍵繼續")

#執行代碼
D:\網絡安全\Python\py_code>python h2-判斷素數.py
1.進入系統 2.退出系統
請做出選擇:3
您的輸入有誤,請重新輸入~ 按任意鍵繼續
1.進入系統 2.退出系統
請做出選擇:1
請輸入一個數字:67
67是素數
1.進入系統 2.退出系統
請做出選擇:1
請輸入一個數字:4
4不是素數
1.進入系統 2.退出系統
請做出選擇:2

​ 2、求50~150之間的質數是那些?

import sys
while True:
	print("1.進入系統 2.退出系統")
	choice = int(input("請做出選擇:"))
	if choice == 1:
		#使用range()函數來實現可迭代對象
		for num in range(50,151):
			#定義一個布爾值,flag爲真代表是素數
			flag = True
			#range(2,num)表示了1-num之間的數字,用num整除這之間的數字,若爲0了,則不是素數,反之亦然
			for i in range(2,num):
				if num%i == 0:
					#被整除了,所以不是質數,將flag設置爲Flase
					flag = False
					#判斷出來後,不需要再循環了,所以直接跳出即可
					break
			if flag:
				print("{}是素數".format(num))
			else:
				#由於題目是隻打印素數,所以else語句不做任何輸出內容
				pass
	elif choice == 2:
		sys.exit()
	else:
		input("您的輸入有誤,請重新輸入~ 按任意鍵繼續")


#執行代碼
D:\網絡安全\Python\py_code>python h2-判斷素數.py
1.進入系統 2.退出系統
請做出選擇:1
53是素數
59是素數
61是素數
67是素數
71是素數
73是素數
79是素數
83是素數
89是素數
97是素數
101是素數
103是素數
107是素數
109是素數
113是素數
127是素數
131是素數
137是素數
139是素數
149是素數
1.進入系統 2.退出系統

​ 3、使用循環完成如下圖案的打印

*
**
***
****
*****
分析:
每行打印的內容就是行數

layer = int(input("請輸入需要打印的行數:"))
#外層循環控制行數,4行;使用range()函數來進行迭代,1-5
for i in range(1,layer+1):
	#內層循環打印每行要顯示的內容
	for j in range(1,i+1):
		print("*",end="")
	print()
    
#執行代碼
D:\網絡安全\Python\py_code>python test.py
請輸入需要打印的行數:5
*
**
***
****
*****
   *
  ***
 *****
*******
分析:
行數		空格數		 *
1			3		1
2			2		3
3			1		5
4			0		7
可以看出每行打印的空格數位爲 總的行數減去當前行數
每行打印的*的個數位 當前行數乘21

layer = int(input("請輸入需要打印的行數:"))
#外層循環控制行數;使用range()函數來進行迭代
for i in range(1,layer+1):
	#定義打印的空格與*的數量
	space = layer-i
	start = 2*i-1

	#內層循環打印每行要顯示的內容
	#先打印空格
	for j in range(space):
		print(" ",end="")

	#打印*
	for k in range(start):
		print("*",end="")
	#每行打印完成後需要換行
	print()
#執行代碼
D:\網絡安全\Python\py_code>python test.py
請輸入需要打印的行數:5
    *
   ***
  *****
 *******
*********
    *
   * *
  *   *
 *	   *
*********
分析:
這個圖案與上一個圖案的區別在於中間打印*的空心結構,解決辦法爲在打印*時,做出判斷

layer = int(input("請輸入需要打印的行數:"))
#外層循環控制行數;使用range()函數來進行迭代
for i in range(1,layer+1):
	#定義打印的空格與*的數量
	space = layer-i
	start = 2*i-1

	#內層循環打印每行要顯示的內容
	#先打印空格
	for j in range(space):
		print(" ",end="")

	#打印*
	for k in range(start):
		#判斷空心結構的空格何時打印,
		if k == 0 or k == start-1 or i==layer:
			print("*",end="")
		else:
			print(" ",end="")
	#每行打印完成後需要換行
	print()

#執行代碼
D:\網絡安全\Python\py_code>python test.py
請輸入需要打印的行數:5
    *
   * *
  *   *
 *     *
*********
   *
  ***
 *****
*******
 *****
  ***
   *
分析:
這種對稱結構,肯定是奇數行,可以分成上下兩個部分來對圖形進行打印,其餘與第二個圖案的打印方式相同

layer = int(input("請輸入需要打印的行數:"))

#校驗層數必須是奇數行,行數不能小於2
while layer%2 ==0 or layer < 2:
	layer = int(input("對不起,輸入有誤,請重新輸入,按任意鍵繼續~"))

"""上半部分"""
#外層循環控制行數;使用range()函數來進行迭代;分爲上半部分與下半部分;
#把長的部分打印到上半部分爲layer//2+1,又因爲range()函數的迭代特性,再加上一個1
for i in range(1,layer//2+2):
	#定義打印的空格與*的數量
	space = layer-i
	start = 2*i-1

	#內層循環打印每行要顯示的內容
	#先打印空格
	for j in range(space):
		print(" ",end="")

	#打印*
	for k in range(start):
		print("*",end="")
		
	#每行打印完成後需要換行
	print()

"""下半部分"""
#從整除2的部分開始打印,即短的那部分開始,步長爲-1,即每行每次縮短
for i in range(layer//2,0,-1):
	#定義打印的空格與*的數量
	space = layer-i
	start = 2*i-1

	#內層循環打印每行要顯示的內容
	#先打印空格
	for j in range(space):
		print(" ",end="")

	#打印*
	for k in range(start):
		print("*",end="")
		
	#每行打印完成後需要換行
	print()
#執行代碼
D:\網絡安全\Python\py_code>python test.py
請輸入需要打印的行數:9
        *
       ***
      *****
     *******
    *********
     *******
      *****
       ***
        *
   *
  * *
 *   *
*     *
 *   *
  * *
   *
分析:
參考第三個圖案的打印,注意上半部分的空格打印條件

layer = int(input("請輸入需要打印的行數:"))

#校驗層數必須是奇數行,行數不能小於2
while layer%2 ==0 or layer < 2:
	layer = int(input("對不起,輸入有誤,請重新輸入,按任意鍵繼續~"))

"""上半部分"""
#外層循環控制行數;使用range()函數來進行迭代;分爲上半部分與下半部分;
#把長的部分打印到上半部分爲layer//2+1,又因爲range()函數的迭代特性,再加上一個1
for i in range(1,layer//2+2):
	#定義打印的空格與*的數量
	space = layer-i
	start = 2*i-1

	#內層循環打印每行要顯示的內容
	#先打印空格
	for j in range(space):
		print(" ",end="")

	#打印*
	for k in range(start):
		"""注意這裏爲什麼要加2,因爲上半部分打印的是長的,即多出來一行"""
		if k == 0 or k == start-1 or i==layer//2+2:
			print("*",end="")
		else:
			print(" ",end="")
		
	#每行打印完成後需要換行
	print()

"""下半部分"""
#從整除2的部分開始打印,即短的那部分開始,步長爲-1,即每行每次縮短
for i in range(layer//2,0,-1):
	#定義打印的空格與*的數量
	space = layer-i
	start = 2*i-1

	#內層循環打印每行要顯示的內容
	#先打印空格
	for j in range(space):
		print(" ",end="")

	#打印*
	for k in range(start):
		"""注意這裏是下半部分的打印;注意分析條件"""
		if k == 0 or k == start-1:
			print("*",end="")
		else:
			print(" ",end="")
		
	#每行打印完成後需要換行
	print()

#執行代碼
D:\網絡安全\Python\py_code>python test.py
請輸入需要打印的行數:9
        *
       * *
      *   *
     *     *
    *       *
     *     *
      *   *
       * *
        *
   *
  ***
 * * *
*******
 * * *
  ***
   *		

4、完整計算器程序
​ 用戶輸入第一個數據
​ 用戶輸入操作符號
​ 用戶輸入第二個數據
​ 運算展示結果
​ 擴展:eval()函數的使用

import sys
while True:
	print("1.運行系統 2.退出系統")
	choice = int(input())
	if choice == 1:
		#用戶的輸入
		num1,num2 = eval(input("請輸入兩個操作數:"))
		operator = input("請輸入操作符:")
		if operator == "+":
			print("{}+{}={}".format(num1,num2,num1+num2))
		elif operator == "-":
			print("{}-{}={}".format(num1,num2,num1-num2))
		elif operator == "*":
			print("{}*{}={}".format(num1,num2,num1*num2))
		elif operator == "/":
			print("{}/{}={}".format(num1,num2,num1/num2))
		else:
			input("您的輸入有誤,請重新輸入~ 按任意鍵繼續")
	elif choice == 2:
		sys.exit()
	else:
		input("您的輸入有誤,請重新輸入~ 按任意鍵繼續")

#執行代碼
D:\網絡安全\Python\py_code>python h2-eval()函數的使用.py
1.運行系統 2.退出系統
1
請輸入兩個操作數:1,3
請輸入操作符:-
1-3=-2
1.運行系統 2.退出系統
3
您的輸入有誤,請重新輸入~ 按任意鍵繼續
1.運行系統 2.退出系統
2

D:\網絡安全\Python\py_code>python h2-eval()函數的使用.py
1.運行系統 2.退出系統
3
您的輸入有誤,請重新輸入~ 按任意鍵繼續
1.運行系統 2.退出系統
1
請輸入兩個操作數:1,3
請輸入操作符:+
1+3=4
1.運行系統 2.退出系統
1
請輸入兩個操作數:1,5
請輸入操作符:-
1-5=-4
1.運行系統 2.退出系統
1
請輸入兩個操作數:2,3
請輸入操作符:*
2*3=6
1.運行系統 2.退出系統
1
請輸入兩個操作數:6,3
請輸入操作符:/
6/3=2.0
1.運行系統 2.退出系統
2

5、一個自然數與3的和是5的倍數,與3的差是6的倍數,這個自然數最小是幾?

for num in range(1000):
	if ((num+3)%5==0) and ((num-3)%6==0):
		break
	else:
		continue
print(num)
#執行代碼
D:\網絡安全\Python\py_code>python "h2-最小的自然數(與3的和是5的倍數,與3的差是6的倍數).py"
27

6、在400–500之間求一個數,它被2除餘1,被5除餘3,被9除餘1,這個數是多少?

#range()函數來迭代400-500
for i in range(400,501):
	if ((i%2)==1) and ((i%5)==3) and ((i%9)==1):
		print(i)
#代碼執行
D:\網絡安全\Python\py_code>python h3-第六題.py
433

7、有一些四位數,百位數字都是3,十位數字都是6,並且它們既能被2整除,又能被3整除,求這樣的四位數中最大的和最小的兩數各是幾?

for i in range(9999,1001,-1):
	gewei = (i%1000)%100%10
	shiwei = 6
	baiwei = 3
	qianwei = i//1000
	change = gewei+shiwei*10+baiwei*100+qianwei*1000 
	if ((change%2) == 0 and (change%3) == 0):
		break
print(change)
for i in range(1000,10000):
	gewei = (i%1000)%100%10
	shiwei = 6
	baiwei = 3
	qianwei = i//1000
	change = gewei+shiwei*10+baiwei*100+qianwei*1000 
	if ((change%2) == 0 and (change%3) == 0):
		break
print(change)

#執行代碼
D:\網絡安全\Python\py_code>python de.py
9366
1362

8、打印輸出標準水仙花數,輸出這些水仙花數

分析:所謂的“水仙花數”是指一個三位數其各位數字的立方和等於該數本身,例如153是“水仙花數”,因爲:153 = 1^3 + 5^3 + 3^3

for i in  range(100,1000):
	gewei = (i%100)%10
	shiwei = (i%100)//10
	baiwei = i//100
	if (gewei**3)+(shiwei**3)+(baiwei**3) == i:
		print(i)

#執行代碼
D:\網絡安全\Python\py_code>python de.py
153
370
371
407

9.編程求一個四位自然數ABCD,它乘以A後變成DCBA

#使用range()函數來確定四位數的迭代對象
for i in range(1000,10000):
	gewei = (i%1000)%100%10
	shiwei = (i%1000)%100//10
	baiwei = (i%1000)//100
	qianwei = i//1000
    #DCBA的計算方式
	change = gewei*1000+shiwei*100+baiwei*10+qianwei
	if (i*qianwei) == change:
		print(i,end="\t")
#執行代碼
D:\網絡安全\Python\py_code>python test.py
1001    1111    1221    1331    1441    1551    1661    1771    1881    1991

10.編程求出滿足以下條件的三位數:它除以11所得的商等於它各位數字之和.

#使用range()函數來確定三位數的迭代對象
for i in range(100,1000):
	baiwei = i//100
	gewei = (i%100)%10
	shiwei = (i%100)//10
	if (i//11) ==(gewei+shiwei+baiwei):
		print(i)
#執行代碼
D:\網絡安全\Python\py_code>python test.py
108     118     128     138     148     158     168     178     188     197     198

11.某數被80除所得的商,不但是7的倍數,而且用2,3,4,5,6去除餘數都是1,求這個自然數.

分析:某數整除80所得 可以%7 爲0;某數%2,3,4,5,6爲1

flag = 0
for i in range(1,1000):
	shang = 80//i
	yushu = i%80
	a = i%2
	b = i%3
	c = i%4
	d = i%5
	e = i%6
	if shang%7==0 and a==1 and b==1 and c==1 and d==1 and e==1:
		flag += 1
		print(i,end="\t")
		#flag爲5或10時,換行,用於輸出結果易觀察
		if flag == 5 or flag == 10:
			print()

#執行代碼
D:\網絡安全\Python\py_code>python de.py
121     181     241     301     361
421     481     541     601     661
721     781     841     901     961

12.有一種最簡真分數,它們的分子與分母的乘積都是140,把所有這樣的真分數從小到大打印出來

#首先要確認分子分母的大小範圍,當然爲了,省事,可以寫大點,但是爲了降低代碼的時間、空間複雜度,建議先分析
for i in range(1,11):
	for j in range(i+1,141):
		if i*j == 140:
			print("{}/{}".format(i,j))

#執行代碼
D:\網絡安全\Python\py_code>python test.py
1/140
2/70
4/35
5/28
7/20
10/14

13.一個五位數,若在它的後面寫上一個7,得到一個六位數A,若在它前面寫上一個7,得到一個六位數B,B是A的五倍,求此五位數.

#使用range()函數來確定五位數的迭代對象
for i in range(10000,100000):
	gewei = (i%10000)%1000%100%10
	shiwei = (i%10000)%1000%100//10
	baiwei = (i%10000)%1000//100
	qianwei = (i%10000)//1000
	wanwei = i//10000
	#A、B的計算方式
	a = 7+gewei*10+shiwei*100+baiwei*1000+qianwei*10000+wanwei*100000
	b = gewei+shiwei*10+baiwei*100+qianwei*1000+wanwei*10000+7*100000
	if b == a*5:
		print(i)
#執行代碼
D:\網絡安全\Python\py_code>python test.py
14285

14.把123456789這個數乘以一個什麼數,能使它的結果不但不含零,而且仍然是 由1,2,3,4,5,6,7,8,9這九個數字組成的,只是順序不同而已.

15.驗證:任意一個大於9的整數減去它的各位數字之和所得的差,一定能被9整除.

思路如下,也可通過循環來完善,即自動化判斷輸入的位數

"""
	驗證:任意一個大於9的整數減去它的各位數字之和所得
	的差,一定能被9整除.
"""
num = int(input("請輸入一個大於9的整數:"))

# (12 - (1 + 2)) / 9
# 假如就是兩位
if num < 100:
	gewei = num % 10
	shiwei = num // 10
	if (num - (gewei + shiwei)) % 9 == 0:
		print("驗證通過")
	else:
		print("驗證失敗")

elif num > 99 and num < 1000:
	# 三位數的
	gewei = (num%100)%10
	shiwei = (num%100)//10
	bawei = num//100
	if (num - (gewei + shiwei + bawei)) % 9 == 0:
		print("驗證通過")
	else:
		print("驗證失敗")
else:
	pass

#代碼執行
D:\網絡安全\Python\py_code>python test.py
請輸入一個大於9的整數:13
驗證通過

D:\網絡安全\Python\py_code>python test.py
請輸入一個大於9的整數:123
驗證通過

16.今有四個人,他們得年齡各不相同,他們年齡總和是129,而其中有三個人的年齡是平方數,若倒退15年,這四人中仍有三個人的年齡是平方數,求他們各自的年齡

17.如果兩個素數之差爲2,這樣的兩個素數就叫作"孿生數",找出100以內的所有"孿生數".

分析:

需先判斷出100以內的素數,然後將這些素數存儲在某一種數據結構中,我採用的是列表,循環的方式判斷”孿生數“

ls = []
#外層循環用於迭代0-100的數字,1不做判斷
for num in range(2,101):
	#定義一個布爾值,flag爲真代表是素數
	flag = True
	#內層循環用於判斷
	for i in range(2,num):
		if num%i == 0:
			#被整除了,所以不是質數,將flag設置爲Flase
			flag = False
			#判斷出來後,不需要再循環了,所以直接跳出即可
			break
	if flag:
		#將所有的素數存儲在容器中,這裏的容器選擇列表,因爲可以通過下標來進行訪問
		ls.append(num)
	else:
		#由於題目是隻打印素數,所以else語句不做任何輸出內容
		pass
print("1~100以內的素數有:")
print(ls)
# 找出100內的孿生數
index = 1
while index < len(ls):
	#爲防止下標越界,採用如下方式
	if ls[index] - ls[index - 1] == 2:
		print("{}和{}是孿生數".format(ls[index], ls[index - 1]))
	index += 1
	
#執行代碼
D:\網絡安全\Python\py_code>python test.py
1~100以內的素數有:
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
53是孿生數
75是孿生數
1311是孿生數
1917是孿生數
3129是孿生數
4341是孿生數
6159是孿生數
7371是孿生數

18、判斷某一年是否是閏年

分析:

(1)能被4整除但不能被100整除;

(2)能被400整除;

year = int(input("請輸入一個年份:"))
if (year%4==0 and year%100!=0) or year%400 == 0:
	print("%s是閏年"%year)
else:
	print("{}不是閏年".format(year))
#執行代碼
D:\網絡安全\Python\py_code>python test.py
請輸入一個年份:2000
2000是閏年

D:\網絡安全\Python\py_code>python test.py
請輸入一個年份:1990
1990不是閏年

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章