Next Python en langage C

introduction

Étonnamment, il semble y avoir des gens qui sont devenus B4 et ne peuvent utiliser que C comme langage de programmation. Eh bien, c'est vrai que la classe ne traite que publiquement le langage C, et bien sûr c'est naturel. Cependant, il serait très inefficace d'utiliser le langage C à chaque fois pour implémenter un petit calcul ou un algorithme. Déclarez une variable ~, mémoire sécurisée ~, oh, j'ai oublié le point-virgule. C'est gênant.

Je pense que Python est un bon moyen de créer un programme prototype. Pour être honnête, je ne sais pas grand chose sur les autres, mais je pense que Python est bien pour le moment.

Je ne suis pas du tout un maître de Python, mais pour le moment, il est nécessaire et suffisant d'écrire un programme correctement avec les connaissances que j'ai acquises en langage C.

Donc, je ne pense à rien à écrire dans le calendrier de l'Avent, alors j'ai décidé d'écrire un article d'introduction à Python pour ceux qui sont passés par le langage C. La cible est principalement B3 ou moins, plutôt que B3 ou moins. Au fait, je n'utilise que la série Python2 jusqu'à présent, mais je pensais que si je m'occupais de la série Python3 ici, ce serait ma propre étude, j'ai donc décidé d'utiliser la série Python3.

Environnement

Ah, ouvrir le terminal avec ubuntu 16.04 LTS en disant que c'est gênant de construire un environnement

Je veux dire,

Python 3.5.2 (default, Nov 17 2016, 11:45:14)


[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.

Ce sera. Puisqu'il sera dans l'état d'acceptation d'entrée, arrêtons-le avec Ctrl-D pour le moment. (Cela s'appelle un shell interactif et ne sera pas mentionné dans cet article.)

En fait, Python 3 est déjà dans ubuntu. Tu l'as fait. (Au fait, si vous faites python au lieu de python3, Python2 fonctionnera.)

Je suis une personne autre qu'ubuntu, mais je ne pense pas que je sois inquiet parce que les gens qui utilisent habituellement d'autres Linux sont des gens forts. Ou plutôt, ne lisez pas cet article, c'est embarrassant. Pour les utilisateurs de Windows, vous pouvez télécharger le logiciel depuis le Python officiel, et je pense que ce serait bien d'utiliser Bash sur Ubuntu sur Windows ou VMware pour installer virtuellement ubuntu. Il pourrait être utilisé à d'autres fins. Personne Mac? J'ai un Mac, alors vérifiez-le par vous-même sur le Mac devant vous. (Je ne sais pas si cela arrivera depuis le début avec ubuntu.)

Harova

Lançons tout de suite le premier programme célèbre. Créez le fichier suivant avec un nom tel que print.py avec vim ou emacs.

print.py


print("Fuck eeic")

Sur la ligne de commande

$ python3 print.py


Quand je fais

Ce sera. C'est vraiment simple. Il n’existe pas de compilation. point-virgule? Vous devriez deviner avec un saut de ligne. Je ne mentionnerai plus la sauvegarde ou l'exécution de fichiers, alors continuons encore et encore de la même manière.

variable

En Python, vous n'avez pas besoin de déclarer des variables. Veuillez simplement mettre ce que vous voulez remplacer. Vous pouvez même convertir une chaîne en un entier. Si vous faites une erreur, vous obtiendrez une erreur lors de l'exécution de la programmation, alors faites-le pour le moment et nourrissez votre esprit.

calc.py


a = "3"
b = 2
c = int(a) / b
print(a, b, c)

3 2 1.5

Contrairement au langage C, et contrairement à Python2, Python3 semble sortir avec des entiers / entiers comme fractions. Je me trompe souvent, donc je suis reconnaissant. Si vous modifiez un peu l'opérateur et définissez c = int (a) // b, ce sera une valeur entière comme d'habitude.

Déclaration de contrôle

ʻIf, for et while`. «while» est relativement le même, mais «if» est un peu, et «for» est différent du langage Oita C.

Quoi qu'il en soit, "Indent" est le plus unique. En langage C, la plage est indiquée par des parenthèses, mais en Python, la plage de contrôle est indiquée par : et indent.

control.py


a = True
if a != True and a == False:
    print(1)
elif a == None:
    print(2)
else:
    print(3)

print(range(10))

sum = 0
for i in range(10):
    sum += i
print(sum)

sum = 0
i = 0
while True:
    sum += i
    i += 1
    if i >= 10:
        break
print(sum)
3
range(0, 10)
45
45

Il y a ʻif, ʻelse et un autre ʻelif. C'est une abréviation pour else if, mais c'est un peu bizarre. À la conditionandEt bien sûrorÀ cause de cela, C's&&Quand||C'est un substitut à. Je n'ai pas remarqué jusqu'à ce que je reçoive un commentaire, mais en Python&&Quand||`N'existe pas. Mise en garde.

for fonctionne parce que je ne comprends pas pour i dans l'intervalle (10):. Quand j'imprime range (10), j'ai une meilleure idée de range (0, 10), mais pour le moment, ʻi` a une valeur de 0 à 9 (10-1). Il est conçu pour faire une boucle avec l'entier de. Ouais je ne sais pas.

Supplément. Comme vous l'avez mentionné dans le commentaire, si vous utilisez print (list (range (10))), ce sera [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], puis Vous pouvez voir que c'est une "liste" à gérer. En Python2, vous pouvez obtenir cette liste avec print (range (10)) sans transtypage dans la liste, et le for introduit ici est la même opération que pour en utilisant la liste (qui sera traitée ensuite). C'est très facile à comprendre, mais malheureusement, cela a changé dans Python3. Ce n'est pas une mauvaise chose, c'est une mise à niveau en termes de gestion de la mémoire. Dans cet article, je suppose que j'ai assez d'esprit pour bouger, alors j'essaie juste de l'expliquer correctement comme ci-dessus. Si vous voulez en savoir plus, veuillez google avec "range xrange" ou "Python 2/3 difference".

L'incrément est «sum + = 1», mais notez qu'il ne peut pas être «sum ++».

Je pense que «while» reste le même. «break» est le même que le langage C. Bien qu'il ne soit pas écrit dans le code, continue est également disponible de la même manière que le langage C.

Listes et dictionnaires

Au lieu de tableaux en C, Python a des listes et des structures au lieu de dictionnaires. Non, au lieu d'une structure, c'est une classe. Mais pour le moment, je vais vous présenter le dictionnaire car le dictionnaire suffit pour écrire correctement le programme.

list_dict.py


lst = [1, 2, 3]
print(lst[1])

lst.append(4)
print(lst)

lst.remove(2)
print(lst)

for neko in lst:
    print(neko)


dct = {'year':2016, 'month':12, 'day':6}
print(dct['year'])

dct['hour'] = 0
print(dct)

del dct['month']
print(dct)
2
[1, 2, 3, 4]
[1, 3, 4]
1
3
4
2016
{'year': 2016, 'day': 6, 'hour': 0, 'month': 12}
{'year': 2016, 'day': 6, 'hour': 0}

Python n'a pas besoin de malloc pour travailler avec des listes (tableaux). Python le gère pour vous. Je suis intelligente.

Il y a des choses fonctionnelles de notation pour la première fois comme .append () et .remove () pour les variables de liste, mais c'est ce qu'on appelle orienté objet et ne peut être utilisé que pour des objets appelés listes. .. C'est comme ʻappend (lst, 2) `. Eh bien, ne vous inquiétez pas, avalez-le, c'est juste hors de propos. Le contenu de la liste est appelé éléments, mais append ajoute l'élément à la fin de la liste et remove supprime l'élément spécifié (à proprement parler, l'élément le plus proche du début de la liste et le même que la valeur spécifiée est supprimé). C'est une opération.

J'utilise une liste pour faire l'opération for neko in lst:, qui peut être un peu inconnue. C'est une opération qui assigne les éléments à neko un par un dans la liste nommée lst et fait tourner la boucle. Si lst = [1, 3, 4], 1 est pour neko la première semaine, 3 est pour neko la deuxième semaine, et neko est pour la troisième semaine. «4» est assigné et fait le tour de la boucle.

Je pense qu'il est facile de comprendre la valeur initiale d'entrée et l'ajout et la suppression d'éléments dans le dictionnaire. Après avoir regardé le .remove () dans la liste, cela ressemble à del, mais hmm, je me demande ce que c'est. Eh bien, que dois-je vouloir effacer? del est un outil assez général qui est également utilisé lorsque vous souhaitez supprimer d'autres variables.

Les listes et les dictionnaires peuvent être n'importe quoi en tant qu'élément, c'est-à-dire non seulement des nombres et des chaînes de caractères, mais aussi des listes dans des listes, des dictionnaires dans des dictionnaires, des dictionnaires dans des listes, etc. Si vous pouvez bien l'utiliser, vous pouvez manipuler la plupart des données avec cela.

une fonction

Créez votre propre fonction préférée. Le chef-d'œuvre de la fonction est l'échange.

swap.py


def swap(a, b):
    tmp = a
    a = b
    b = tmp
    return a, b

a = "neko"
b = "inu"

print(a, b)
a, b = swap(a, b)
print(a, b)
neko inu
inu neko

Encore une fois, vous spécifiez la plage avec «:» et une indentation.

En langage C, l'échange est réalisé en passant un pointeur et en manipulant la destination de référence du pointeur, mais dans divers Pythons lâches, la valeur de retour de la fonction peut être manipulée de manière flexible, de sorte que même un code approprié fonctionne correctement. Je vais. En fait, swap n'a pas à se soucier de créer une fonction, simplement parce que je ne pouvais pas penser à un exemple de fonction. Il est composé de «a, b = b, a».

Cependant, si vous écrivez trop, vous risquez de vous blesser.

list_reverse.py


def list_reverse(lst):
    lst.reverse()
    return 0

def add(a):
    a += 1
    return 0

lst = [1, 2, 3, 4, 5]
lst2 = lst
print(lst)
list_reverse(lst)
print("lst :", lst)
print("lst2:", lst2)

a=1
add(a)
print(a)
[1, 2, 3, 4, 5]
lst : [5, 4, 3, 2, 1]
lst2: [5, 4, 3, 2, 1]
1

J'ai créé une fonction inutile list_reverse () qui effectue délibérément l'opération .reverse () pour changer l'ordre de la liste dans la fonction. C'est vraiment inutile si vous passez juste la valeur.

Cependant, je pense que la liste d'origine n'est pas affectée simplement en passant la liste à la fonction et en inversant l'ordre dans la fonction, mais la liste d'origine est également affectée et l'ordre est inversé. En effet, la liste est essentiellement traitée comme un pointeur. Puisque vous passez par référence à la fonction, le fonctionnement de la fonction affecte la liste d'origine.

Il y a une affectation avec lst2 = lst, mais ce n'est pas non plus une copie de la valeur. Puisque la liste est fondamentalement passée par référence, ces deux listes sont synchronisées et sont identiques. Le «lst2», qui ne devrait pas être lié à cette preuve, est également dans l'ordre inverse.

En revanche, la variable ʻan'a aucun effet même si elle est incrémentée par la fonction ʻadd (). C'est parce qu'il est passé par valeur (comme).

Quand je regarde, il semble que tous sont passés par référence. Lorsque la valeur est modifiée, il semble qu'elle soit divisée en (1) [type qui change la destination de référence] et (2) [type qui sécurise soudainement une autre zone et change la destination de référence]. Je pensais que c'était une douleur, mais c'est certainement correct en termes de gestion de la mémoire. Référence: Passage par valeur et passage par référence en Python

import Python semble avoir beaucoup de bibliothèques. Je ne suis pas familier avec cela, mais quand je cherche une telle fonction, je pense qu'il y a une bibliothèque et qu'elle est bien entretenue.

En langage C c'était #include <>, mais en Python c'est ʻimport`.

import.py


import copy

def list_reverse(lst):
    lst.reverse()
    return 0

lst = [1, 2, 3, 4, 5]
lst2 = copy.deepcopy(lst)
print(lst)
list_reverse(lst)
print("lst :", lst)
print("lst2:", lst2)
[1, 2, 3, 4, 5]
lst : [5, 4, 3, 2, 1]
lst2: [1, 2, 3, 4, 5]

ʻImport copy et lst2 = copy.deepcopy (lst) . J'ai utilisé .deepcopy ()de la maison decopy. Comme vous pouvez le voir dans la sortie, cette fois, lst2 n'est pas synchronisé avec lst car il vient de copier la valeur de lst en utilisant .deepcopy () `chan. Tu l'as fait.

en conclusion

Je pense avoir abordé les bases des halos, des variables, des instructions de contrôle, des listes et des dictionnaires, des fonctions et des importations. Il y a de nombreuses parties que je n'ai pas abordées, telles que les nombres complexes en termes de variables et les commutateurs en termes d'instructions de contrôle (il n'y avait pas de commutateur en Python !!). Même ainsi, si vous êtes une personne qui a fait tout le langage C, vous pouvez google si vous pensez "Cette fonction n'est-elle pas disponible?" Il y en a de toute façon.

Comme je l'ai mentionné au début, je l'ai écrit avec l'espoir que les gens qui n'ont touché que le langage C pour le moment, en particulier ceux qui sont B3 ou moins, auront une chance de toucher Python. Si vous faites chaque devoir de leçon en langage C, vous n'aurez pas de corps, non? Il n'est pas nécessaire que ce soit Python, vous devriez donc toucher d'autres langages d'écriture rapide. Je pensais que ce serait génial si je pouvais étudier Python3, mais dans la partie de base, il n'y avait qu'une différence à propos de l'impression, donc cela n'avait pas beaucoup de sens après tout.

De nos jours, je ne peux toujours pas écrire de programmation orientée objet. J'écrirai un type procédural et surpasserai la situation. Même ainsi, je peux (probablement) faire quelque chose qui semble être de la recherche, donc je pense que celui que j'ai écrit cette fois sera un peu utile pour faire quelque chose qui semble être de la recherche.

Malgré tout, j'ai écrit un article sans intérêt. Oh, et j'espère que cela réduira les obstacles pour le calendrier de l'Avent.

(Merci pour le commentaire de correction)

Recommended Posts

Next Python en langage C
API C en Python 3
Étendre python en C ++ (Boost.NumPy)
Recherche binaire en Python / C ++
ABC166 en Python A ~ C problème
Résoudre ABC036 A ~ C avec Python
Comment envelopper C en Python
Résoudre ABC037 A ~ C avec Python
Ecrire un test unitaire de langage C en Python
Quadtree en Python --2
Python en optimisation
CURL en Python
Métaprogrammation avec Python
Python 3.3 avec Anaconda
Géocodage en python
SendKeys en Python
Méta-analyse en Python
Unittest en Python
Époque en Python
Allemand en Python
DCI en Python
tri rapide en python
nCr en python
N-Gram en Python
Programmation avec Python
notes de python C ++
Plink en Python
Constante en Python
python, openFrameworks (c ++)
FizzBuzz en Python
Sqlite en Python
Étape AIC en Python
LINE-Bot [0] en Python
CSV en Python
Assemblage inversé avec Python
Réflexion en Python
Constante en Python
nCr en Python.
format en python
Scons en Python 3
Puyopuyo en python
python dans virtualenv
PPAP en Python
Quad-tree en Python
Réflexion en Python
Chimie avec Python
Hashable en Python
DirectLiNGAM en Python
LiNGAM en Python
Aplatir en Python
Aplatir en python
Résoudre ABC175 A, B, C avec Python
Algorithme en Python (ABC 146 C Dichotomy
Implémenter le filtre FIR en langage Python et C
Ecrire le fichier O_SYNC en C et Python
Générer un langage C à partir d'une expression S avec Python
Exécutez Python en C ++ sur Visual Studio 2017
Liste triée en Python
AtCoder # 36 quotidien avec Python