Re: Tri de la puissance humaine [Python]

J'ai fait ça avant.

[Réinvention des roues] Sort de tournoi à propulsion humaine [Python]

C'était certainement amusant de réfléchir et de vérifier l'algorithme, mais c'est devenu tellement ridicule que j'inclurai un moyen intelligent de changer simplement la fonction d'appel de tri.

__ Les références: __ entertainment-lab: Implémentation du tri original en Python:

Code entier

La partie essentielle du tri est laissée au véritable tri Python, donc naturellement, elle sera très courte.

ranking_sort.py


#!/usr/bin/env python
# -*- coding:utf-8 -*-
#
# written by ssh0, December 2014.

description = """
Interface de classement pour l'auto-analyse.
Dans cette application
Créer une question comparative basée sur la liste donnée
Le classement est terminé lorsque l'utilisateur y répond.
              """

import argparse
import sys

def human_cmp(a, b):
    print '\nwhich ones do you like?'
    print '  [j]: %s, [k]: %s. [=]:eq' % (a, b)
    key_input = raw_input(">>> ")
    if key_input == 'j':
        ans = -1
    elif key_input == 'k':
        ans = 1
    elif key_input == '=':
        ans = 0
    else:
        raise ValueError('please select by "j", "k" or "=".')
    return ans


if __name__ == '__main__':

    parse = argparse.ArgumentParser(description=description)
    parse.add_argument('-l', '--list',
                       dest='objects',
                       nargs='*',
                       type=str,
                       help='list of some objects',
                       default=argparse.SUPPRESS
                       )
    args = parse.parse_args()
    data = args.objects
    data.sort(cmp=human_cmp)
    print data

La fonction passée à la fonction de tri est human_cmp. Faites attention uniquement à la valeur renvoyée par la fonction. Comparez les deux arguments et renvoyez une valeur négative si le premier argument est plus petit que le deuxième argument, 0 s'ils sont identiques et une valeur positive s'ils sont plus grands.

Exemple d'exécution

➤ python ranking_sort.py -l 3 1 4 8 5 2 6 7

which ones do you like?
  [j]: 1, [k]: 3. [=]:eq
>>> j

which ones do you like?
  [j]: 4, [k]: 1. [=]:eq
>>> k

which ones do you like?
  [j]: 4, [k]: 3. [=]:eq
>>> k

which ones do you like?
  [j]: 8, [k]: 3. [=]:eq
>>> k

which ones do you like?
  [j]: 8, [k]: 4. [=]:eq
>>> k

which ones do you like?
  [j]: 5, [k]: 4. [=]:eq
>>> k

which ones do you like?
  [j]: 5, [k]: 8. [=]:eq
>>> j

which ones do you like?
  [j]: 2, [k]: 4. [=]:eq
>>> j

which ones do you like?
  [j]: 2, [k]: 3. [=]:eq
>>> j

which ones do you like?
  [j]: 2, [k]: 1. [=]:eq
>>> k

which ones do you like?
  [j]: 6, [k]: 4. [=]:eq
>>> k

which ones do you like?
  [j]: 6, [k]: 8. [=]:eq
>>> j

which ones do you like?
  [j]: 6, [k]: 5. [=]:eq
>>> k

which ones do you like?
  [j]: 7, [k]: 4. [=]:eq
>>> k

which ones do you like?
  [j]: 7, [k]: 6. [=]:eq
>>> k

which ones do you like?
  [j]: 7, [k]: 8. [=]:eq
>>> j
['1', '2', '3', '4', '5', '6', '7', '8']

C'est la puissance humaine, mais bien sûr, vous pouvez définir vous-même une fonction comme une source de référence.

Épilogue

La dernière fois, c'était ... C'était bien parce que c'était amusant. Je n'ai pas d'autre choix que de le dire ... Ou plutôt, il n'était pas nécessaire de l'écrire quand je l'ai remarqué.

Recommended Posts

Re: Tri de la puissance humaine [Python]
[Python] Tri des données Numpy
Tri des fichiers image avec Python (2)
Tri des fichiers image avec Python (3)
Techniques de tri en Python
Tri des fichiers image avec Python
Python
Algorithme de tri et implémentation en Python
Ruby Python Java Tri insensible à la casse
Implémentation du tri original en Python
Tri des fichiers par convention de dénomination à l'aide de Python
[Python] Trier les types de collection comme référence
[Réinvention des roues] Tri de tournois à propulsion humaine [Python]