Python學習:基礎練習題

来源:https://www.cnblogs.com/xxpythonxx/archive/2022/09/05/16658565.html
-Advertisement-
Play Games

IO流 筆記目錄:(https://www.cnblogs.com/wenjie2000/p/16378441.html) IO流體系圖 文件 什麼是文件 文件.對我們並不陌生,文件是==保存數據的地方==,比如大家經常使用的word文檔,txt文件.excel文件...都是文件。它既可以保存一張圖 ...


1.輸出0到100的數字,如果數字是3的倍數輸出Fizz,5的倍數輸出Buzz。

同時是3和5的倍數輸出FizzBuzz,其他情況則列印原數字

for i in range(100):
    if i==0:
        print(i)
    elif i%3==0 and i%5==0:
        print("FizzBuzz")
    elif i%3==0:
        print("Fizz")
    elif i%5==0:
        print("Buzz")
    else:
        print(i)

ps:條件語句依次執行,滿足第一個條件後不會執行下一個條件。所以同時滿足3和5的需要放在上面。

2.根據輸入的數字,列印相對應層數的等腰三角形星星塔
在這裡插入圖片描述
ps:先列印空格,空格數量:總層數-當前層數。再列印星星,星星數量:當前層數*2-1

num = int(input("輸入一個數字:"))
for i in range(1,num+1):#外層迴圈定義 星星塔層數
    y = num-i#計算出空格要列印的次數
    print(" "*y,end="")#列印空行
    for j in range(1,2*i):#每行星星的數量
        print("*",end="")
    print()

如range(1,7),生成的數列是1到6,所以需要通過num+1的方式來控制層數

print()里end=""可以讓列印時不換行

2*i是星星的數量,利用range()自動減一。-、

使用while迴圈實現

num = int(input("輸入一個數字:"))
row=1
while row<=num:
    print(" "*(num-row)+"*"*(2*row-1))
    row+=1

row為層數,預設為第一層

num-row為空格數量

2*row-1位星星數量

3.有1,2,3,4四個數字,能組成多少個互不相同且不重覆的三位數字

list = []
sum = 0
for i in range(1,5):
    for j in range(1,5):
        for k in range(1,5):
            if i!=j and j!=k and k!=i:
                num=i*100+j*10+k
                list.append(num)
                sum+=1
print(list)
print(sum)

三個數字可填在個十百位上,組成所有排列然後去掉重覆的

4.遞歸返回None值

def get_op():
    str = input("請輸入你的選擇1/2/3/4:")
    try:
        no = int(str)
        if no not in[1,2,3,4]:
            print("請輸入正確的運算符")
            get_op()    #這裡前面應該加上return
        else:
            return no
    except ValueError as f:
        print("請輸入正確的運算符")
        get_op()    #這裡前面應該加上return

operator = get_op()
print(operator)

輸出

請輸入你的選擇1/2/3/4:a
請輸入正確的運算符
請輸入你的選擇1/2/3/4:11
請輸入正確的運算符
請輸入你的選擇1/2/3/4:1
None

在做下麵一題的時候,我如果直接輸1到4是沒有問題的,但是如果輸入不是數字,或者不是1到4的數字,會返回None值

後來查了很多才發現。這樣寫遞歸調用後產生的值並沒有return出來,要在遞歸函數調用前加上return。把值一層層傳出去。

def get_op():
    str = input("請輸入你的選擇1/2/3/4:")
    try:
        no = int(str)
        if no not in[1,2,3,4]:
            print("請輸入正確的運算符")
            return get_op()
        else:
            return no
    except ValueError as f:
        print("請輸入正確的運算符")
        return get_op()

operator = get_op()
print(operator)

輸出

請輸入你的選擇1/2/3/4:a
請輸入正確的運算符
請輸入你的選擇1/2/3/4:22
請輸入正確的運算符
請輸入你的選擇1/2/3/4:2
2

5.編寫一個程式,提示“選擇運算符”,輸入“1/2/3/4”後,繼續輸入要進行運算的兩個數字後,列印出運算結果

在這裡插入圖片描述

def add(n1,n2):
    value = n1+n2
    print("%d + %d = %d"%(n1,n2,value))

def minus(n1,n2):
    value = n1-n2
    print("%d - %d = %d"%(n1,n2,value))

def multiply(n1,n2):
    value = n1*n2
    print("%d * %d = %d"%(n1,n2,value))

def divide(n1,n2):
    value = n1/n2
    print("%d / %d = %d"%(n1,n2,value))

dict={1:add,2:minus,3:multiply,4:divide}

def get_op():
    str = input("請輸入你的選擇1/2/3/4:")
    try:
        no = int(str)
        if no not in dict:
            print("請輸入正確的運算符")
            return get_op()#一定要return 遞歸,不然返回值是none
        else:
            return no
    except ValueError as f:
        print("請輸入正確的運算符")
        return get_op()

def get_num1():
    str = input("輸入第一個數:")
    try:
        num = int(str)
        return num
    except ValueError as f:
        print("請輸入整數")
        return get_num1()

def get_num2():
    str = input("輸入第二個數:")
    try:
        num = int(str)
        return num
    except ValueError as f:
        print("請輸入整數")
        return get_num1()

print("選擇運算:\n1 is +\n2 is -\n3 is *\n4 is /")
operator = get_op()
num1=get_num1()
num2=get_num2()
dict[operator](num1,num2)

ps:這個做了很久,一個是遞歸返回值的問題。還有一個通過字典存放函數指針。減少代碼量

前四個是加減乘除的函數,然後存放到欄位里,然後字典名[key](函數的參數)這樣的形式調用。就不用寫很多判斷的代碼。

6.冒泡排序,數組之間相鄰值,兩兩進行比較。然後從大到小,或者從小到大排序

'''
學習中遇到問題沒人解答?小編創建了一個Python學習交流群:711312441
尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書!
'''
ls = [7,12,34,4,24,20,11]
for i in range(len(ls)-1):#外層決定比較的輪次
    for j in range(len(ls)-1-i):#多少個數進行兩兩比較
        if ls[j] < ls[j+1]:#兩兩比較大小  <是從大到小排序  >是從小到大排序
            ls[j],ls[j+1] = ls[j+1],ls[j]#互換位置

print(ls)

輸出

[34, 24, 20, 12, 11, 7, 4]

數組的下標是從0開始的

從大到小排是找出最小的放到最後面,從小到大排是找出最大的放到最後面

ps:以上圖從大到小排序為例。第一輪是7個數進行比較,然後比較出最小的值放在最後。然後第二輪比較前6個值。以此類推。剩下2個數的時候,一次比完。所以需要比的輪次是 數組的長度減去1 。每輪需要比較數量,第一輪是數組長度,之後每輪減1.

7.二分查詢,對一個有序的數組進行查詢,從數組中間取出一個值,和需要查詢的值進行對比。

如果大於需要查詢的值,則取左邊一半繼續進行二分查詢。如果小於需要查詢的值,則取右邊一半繼續進行二分查詢。如果相同,則給出下標。沒有提示沒找到

使用迴圈實現

ls = [10,20,30]
def binary_search(alist,item):
    left =0 #下標最小值
    right = len(alist)-1   #下標最大值
    while left<=right:  #一定要有=,不然數組第一或最後一個無法查詢到
        numb = int((left+right)/2)  #中間值的下標
        if item == alist[numb]: #相等直接返回下標
            return numb
        elif item > alist[numb]:    #查詢的值大於數組中間值
            left = numb+1  #更新區間下標
        else:
            right = numb-1    #更新區間下標
    return None
s = binary_search(ls,20)
print(s)

left和right確定數組下標區間,找到中間值,比較大小後,根據升序還是降序的排序方式。來確定更換左邊還是右邊的下標。

一定要<= 因為數組最小或最大時,left=right

left一定要+1,不然會導致查詢數組最大時,取中間值下標這步出現死迴圈

使用遞歸實現

ls = [10,20,30]
def binary_search(alist,item,left,right):
    if left > right:
        return None
    numb = int((left+right)/2) 
    if alist[numb] == item:
        return numb
    elif item > alist[numb]:  
        return binary_search(alist,item,numb+1,right)
    else:
        return binary_search(alist,item,left,numb-1)
s = binary_search(ls,10,0,3)
print(s)

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Spring(三)——AOP 概念 什麼是AOP (1)面向切麵編程(方面),利用 AOP 可以對業務邏輯的各個部分進行隔離,從而使得業務邏輯各部分之間的耦合度降低,提高程式的可重用性,同時提高了開發的效率。 (2)通俗描述:不通過修改源代碼方式,在主幹功能裡面添加新功能 AOP底層原理 JDK動態 ...
  • 線程基礎03 6.用戶線程和守護線程 用戶線程:也叫工作線程,當線程的任務執行完或者通知方法結束。平時用到的普通線程均是用戶線程,當在Java程式中創建一個線程,它就被稱為用戶線程 守護線程(Daemon):一般是為工作線程服務的,當所有的用戶線程結束,守護線程自動結束 常見的守護線程:垃圾回收機制 ...
  • 前文再續,上一回我們完成了用戶管理模塊的CURD(增刪改查)功能,功能層面,無甚大觀,但有一個結構性的缺陷顯而易見,那就是項目結構過度耦合,項目的耦合性(Coupling),也叫耦合度,進而言之,模塊之間的關係,是對項目結構中各模塊間相互聯繫緊密程度的一種量化。耦合的強弱取決於模塊間調用的複雜性、調 ...
  • 非同步編程在 Rust 中的地位非常高,很多 crate 尤其是多IO操作的都使用了 async/await. 首先弄清楚非同步編程的幾個基本概念: Future Future 代表一個可在未來某個時候獲取返回值的 task,為了獲取這個 task 的執行狀況,Future 提供了一個函數用於判斷該 t ...
  • 引入依賴 <dependency> <groupId>com.github.ben-manes.caffeine</groupId> <artifactId>caffeine</artifactId> <version>2.5.5</version> </dependency> 基礎創建方式 Cac ...
  • 序言 每逢佳節倍思親,想買個東西給家裡,結果發現手速不夠,網速不夠快,沒有時間下單等等各種原因導致最後想買的東西售罄了… 甚至跟你一起搶購的可能是腳本,太真實了! 今天就給大家分享一個python版搶購月餅的腳本,我們要用魔法打敗魔法!話不多說,直接開搞! 準備工作 今天要用的是一個測試工具的庫:S ...
  • 摘要:經常有朋友問,學 Python 面向對象時,翻閱別人代碼,會發現一個 super() 函數,那這個函數的作用到底是什麼? 本文分享自華為雲社區《Python 中的 super 函數怎麼學,怎麼解?》,作者:夢想橡皮擦。 實戰場景 經常有朋友問,學 Python 面向對象時,翻閱別人代碼,會發現 ...
  • 日誌對程式的重要性不言而喻,輕巧、簡單、無需費腦,程式代碼中隨處可見,幫助我們排查定位一個有一個問題問題。但看似不起眼的日誌,卻隱藏著各式各樣的“坑”,如果使用不當,不僅不能幫助我們,反而會成為服務“殺手”。 本文主要介紹生產環境日誌使用不當導致的“坑”及避坑指北,高併發系統下尤為明顯。同時提供一套... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...