목차
1 기본 프로그래밍 패턴
2.1 하향식 - 분할 및 정복
하위 문제를 해결하기 위해 재귀를 사용합니다. 최종 솔루션은 재귀 공식, 하위 문제만 호출하면 됩니다. 단계적으로 낮은 수준으로 재귀적으로 해결됩니다.
3.2.1 问题描述
3.2.2 自底向上分析
3.2.3 程序设计
백엔드 개발 파이썬 튜토리얼 Python 프로그래밍 아이디어에 대해 이야기해 봅시다.

Python 프로그래밍 아이디어에 대해 이야기해 봅시다.

Jun 27, 2022 pm 01:55 PM
python

이 기사에서는 프로그래밍 아이디어와 관련된 문제를 주로 정리하는 python에 대한 관련 지식을 제공합니다. Python은 객체 지향 oop(객체 지향 프로그래밍) 스크립팅 언어입니다. 프로그래밍 아이디어의 핵심은 기능적 이해에 있습니다. 아래 논리가 모든 사람에게 도움이 되기를 바랍니다.

Python 프로그래밍 아이디어에 대해 이야기해 봅시다.

추천 학습: python 비디오 튜토리얼

Python은 객체 지향 oop(객체 지향 프로그래밍) 스크립팅 언어입니다.

객체 지향은 객체(엔티티) 개념을 이용해 모델을 구축하고 객관적인 세계를 시뮬레이션하여 소프트웨어를 분석, 설계 및 구현하는 방법입니다.

객체 지향 프로그래밍에서 객체에는 두 가지 의미가 있는데, 그 중 하나는 데이터이고 다른 하나는 동작입니다. 객체지향 접근방식은 데이터와 메소드를 하나의 전체로 결합한 후 이를 체계적으로 모델링합니다.

파이썬 프로그래밍 사고의 핵심은 기능적 논리를 이해하는 것입니다. 문제 해결 논리를 이해하지 못하면 코드가 매우 지저분해 보이고 읽기 어려워집니다. 모듈에 따라 기능을 체계적으로 프로그래밍하면 코드 디자인이 확실히 아름다워질 것입니다! ! !

1 기본 프로그래밍 패턴

모든 프로그래밍에는 다음을 나타내는 IPO가 포함됩니다.

  • I: 입력, 프로그램의 입력

  • P: 프로세스, 프로그램의 주요 논리 프로세스

  • O: 출력, 프로그램의 출력

따라서 컴퓨터를 통해 특정 기능을 구현하려는 경우 기본 프로그래밍 패턴은 다음과 같이 세 부분으로 구성됩니다.

  • IPO 결정: 구현해야 하는 기능의 입력 및 출력과 주요 구현 논리 프로세스를 명확하게 합니다.

  • 프로그램 작성: 프로그래밍 언어를 통해 계산 및 해결의 논리적 프로세스를 설계하고 표시합니다. : 작성된 프로그램의 논리를 따릅니다. 프로세스를 디버그하여 프로그램이 올바른 논리에 따라 올바르게 실행되는지 확인합니다.

  • 2 복잡한 문제를 해결하는 효과적인 방법: 하향식(설계)

2.1 하향식 - 분할 및 정복

기능을 구현하는 논리가 상대적으로 복잡한 경우 구현해야 합니다. 모듈형 설계

는 복잡한 문제를 여러 개의 간단한 문제로 분해하고, 프로그래밍이기도 한 모듈 프로그래밍을 통해 기능적 논리가 실현될 때까지 간단한 문제는 계속해서 더 간단한 문제로 분해될 수 있습니다. Top-down특징입니다. 요약하면 다음과 같습니다. 일반적인 문제를 여러 개의 작은 문제로 구성된 형태로 표현합니다.

같은 방법을 사용하여 작은 문제를 더욱 분해합니다.
  • 작은 문제가 컴퓨터로 간단하고 명확하게 해결될 때까지
  • 2.2 예시 1: 스포츠 경기 분석

2.2.1 전체 프로그램 프레임워크

printlnfo()           1단계: 프로그램 소개 정보 인쇄                                                                                           2단계: 프로그램 실행 매개변수 획득: proA, proB, n simNGames( ) 3단계: 플레이어 A와 B의 능력 값을 사용하여 n개의 게임을 시뮬레이션합니다.

printSummary() 4단계: 플레이어 A와 B가 게임에서 승리할 수 있는 수와 확률을 출력합니다.




2.3 예 2: 피보나치 수열의 하향식 방법

은 실제로

하위 문제를 해결하기 위해 재귀를 사용합니다. 최종 솔루션은 재귀 공식, 하위 문제만 호출하면 됩니다. 단계적으로 낮은 수준으로 재귀적으로 해결됩니다.

프로그래밍:

# 导入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()
로그인 후 복사

실행 결과:

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))
로그인 후 복사

하향식 디자인 사고 이해: 분할 및 정복

3 복잡한 시스템을 점진적으로 구축하기 위한 효과적인 테스트 방법: 상향식 위로(실행)

3.1 상향식 - 모듈식 통합

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

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

自底向上分析思想:

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

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

3.2 举例:0-1背包问题

3.2.1 问题描述

你现在想买⼀大堆算法书,有一个容量为 V 的背包,这个商店⼀共有 n 个商品。问题在于,你最多只能拿 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 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 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

<gum> : Bubble Gum Simulator Infinity- 로얄 키를 얻고 사용하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
Nordhold : Fusion System, 설명
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora : 마녀 트리의 속삭임 - Grappling Hook 잠금 해제 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

PHP와 Python : 다른 패러다임이 설명되었습니다 PHP와 Python : 다른 패러다임이 설명되었습니다 Apr 18, 2025 am 12:26 AM

PHP는 주로 절차 적 프로그래밍이지만 객체 지향 프로그래밍 (OOP)도 지원합니다. Python은 OOP, 기능 및 절차 프로그래밍을 포함한 다양한 패러다임을 지원합니다. PHP는 웹 개발에 적합하며 Python은 데이터 분석 및 기계 학습과 같은 다양한 응용 프로그램에 적합합니다.

PHP와 Python 중에서 선택 : 가이드 PHP와 Python 중에서 선택 : 가이드 Apr 18, 2025 am 12:24 AM

PHP는 웹 개발 및 빠른 프로토 타이핑에 적합하며 Python은 데이터 과학 및 기계 학습에 적합합니다. 1.PHP는 간단한 구문과 함께 동적 웹 개발에 사용되며 빠른 개발에 적합합니다. 2. Python은 간결한 구문을 가지고 있으며 여러 분야에 적합하며 강력한 라이브러리 생태계가 있습니다.

숭고한 코드 파이썬을 실행하는 방법 숭고한 코드 파이썬을 실행하는 방법 Apr 16, 2025 am 08:48 AM

Sublime 텍스트로 Python 코드를 실행하려면 먼저 Python 플러그인을 설치 한 다음 .py 파일을 작성하고 코드를 작성한 다음 CTRL B를 눌러 코드를 실행하면 콘솔에 출력이 표시됩니다.

PHP와 Python : 그들의 역사에 깊은 다이빙 PHP와 Python : 그들의 역사에 깊은 다이빙 Apr 18, 2025 am 12:25 AM

PHP는 1994 년에 시작되었으며 Rasmuslerdorf에 의해 개발되었습니다. 원래 웹 사이트 방문자를 추적하는 데 사용되었으며 점차 서버 측 스크립팅 언어로 진화했으며 웹 개발에 널리 사용되었습니다. Python은 1980 년대 후반 Guidovan Rossum에 의해 개발되었으며 1991 년에 처음 출시되었습니다. 코드 가독성과 단순성을 강조하며 과학 컴퓨팅, 데이터 분석 및 기타 분야에 적합합니다.

Python vs. JavaScript : 학습 곡선 및 사용 편의성 Python vs. JavaScript : 학습 곡선 및 사용 편의성 Apr 16, 2025 am 12:12 AM

Python은 부드러운 학습 곡선과 간결한 구문으로 초보자에게 더 적합합니다. JavaScript는 가파른 학습 곡선과 유연한 구문으로 프론트 엔드 개발에 적합합니다. 1. Python Syntax는 직관적이며 데이터 과학 및 백엔드 개발에 적합합니다. 2. JavaScript는 유연하며 프론트 엔드 및 서버 측 프로그래밍에서 널리 사용됩니다.

Golang vs. Python : 성능 및 확장 성 Golang vs. Python : 성능 및 확장 성 Apr 19, 2025 am 12:18 AM

Golang은 성능과 확장 성 측면에서 Python보다 낫습니다. 1) Golang의 컴파일 유형 특성과 효율적인 동시성 모델은 높은 동시성 시나리오에서 잘 수행합니다. 2) 해석 된 언어로서 파이썬은 천천히 실행되지만 Cython과 같은 도구를 통해 성능을 최적화 할 수 있습니다.

vscode에서 코드를 작성하는 위치 vscode에서 코드를 작성하는 위치 Apr 15, 2025 pm 09:54 PM

Visual Studio Code (VSCODE)에서 코드를 작성하는 것은 간단하고 사용하기 쉽습니다. vscode를 설치하고, 프로젝트를 만들고, 언어를 선택하고, 파일을 만들고, 코드를 작성하고, 저장하고 실행합니다. VSCODE의 장점에는 크로스 플랫폼, 무료 및 오픈 소스, 강력한 기능, 풍부한 확장 및 경량 및 빠른가 포함됩니다.

메모장으로 파이썬을 실행하는 방법 메모장으로 파이썬을 실행하는 방법 Apr 16, 2025 pm 07:33 PM

메모장에서 Python 코드를 실행하려면 Python 실행 파일 및 NPPEXEC 플러그인을 설치해야합니다. Python을 설치하고 경로를 추가 한 후 nppexec 플러그인의 명령 "Python"및 매개 변수 "{current_directory} {file_name}"을 구성하여 Notepad의 단축키 "F6"을 통해 Python 코드를 실행하십시오.

See all articles