Conhecimentos prévios em Python

Anexo um do tutorial em vídeo - sintaxe python: https://singtown.com/learn/50061/

Benefícios da utilização do python

O OpenMV pode usar Python para desenvolvimento secundário. Existem vários benefícios:

  • Fácil de começar
  • Não há necessidade de considerar a aplicação e libertação de memória
  • Existem muitas bibliotecas MicroPython que podem ser utilizadas directamente (não compatíveis com módulos Python no PC)
  • A equipa de desenvolvimento desenvolveu vários algoritmos e módulos de OpenMV que podem ser designados

O Python é uma linguagem muito utilizada e muito utilizada em processamento de imagem, aprendizagem automática e programação de redes. E o Python é uma linguagem muito fácil de começar. Se tiver uma base de programação noutras linguagens (como C, C++, Java), será mais fácil começar.

REPL e porta série

O IDE do OpenMV vem com um assistente de porta série para ligação ao OpenMV e também pode ligar-se a outras portas série, como o Arduino, pyboard e esp8266.

Primeiro, desligue o OpenMV do IDE, caso contrário a porta série entrará em conflito!

Abrir Ferramentas no OpenMV → Abrir Terminal → Novo Terminal

Entre no terminal

print("hello OpenMV!")

será exibido

hello OpenMV!

Sintaxe Python

saída

Utilize print() para adicionar uma string entre parênteses rectos para apresentar o texto especificado no ecrã. Por exemplo, para gerar 'olá, mundo', o código é o seguinte:

   print('hello, world')
hello, world

A função print() pode também aceitar múltiplas strings separadas por vírgulas "," para as produzir numa série:

  print('The quick brown fox', 'jumps over', 'the lazy dog')
The quick brown fox jumps over the lazy dog

print() imprimirá cada string de cada vez,quando for encontrada uma vírgula ",", será apresentado um espaço:

The quick brown fox jumps over the lazy dog

print() também pode imprimir números inteiros ou resultados de cálculos:

  print(300)
300
  print(100 + 200)
300

Assim sendo, podemos imprimir o resultado do cálculo de 100 + 200 de forma mais bonita:

   print('100 + 200 =', 100 + 200)
100 + 200 = 300

Note-se que para 100 + 200, o interpretador Python calcula automaticamente o resultado 300. No entanto, '100 + 200 =' é uma string e não uma fórmula matemática, e o Python trata-a como uma string.

variável

Em Python, o sinal de igual = é uma instrução de atribuição,qualquer tipo de dados pode ser atribuído a uma variável. A mesma variável pode ser atribuída repetidamente e pode ser uma variável de tipos diferentes, por exemplo:

  a = 123 # a是整数
  print(a)
  a = 'ABC' # a变为字符串
  print(a)

Este tipo de linguagem cujo tipo de variável não é fixo é designada por linguagem dinâmica, e a sua contraparte é uma linguagem estática. Em linguagens estáticas, o tipo de variável deve ser especificado ao definir uma variável. Se o tipo não corresponder ao atribuir um valor, será reportado um erro. Por exemplo, Java é uma linguagem estática e a instrução de atribuição é a seguinte (// representa um comentário):

  int a = 123; // a是整数类型变量
  a = "ABC"; // 错误:不能把字符串赋给整型变量

Em comparação com as linguagens estáticas, as linguagens dinâmicas são mais flexíveis por este motivo.

lista lista

Um dos tipos de dados integrados do Python é uma lista: lista. Uma lista é uma coleção ordenada na qual os elementos podem ser adicionados e removidos a qualquer momento.\ Por exemplo, para listar os nomes de todos os alunos da turma, pode utilizar uma lista para os representar:

 classmates = ['Michael', 'Bob', 'Tracy']
 classmates
['Michael', 'Bob', 'Tracy']

A variável classmates é uma lista. Utilize a função len() para obter o número de elementos da lista:

  len(classmates)
3

Utilize o índice para aceder ao elemento em cada posição da lista Recorde-se que o índice começa em 0:

 classmates[0]
'Michael'
 classmates[1]
'Bob'
 classmates[2]
'Tracy'
 classmates[3]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

Quando o índice exceder o intervalo, o Python reportará um IndexError, por isso certifique-se de que o índice não sai do intervalo Lembre-se que o índice do último elemento é len(classmates) - 1.

Se pretender obter o último elemento, para além de calcular a posição do índice, também pode utilizar -1 como índice para obter o último elemento diretamente:

  classmates[-1]
'Tracy'

Por analogia, pode obter o penúltimo e o penúltimo:

   classmates[-2]
'Bob'
   classmates[-3]
'Michael'
   classmates[-4]
Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
  IndexError: list index out of range

Claro, o quarto de baixo cruzou a linha.

List é uma lista ordenada mutável, pelo que pode acrescentar elementos no final da lista:

  classmates.append('Adam')
  classmates
  ['Michael', 'Bob', 'Tracy', 'Adam']

Também pode introduzir elementos numa posição especificada, como o número de índice 1:

  classmates.insert(1, 'Jack')
  classmates
  ['Michael', 'Jack', 'Bob', 'Tracy', 'Adam']

Para eliminar elementos no final da lista, utilize o método pop():

  classmates.pop()
  'Adam'
  classmates
  ['Michael', 'Jack', 'Bob', 'Tracy']

Para substituir um elemento por outro elemento, pode atribuí-lo diretamente à posição de índice correspondente:

   classmates[1] = 'Sarah'
 classmates
  ['Michael', 'Sarah', 'Tracy']

Os tipos de dados dos elementos da lista também podem ser diferentes, por exemplo:

   L = ['Apple', 123, True]

Se não existir nenhum elemento numa lista, é uma lista vazia e o seu comprimento é 0:

 L = []

 len(L)

 0

tupla tupla

Outro tipo de lista ordenada é designada por tupla. Tupla é muito semelhante à lista, mas uma vez inicializada, a tupla não pode ser modificada Por exemplo, os nomes dos colegas de turma também são listados:

  classmates = ('Michael', 'Bob', 'Tracy')

Agora, a tupla das classes não pode ser alterada e não possui métodos como anexar() e inserir(). Outros métodos de obtenção de elementos são iguais às listas. Pode utilizar classes[0] e classes[-1] normalmente, mas não podem ser atribuídas a outros elementos.

Qual é o sentido das tuplas imutáveis? Como as tuplas são imutáveis, o código é mais seguro. Se possível, utilize tupla em vez de lista.

Armadilhas de tuplas: Quando define uma tupla, os elementos da tupla devem ser determinados no momento da definição, como por exemplo:

  t = (1, 2)

  t

  (1, 2)

No entanto, para definir uma tupla com apenas 1 elemento, se a definir assim:

   t = (1)

   t

   1

O que está definido não é uma tupla, t é uma variável inteira e o valor da variável t é 1! Isto porque os parêntesis rectos () podem representar tuplas e parêntesis em fórmulas matemáticas, o que cria ambiguidade.

Assim, deve ser adicionada uma vírgula ao definir uma tupla com apenas um elemento para eliminar ambiguidade:

   t = (1,)

   t

  (1,)

Quando o Python exibe uma tupla com apenas um elemento, também adiciona uma vírgula para evitar que a entenda mal como um parêntesis recto no sentido de cálculos matemáticos.

Julgamento condicional

A forma completa da instrução if é:

if <条件判断1>:
    <执行1>
elif <条件判断2>:
    <执行2>
elif <条件判断3>:
    <执行3>
else:
    <执行4>

por exemplo:

age = 20
if age >= 6:
    print('teenager')
elif age >= 18:
    print('adult')
else:
    print('kid')

ciclo

Existem dois tipos de ciclos em Python. Um é o ciclo for...in, que itera cada elemento da lista ou tupla de cada vez:

names = ['Michael', 'Bob', 'Tracy']
for name in names:
    print(name)

A execução deste código imprimirá cada elemento dos nomes em sequência:

  Michael
  Bob
  Tracy

Assim, o ciclo for x in... simplesmente substitui cada elemento na variável x e depois executa a instrução do bloco recuado.

Se pretender calcular a soma de números inteiros de 1 a 100, é um pouco difícil escrever de 1 a 100. Felizmente, o Python disponibiliza uma função range() que pode gerar uma sequência inteira, que pode depois ser convertida numa lista através da função list(). Por exemplo, a sequência gerada por intervalo(5) é um número inteiro que começa em 0 e é menor que 5:

  list(range(5))

  [0, 1, 2, 3, 4]

range(101) pode gerar uma sequência inteira de 0 a 100, calculada da seguinte forma:

sum = 0
for x in range(101):
    sum = sum + x
print(sum)

O segundo tipo de ciclo é um ciclo while. Por exemplo, se quisermos calcular a soma de todos os números ímpares dentro de 100, podemos utilizar um ciclo while para o implementar:

sum = 0
n = 99
while n > 0:
    sum = sum + n
    n = n - 2
print(sum)

===== Conversão do tipo de dados =====

As funções normalmente utilizadas incorporadas no Python também incluem funções de conversão de tipo de dados. Por exemplo, a função int() pode converter outros tipos de dados em números inteiros:

>>> int('123')
123
>>> int(12.34)
12
>>> float('12.34')
12.34
>>> str(1.23)
'1.23'
>>> str(100)
'100'
>>> bool(1)
True
>>> bool('')
False

===== Funções =====

Em Python, para definir uma função, utilize a instrução def, escreva o nome da função, parênteses, parâmetros entre parênteses e dois pontos:, em seguida, escreva o corpo da função no bloco recuado e utilize a instrução return para devolver o valor de retorno de a função.

Vamos primeiro escrever uma função que calcule x2:

def power(x):
    return x * x

Para a função power(x), o parâmetro x é um parâmetro posicional.

Quando chamamos a função potência, devemos passar um e apenas um parâmetro x:

poder(5)\ 25\ poder(15)\ 225

Agora, e se quisermos calcular x3? Pode definir outra função power3, mas e se quiser calcular x4, x5...? Não podemos definir funções infinitas.

Pode ter pensado que pode alterar potência(x) para potência(x, n) para calcular xn, e simplesmente fazer isto:

def power(x, n):
    s = 1
    while n > 0:
        n = n - 1
        s = s * x
    return s

Para esta função de potência(x, n) modificada, pode ser calculada qualquer enésima potência:

potência(5, 2)\ 25\ poder(5, 3)\ 125

A função power(x, n) modificada tem dois parâmetros: x e n Ambos os parâmetros são parâmetros posicionais. Ao chamar a função, os dois valores passados são atribuídos aos parâmetros x e n por ordem de posição.

fatiar

Recuperar alguns elementos de uma lista ou tupla é uma operação muito comum. Por exemplo, uma lista é a seguinte:

L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']

Pegue nos 3 primeiros elementos e complete o fatiamento com uma linha de código:

L[0:3]\ ['Michael', 'Sarah', 'Tracy']

L[0:3] significa começar do índice 0 para o índice 3, mas não incluindo o índice 3. Ou seja, os índices 0, 1, 2 são exactamente 3 elementos.

Se o primeiro índice for 0, também pode ser omitido:

i[:3]\ ['Michael', 'Sarah', 'Tracy']

Pode também começar no índice 1 e retirar 2 elementos:

i[1:3]\ ['Sarah', 'Tracy']

Tupla é também uma espécie de lista, a única diferença é que tupla é imutável. Assim sendo, as tuplas também podem ser operadas por fatiamento, mas o resultado da operação é ainda uma tupla:

(0, 1, 2, 3, 4, 5)[:3]\ (0, 1, 2)

A string 'xxx' também pode ser considerada uma lista, cada elemento é um caractere. Assim, as strings também podem ser fatiadas, mas o resultado é ainda uma string:

'ABCDEFG'[:3]\ 'ABC'

objeto

Python é programação orientada a objetos, como uma luz LED

from pyb import LED

red_led = LED(1)
red_led.on()

LED é uma classe, red_led é um objeto,pode realizar operações neste objeto, como ligar, desligar e visualizar o valor.

módulo

Utilização de módulos

results matching ""

    No results matching ""