攝影或3C

Python: 如何隨機取一個亂數,並尋找list中最接近該亂數的數字(可用來抽獎)

code:

# -*- coding: utf-8 -*-
"""
Created on Sun Oct  6 10:55:09 2024

@author: SavingKing
"""

import random

def find_closest_number(user_numbers):
    # 生成一個隨機數
    random_number = random.randint(1, 100)
    print(f"隨機選中的數字是:{random_number}")

    # 計算每個數字與隨機數的差的絕對值
    differences = [abs(num - random_number) for num in user_numbers]

    # 找到最小差值
    min_difference = min(differences)
    # min_difference = differences.min() 
    # AttributeError: 'list' object has no attribute 'min'
    
    closest_index = differences.index(min_difference)
    closest_number = user_numbers[closest_index]

    print(f"差異最小的數字是:{closest_number},其差異是:{min_difference}")

# 假設這是多個用戶輸入的數字列表
user_numbers = [23, 45, 67, 89, 32, 54]

# 調用函數,猜的數字與該亂數最接近,即為中獎者
find_closest_number(user_numbers)

這段程式碼首先定義了一個函數
find_closest_number,
它接收用戶輸入的數字列表。
函數內部生成一個隨機數並計算
每個數字與這個隨機數的差的絕對值,
然後找到最小差值
並輸出這個數字及其差異。
輸出結果:

推薦hahow線上學習python: https://igrape.net/30afN

# min_difference = differences.min() 
# AttributeError: 'list' object has no attribute 'min'

在 Python 中,確實存在一些不同的方式來調用函數,這取決於該函數是否是某個類型(如列表、字典等)的方法,或者是一個獨立的函數。理解這一點需要分辨兩種情況:方法調用函數調用

方法調用

當一個函數是某個數據類型的內建方法時,它通常是使用點(.)來調用的,這意味著該函數是綁定到該數據類型的對象上。例如,列表(list)有自己的一些方法,如 append(), sort(), reverse() 等,這些都是通過點語法來調用的:

my_list = [3, 1, 2]
my_list.sort()
print(my_list)  # 輸出: [1, 2, 3]

函數調用

獨立的函數則不依附於特定的數據對象,它們通常是作為模塊的一部分提供的。例如,min()max() 就是 Python 內建的全局函數,可以直接調用並傳入任意的可迭代對象:

my_list = [3, 1, 2]
minimum_value = min(my_list)
print(minimum_value)  # 輸出: 1

對於列表 differences,沒有名為 min 的方法。因此,當您嘗試使用 differences.min() 時,會報錯,因為 list 對象本身沒有 min 方法。正確的使用方式是使用內建的 min() 函數:

min_difference = min(differences)

總結規則

  1. 方法調用:當功能是對象的一部分,且專門為該類型的數據設計時,使用點(.)語法。這表示該函數是該數據類型的方法。
  2. 函數調用:當功能是一個獨立的函數,可以對多種類型的數據操作時,直接使用函數名調用。

了解這些規則能幫助您更好地理解何時使用哪種調用方式,並避免在編程時出現錯誤。

Python 中區分方法(method)和函數(function)的一個很好的規則:

方法 (Method):是特定於數據類型的函數,如列表(list),字符串(string),字典(dictionary)等。這些方法是以點(.)語法調用的,因為它們是綁定到特定對象的。例如,list.append()、list.sort()、string.upper() 等。
函數 (Function):是獨立於任何特定數據類型的,可以作用於各種數據,通常是全局可用的,或者屬於某個模塊。例如,min()、max()、len() 等都可以作用於任何可迭代的對象,不僅限於列表。這些函數直接使用函數名來調用,並將對象作為參數傳入。
所以,如果一個功能函數是通用的,不專門屬於任何一種類型的數據,則通常是作為獨立的函數來調用,如 min(list)。而如果一個功能是某種數據類型專有的,則以方法的形式存在,使用點語法調用,如 list.append(x)。這種區分有助於在設計API和使用現有的Python功能時保持清晰和組織性。

推薦hahow線上學習python: https://igrape.net/30afN

儲蓄保險王

儲蓄險是板主最喜愛的儲蓄工具,最喜愛的投資理財工具則是ETF,最喜愛的省錢工具則是信用卡