1、平方根的格式化
知識點:平方根計算
- pow(a,0.5)[可以計算負數,結果為復數]
- a**b
例題:
獲得用戶輸入的一個整數a,計算a的平方根,保留小數點后3位,並打印輸出。
輸出結果采用寬度30個字符、右對齊輸出、多余字符采用加號(+)填充。
如果結果超過30個字符,則以結果寬度為准。
我的答案:
a=eval(input())
print("{0:+>30.3f}".format(pow(a,0.5)))
運行結果:
1、10
+++++++++++++++++++++++++3.162
2、-10
++++++++++++++++++0.000+3.162j
點評分析:
這是一個簡單題,重點在於理解格式化輸出的方法。
注意:如果平凡根后產生一個復數,由於復數的實部和虛部都是浮點數,.3f可以將實部和虛部分別取三位小數。
1.1、凱撒密碼( 柵欄密碼 )
plaincode=input("請輸入明文:")
for p in plaincode:
if ord("a")<=ord(p)<=ord("z"):
print(chr(ord('a')+(ord(p)-ord('a')+3)%26),end="")
#end="",是不想讓【循環】輸出換行。因為print自帶換行。
else:
# %26,mod26是因為+3后可能超出范圍,通過這個操作限定范圍
print(p,end="")
1.2、隨機密碼生成
描述
補充編程模板中代碼,完成如下功能:
以整數17為隨機數種子,獲取用戶輸入整數N為長度,產生3個長度為N位的密碼,密碼的每位是一個數字。每個密碼單獨一行輸出。
產生密碼采用random.randint()函數。
建議答案:
import random
def mima(length):
a=10**(length-1)
b=10**length - 1
return "{}".format(random.randint(a,b)) #居然可以return這個東西
length=eval(input())
random.seed(17)
for i in range(3):
print(mima(length))
2、字符串分段組合
知識點:str.split("xxxxx"),返回一個 列表 ,由str中被 xxxxx 分隔的部分組成
例題:
獲得輸入的一個字符串s,以字符減號(-)分割s,將其中首尾兩段用加號(+)組合后輸出。
我的答案:
s=input()
for i in range(0,99991):
if(s[i]=="-"):
a=s[0:i]
break
for j in range(1,99999):
if(s[-j]=="-"):
b=s[(-j)+1:-1]
break
print("{}+{}{}".format(a,b,s[-1]))
運行結果:
1-2-3-4
1+4
建議答案:
s=input()
ls=s.split("-")
print("{}+{}".format(ls[0],ls[-1]))
運行結果:
1-2-3-4
1+4
3、四位玫瑰數
描述:
四位玫瑰數是4位數的自冪數。自冪數是指一個 n 位數,它的每個位上的數字的 n 次冪之和等於它本身。
例如:當n為3時,有1^3 + 5^3 + 3^3 = 153,153即是n為3時的一個自冪數,3位數的自冪數被稱為水仙花數。
請輸出所有4位數的四位玫瑰數,按照從小到大順序,每個數字一行。
我的答案:
for i in range(1000,10000):
a=i//1000
b=(i%1000)//100
c=((i%1000)%100)//10
d=((i%1000)%100)%10
if(a**4+b**4+c**4+d**4==i):
print("{}\n".format(i))
建議答案:
s = ""
for i in range(1000, 10000):
t = str(i)
if pow(eval(t[0]),4) + pow(eval(t[1]),4) + pow(eval(t[2]),4) + pow(eval(t[3]),4) == i :
print(i)
分析解釋
1、print()本身就帶有換行了
2、eval()評估函數,居然可以把數當作字符串處理,及其簡單的得到這個數的個位、十位、百位、等等
4、100以內素數之和
描述
求100以內所有素數之和並輸出。
素數指從大於1,且僅能被1和自己整除的整數。
提示:可以逐一判斷100以內每個數是否為素數,然后求和。
我的答案:
在cpp里,是兩個for循環,然后判斷(2,n)之后,n是否還等於i
建議答案:
#Prime
def is_prime(n):
for i in range(2,n):
if n%i == 0:
return False
return True
sum = 0
for i in range(2,100):
if is_prime(i):
sum += i
print(sum)
5、連續素數(質數)計算
- str字符串不能單獨賦值,和cpp不一樣,所以直接輸出
- python在使用變量前不需要定義,用的時候,進行什么樣的操作,就可以看出是什么變量類型
- 與cpp不同的是:python中 for一般是遍歷,while一般限定循環次數。
描述
補充編程模板中代碼,完成如下功能:
獲得用戶輸入數字N,計算並輸出從N開始的5個質數,單行輸出,質數間用逗號,分割。
注意:需要考慮用戶輸入的數字N可能是浮點數,應對輸入取整數;最后一個輸出后不用逗號。
我的答案:
建議答案:
def sushu(m): #判斷素數的函數
for i in range(2,m):
if m%i == 0:
return False
return True #注意縮進,是for循環完了還不滿足,才return True
n=eval(input())
n_=int(n)+1 #把浮點數換成整數
count=5 #限定輸出個數
while count>0: # count =5,4,3,2,1都可以循環,不就是循環5次嘛🐎
if sushu(n_):
if count>1: #這個東西是為了前4次輸出有結尾的逗號,
print(n_,end=",")
else:
print(n_,end="")
count-=1 #注意縮進,不管啥,只要 if sushu()成立[是素數],都要把計數器減1
n_+=1 #注意縮進,不管啥,每次搞完都要把 n_加1,方能遍歷 【遍歷】
6、七段數碼管turtle繪制
知識點:
- 函數定義與編寫
- return
- 局部變量和全局變量
- 參數傳遞問題
建議答案:
import turtle
def drawgap(): #畫空白函數
turtle.penup()
turtle.fd(5)
def drawline(line): #畫線條函數
drawgap()
turtle.pendown() if line else turtle.penup
turtle.fd(20)
drawgap()
turtle.right(90)
def drawdigit(digit): #畫一個數碼函數
drawline(1) if digit in [2,3,4,5,6,8,9] else drawline(0)
drawline(1) if digit in [0,1,3,4,5,6,7,8,9] else drawline(0)
drawline(1) if digit in [0,2,3,5,6,8,9] else drawline(0)
drawline(1) if digit in [0,2,6,8] else drawline(0)
turtle.left(90)
drawline(1) if digit in [0,4,5,6,8,9] else drawline(0)
drawline(1) if digit in [0,2,3,5,6,7,8,9] else drawline(0)
drawline(1) if digit in [0,1,2,3,4,7,8,9] else drawline(0)
turtle.right(180)
turtle.fd(10)
def drawdate(date): #需要的日期函數
for p in date:
drawdigit(eval(p))
def main(): #主函數
turtle.setup(800,250,200,300)
turtle.pensize(5)
turtle.penup()
turtle.fd(-150)
drawdate("20200117")
turtle.hideturtle()
turtle.done()
main()
7、漢諾塔問題
知識點:函數遞歸調用
三個部分
- 函數+分支(if ->3 else ->2)
- 鏈條
- 基例
建議答案
count=0
def han(n,A,C,B): #四個參數采用位置傳遞,代表的含義分別為:搬運圓盤編號,圓盤起始位置,圓盤目標位置,過渡位置
global count
if n==1:
print("{}:{}->{}".format(1,A,C))
count+=1
else: #遞歸鏈條表示:先把上面n-1個搬到過渡位置,剩的那個最大的放到目標位置,再把那n-1個放到目標位置
han(n-1,A,B,C)
print("{}:{}->{}".format(n,A,C))
count+=1
han(n-1,B,C,A)
print(han(3,"A","C","B")) #以三個圓盤為例
print(count)
輸出結果:
1:A->C
2:A->B
1:C->B
3:A->C
1:B->A
2:B->C
1:A->C
7
8、基本統計值計算
總和、平均數、中位數、方差
def getnum():
ls=[]
nums=input("請輸入數字:")
while nums !='':
ls.append(eval(nums))
nums=input("請輸入數字:")
return ls
def pingjun(ls):
sum=0.0
for p in ls:
sum+=p
return sum/len(ls)
def fangcha(ls,ave):
sum=0.0
for p in ls:
sum+=(p-ave)**2
return sum
def mid(ls):
sorted(ls)
size=len(ls)
if size%2==0:
med=(ls[size//2-1]+ls[size//2])/2
else:
med=ls[size//2]
return med
n=getnum()
print("平均數:{}\n方差{}\n中位數{}\n".format(pingjun(n),fangcha(n,pingjun(n)),mid(n)))