目次
あらゆるプログラミングには、次のことを表す IPO が含まれます。
関数を実現するためのロジックが比較的複雑な場合は、複雑な問題を複数の単純な問題に分解し、その中に単純な問題を含めるために
2.2.3 テスト結果
トップダウンの方法は実際には
。最終的な解決策は再帰式を呼び出すだけで済みます。問題は徐々に再帰的に解決されます。より低いレベルへ。
3.2.1 问题描述
3.2.2 自底向上分析
3.2.3 程序设计
ホームページ バックエンド開発 Python チュートリアル Python プログラミングのアイデアについて話しましょう

Python プログラミングのアイデアについて話しましょう

Jun 27, 2022 pm 01:55 PM
python

この記事では、python に関する関連知識を提供します。主にプログラミングのアイデアに関連する問題を整理します。Python は、オブジェクト指向の oop (オブジェクト指向プログラミング) スクリプト言語です。プログラミング的思考の核心は、次のことを理解することです。関数型ロジックについて見てみましょう。皆さんのお役に立てれば幸いです。

Python プログラミングのアイデアについて話しましょう

推奨学習: Python ビデオ チュートリアル

Python はオブジェクト指向です oop(オブジェクト指向プログラミング) スクリプト言語。

オブジェクト指向は、オブジェクト (エンティティ) の概念を使用してモデルを構築し、客観的な世界をシミュレートしてソフトウェアを分析、設計、実装する手法です。

オブジェクト指向プログラミングでは、オブジェクトには 2 つの意味が含まれており、1 つはデータ、もう 1 つはアクションです。オブジェクト指向のアプローチでは、データとメソッドを 1 つに結合し、それを体系的にモデル化します。

Python プログラミングの考え方の核心は、関数ロジックを理解することです。問題を解決するロジックを理解していない場合、コードは次のようになります。 like 非常にわかりにくくて読みにくいので、ロジックを明確にし、機能をモジュールごとに体系的にプログラムすれば、コードデザインは間違いなく美しくなります。 ! !

1 基本的なプログラミング パターン

あらゆるプログラミングには、次のことを表す IPO が含まれます。

    I: 入力 input 、プログラム
  • #P: プロセス処理、プログラムの主な論理プロセス
  • ##O: 出力、プログラムの出力

  • したがって、コンピュータを通じて特定の機能を実装したい場合は、

  • 基本的なプログラミング パターン

# には、次の 3 つの部分が含まれます。 #IPO の決定: 実現する必要がある機能の入力と出力、および主要な実装ロジック プロセスを明確にします;

    プログラムを作成します:プログラミング言語を通じて計算と解の論理プロセスを実行します デザイン表示;
  • プログラムのデバッグ: 論理プロセスに従って作成されたプログラムをデバッグし、プログラムが正しい手順に従って正しく実行されることを確認します。論理。
  • #2 複雑な問題を解決するための効果的な方法: トップダウン (設計)
  • ##2.1 トップダウンの分割と征服

関数を実現するためのロジックが比較的複雑な場合は、複雑な問題を複数の単純な問題に分解し、その中に単純な問題を含めるために

モジュール的に設計する必要があります。関数ロジックがモジュール プログラミングを通じて実現できるようになるまで、より単純な問題に分解し続けることができます。これはプログラミングの トップダウン の特徴でもあります。要約は次のとおりです。

一般的な問題を、いくつかの小さな問題から構成される形式に表現します。同じ方法を使用して、小さな問題をさらに分解します。小さな問題はコンピューターによるシンプルで明快な解決策です。

    2.2 例 1: スポーツ競技の分析
  • 2.2.1プログラム全体のフレームワーク

printlnfo() s 's ' s ‐ ‐ ‐ ‐ ‐ ‐ ステップ 1: プログラムの紹介情報を出力する getlnputs()ステップ 3: プレイヤー A と B の能力値を使用して n 試合をシミュレートします printsummary() ステップ 4: プレイヤー A と B がゲームに勝つ数と確率を出力します

# 导入python资源包
from random import random
 
# 用户体验模块 
def printIntro():
    print("这个程序模拟两个选手A和B的某种竞技比赛")
    print("程序运行需要A和B的能力值(以0到1之间的小数表示)")
 
# 获得A和B的能力值与场次模块 
def getIntputs():
    a = eval(input("请输入A的能力值(0-1):"))
    b = eval(input("请输入B的能力值(0-1):"))
    n = eval(input("模拟比赛的场次:"))
    return a, b, n
 
# 模拟n局比赛模块 
def simNGames(n, probA, probB):
    winsA, winsB = 0, 0
    for i in range(n):
        scoreA, scoreB = simOneGame(probA, probB)
        if scoreA > scoreB:
            winsA += 1
        else:
            winsB += 1
    return winsA, winsB
 
# 判断比赛结束条件 
def gameOver(a, b):
    return a == 15 or b == 15
 
# 模拟n次单局比赛=模拟n局比赛 
def simOneGame(probA, probB):
    scoreA, scoreB = 0, 0
    serving = "A"
    while not gameOver(scoreA, scoreB):
        if serving == "A":
            if random() < probA:
                scoreA += 1
            else:
                serving = "B"
        else:
            if random() < probB:
                scoreB += 1
            else:
                serving = "A"
    return scoreA, scoreB
 
# 打印结果模块 
def printSummary(winsA, winsB):
    n = winsA + winsB
    print("竞技分析开始,共模拟{}场比赛".format(n))
    print("选手A获胜{}场比赛,占比{:0.1%}".format(winsA, winsA / n))
    print("选手B获胜{}场比赛,占比{:0.1%}".format(winsB, winsB / n))
 
 
def main():
    printIntro()    
    probA, probB, n = getIntputs()                # 获得用户A、B能力值与比赛场次N
    winsA, winsB = simNGames(n, probA, probB)     # 获得A与B的场次
    printSummary(winsA, winsB)                    # 返回A与B的结果
 
 
main()
ログイン後にコピー

2.2.3 テスト結果




##2.3 例 2: フィボナッチ証書シーケンス

トップダウンの方法は実際には

再帰を使用して部分問題を解決します

。最終的な解決策は再帰式を呼び出すだけで済みます。問題は徐々に再帰的に解決されます。より低いレベルへ。

プログラミング:

cache = {}

def fib(number):
    if number in cache:
        return cache[number]
    if number == 0 or number == 1:
        return 1
    else:
        cache[number] = fib(number - 1) + fib(number - 2)
    return cache[number]

if __name__ == &#39;__main__&#39;:
    print(fib(35))
ログイン後にコピー
実行結果:

14930352
>>>
ログイン後にコピー
トップダウンの設計思考を理解する: 分割統治

##3 複雑なシステムを段階的に構築するための効果的なテスト方法: ボトムアップ (実行) ##3.1 ボトムアップのモジュラー統合

##

自底向上(执行)就是一种逐步组建复杂系统的有效测试方法。首先将需要解决的问题分为各个三元进行测试,接着按照自顶向下相反的路径进行操作,然后对各个单元进行逐步组装,直至系统各部分以组装的思路都经过测试和验证。

理解自底向上的执行思维:模块化集成

自底向上分析思想:

  • 任何时候栈中符号串和剩余符号串组成一个句型,当句柄出现在栈顶符号串中时,就用该句柄进行归约,这样一直归约到输入串只剩结束符、栈中符号只剩下开始符号,此时认为输入符号串是文法的句子,否则报错。

自底向上是⼀种求解动态规划问题的方法,它不使用递归式,而是直接使用循环来计算所有可能的结果,往上层逐渐累加子问题的解。在求解子问题的最优解的同时,也相当于是在求解整个问题的最优解。其中最难的部分是找到求解最终问题的递归关系式,或者说状态转移方程。

3.2 举例:0-1背包问题

3.2.1 问题描述

你现在想买⼀大堆算法书,有一个容量为 V 的背包,这个商店⼀共有 个商品。问题在于,你最多只能拿 W kg 的东西,其中 wi vi 分别表示第 i 个商品的重量和价值。最终的目标就是在能拿的下的情况下,获得最大价值,求解哪些物品可以放进背包。

对于每⼀个商品你有两个选择:拿或者不拿。

3.2.2 自底向上分析

⾸先要做的就是要找到“子问题”是什么。通过分析发现:每次背包新装进⼀个物品就可以把剩余的承重能力作为⼀个新的背包来求解,⼀直递推到承重为0的背包问题。

m[i,w] 表示偷到商品的总价值,其中 i 表示⼀共多少个商品,w 表示总重量,所以求解 m[i,w]就是子问题,那么看到某⼀个商品i的时候,如何决定是不是要装进背包,需要考虑以下:

  • 该物品的重量大于背包的总重量,不考虑,换下⼀个商品;
  • 该商品的重量小于背包的总重量,那么尝试把它装进去,如果装不下就把其他东西换出来,看看装进去后的总价值是不是更高了,否则还是按照之前的装法;
  • 极端情况,所有的物品都装不下或者背包的承重能力为0,那么总价值都是0;

由以上的分析,可以得出m[i,w]的状态转移方程为:

m[i,w] = max{m[i-1,w], m[i-1,w-wi]+vi}

3.2.3 程序设计

# 循环的⽅式,自底向上求解
cache = {}
items = range(1,9)
weights = [10,1,5,9,10,7,3,12,5]
values = [10,20,30,15,40,6,9,12,18]
# 最⼤承重能⼒
W = 4

def knapsack():
    for w in range(W+1):
        cache[get_key(0,w)] = 0
    for i in items:
        cache[get_key(i,0)] = 0
        for w in range(W+1):
            if w >= weights[i]:
                if cache[get_key(i-1,w-weights[i])] + values[i] > cache[get_key(i-1,w)]:
                    cache[get_key(i,w)] = values[i] + cache[get_key(i-1,w-weights[i])]
                else:
                    cache[get_key(i,w)] = cache[get_key(i-1,w)]
            else:
                cache[get_key(i,w)] = cache[get_key(i-1,w)]
    return cache[get_key(8,W)]

def get_key(i,w):
    return str(i)+','+str(w)

if __name__ == '__main__':
    # 背包把所有东西都能装进去做假设开始
    print(knapsack())
ログイン後にコピー
29
>>>
ログイン後にコピー

推荐学习:python

以上がPython プログラミングのアイデアについて話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHPおよびPython:さまざまなパラダイムが説明されています PHPおよびPython:さまざまなパラダイムが説明されています Apr 18, 2025 am 12:26 AM

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPとPythonの選択:ガイド PHPとPythonの選択:ガイド Apr 18, 2025 am 12:24 AM

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

Sublime Code Pythonを実行する方法 Sublime Code Pythonを実行する方法 Apr 16, 2025 am 08:48 AM

PythonコードをSublimeテキストで実行するには、最初にPythonプラグインをインストールし、次に.pyファイルを作成してコードを書き込み、Ctrl Bを押してコードを実行する必要があります。コードを実行すると、出力がコンソールに表示されます。

PHPとPython:彼らの歴史を深く掘り下げます PHPとPython:彼らの歴史を深く掘り下げます Apr 18, 2025 am 12:25 AM

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

Python vs. JavaScript:学習曲線と使いやすさ Python vs. JavaScript:学習曲線と使いやすさ Apr 16, 2025 am 12:12 AM

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

Golang vs. Python:パフォーマンスとスケーラビリティ Golang vs. Python:パフォーマンスとスケーラビリティ Apr 19, 2025 am 12:18 AM

Golangは、パフォーマンスとスケーラビリティの点でPythonよりも優れています。 1)Golangのコンピレーションタイプの特性と効率的な並行性モデルにより、高い並行性シナリオでうまく機能します。 2)Pythonは解釈された言語として、ゆっくりと実行されますが、Cythonなどのツールを介してパフォーマンスを最適化できます。

vscodeでコードを書く場所 vscodeでコードを書く場所 Apr 15, 2025 pm 09:54 PM

Visual Studioコード(VSCODE)でコードを作成するのはシンプルで使いやすいです。 VSCODEをインストールし、プロジェクトの作成、言語の選択、ファイルの作成、コードの書き込み、保存して実行します。 VSCODEの利点には、クロスプラットフォーム、フリーおよびオープンソース、強力な機能、リッチエクステンション、軽量で高速が含まれます。

メモ帳でPythonを実行する方法 メモ帳でPythonを実行する方法 Apr 16, 2025 pm 07:33 PM

メモ帳でPythonコードを実行するには、Python実行可能ファイルとNPPEXECプラグインをインストールする必要があります。 Pythonをインストールしてパスを追加した後、nppexecプラグインでコマンド「python」とパラメーター "{current_directory} {file_name}"を構成して、メモ帳のショートカットキー「F6」を介してPythonコードを実行します。

See all articles