Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#101 Le 12/08/2007, à 18:19

scholi

Re : [Résolu] gros débutant en python : besoin d'aide

Si jamais:

HymnToLife a écrit :
t = range(len(ch))
t.remove(0)

équivaut à

 t = range(1,len(ch))

Dernière modification par scholi (Le 12/08/2007, à 18:26)


S'il n'y a pas de solution, c'est qu'il n'y a pas de problème.

Hors ligne

#102 Le 12/08/2007, à 19:26

HymnToLife

Re : [Résolu] gros débutant en python : besoin d'aide

scholi a écrit :

Si jamais:

HymnToLife a écrit :
t = range(len(ch))
t.remove(0)

équivaut à

 t = range(1,len(ch))

Exact *Se frappe le front* comment j'ai pu rater ça ?


- Rodrigue, as-tu du cœur ?
- Non, mais j'ai du pique !

Hors ligne

#103 Le 12/08/2007, à 20:42

kvb

Re : [Résolu] gros débutant en python : besoin d'aide

Par rapport au tutoriel, il n'est pas encore rendu aux classes, fonctions etc ..
bref, l'exercice vise a utilisé la commande while et aussi comprendre la suptibilité
de la virgule dans la commande print (comme l'exercice precedant)

c,ch=0,"ubuntu"
while c<len(ch):
    print ch[c],"*",
    c=c+1

je trouve cela, hyper interressant de voir les différentes facon de parler le python pour des exercices simples

Dernière modification par kvb (Le 12/08/2007, à 20:45)

Hors ligne

#104 Le 12/08/2007, à 20:55

HymnToLife

Re : [Résolu] gros débutant en python : besoin d'aide

Ça retourne u * b * u * n * t * u *. Il veut u*b*u*n*t*u.


- Rodrigue, as-tu du cœur ?
- Non, mais j'ai du pique !

Hors ligne

#105 Le 12/08/2007, à 20:56

scholi

Re : [Résolu] gros débutant en python : besoin d'aide

Vous avez tester http://www.pythonchallenge.com??

Pour les débutant en python ça en vaut vraiment la peine, on apprend très vite et d'une manière bien plus intéressante (à mon goût) que faire des boucle while pour écrire u*b*u*n*t*u. (ne prenez pas ça comme une critique)


S'il n'y a pas de solution, c'est qu'il n'y a pas de problème.

Hors ligne

#106 Le 12/08/2007, à 21:52

/b/nt/

Re : [Résolu] gros débutant en python : besoin d'aide

HymnToLife a écrit :
/b/nt/ a écrit :

join reste fort, mais est ce qu'il peut insérer * entre deux lettres bien définies?

Oui mais c'est un peu plus complexe, par exemple

s = 'Ubuntu'
l = 'u' # on veut insérer le * après le premier u
i = s.find(l)+1
'*'.join([s[:i], s[i:]])

ça ne retourne rien !

#107 Le 12/08/2007, à 22:06

HymnToLife

Re : [Résolu] gros débutant en python : besoin d'aide

firas@Ana ~ $ python
Python 2.4.4 (#1, Aug 12 2007, 21:41:31)
[GCC 4.1.2 (Gentoo 4.1.2 p1.0.1)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> s = 'Ubuntu'
>>> l = 'u'
>>> i = s.find(l)+1
>>> i
3
>>> '*'.join([s[:i], s[i:]])
'Ubu*ntu'
>>>

Tu dois te tromper quelque part.


- Rodrigue, as-tu du cœur ?
- Non, mais j'ai du pique !

Hors ligne

#108 Le 12/08/2007, à 23:34

/b/nt/

Re : [Résolu] gros débutant en python : besoin d'aide

@HymnToLife

toujours rien, est ce parce que vous vous tournez sous gentoo -il me semble -?

Dernière modification par /b/nt/ (Le 12/08/2007, à 23:35)

#109 Le 12/08/2007, à 23:46

HymnToLife

Re : [Résolu] gros débutant en python : besoin d'aide

Ça ne change rien, Python est le même partout...

firas@Miu ~ $ python
Python 2.4.4 (#1, Mar  9 2007, 00:49:13)
[GCC 3.3.5 (propolice)] on openbsd4
Type "help", "copyright", "credits" or "license" for more information.
>>> s = 'Ubuntu'
>>> l = 'u'
>>> i = s.find(l)+1
>>> '*'.join([s[:i], s[i:]])
'Ubu*ntu'
root@Ana:~# python
Python 2.5.1 (r251:54863, May  2 2007, 16:56:35)
[GCC 4.1.2 (Ubuntu 4.1.2-0ubuntu4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> s = 'Ubuntu'
>>> l = 'u'
>>> i = s.find(l)+1
>>> '*'.join([s[:i], s[i:]])
'Ubu*ntu'

- Rodrigue, as-tu du cœur ?
- Non, mais j'ai du pique !

Hors ligne

#110 Le 13/08/2007, à 07:16

scholi

Re : [Résolu] gros débutant en python : besoin d'aide

En effet python est le même partout est cela ne devrait rien changer. Tu as du faire un erreur de manip. Essaye de le faire en mode console. Sinon essaye de rajouter un print devant le '*'.join

sinon teste voir:

u='Ubuntu'
i=u.find('u')
print u[:i+1]+'*'+u[i+1:]

ça fait la même chose. Si ça affiche toujours rien, réinstall python

et aller, juste pour s'amuser:

'u*'.join('Ubuntu'.split('u'))[:-1]

PS: les 5 derniers caractères ne sont pas un smiley wink

de manière encore plus courte:

'u*'.join('Ubuntu'.split('u',1))

QQu arrive à faire plus court?

Dernière modification par scholi (Le 13/08/2007, à 07:24)


S'il n'y a pas de solution, c'est qu'il n'y a pas de problème.

Hors ligne

#111 Le 13/08/2007, à 15:10

/b/nt/

Re : [Résolu] gros débutant en python : besoin d'aide

le code de scholi (sans join) a marché :

ch='ubuntu'
i=ch.find('u')
print ch[:i+3]+'*'+ch[i+3:]

Merci pour vous tous.

Dernière modification par /b/nt/ (Le 13/08/2007, à 15:28)

#112 Le 13/08/2007, à 15:23

/b/nt/

Re : [Résolu] gros débutant en python : besoin d'aide

HymnToLife a écrit :
firas@Ana ~ $ python
Python 2.4.4 (#1, Aug 12 2007, 21:41:31)
[GCC 4.1.2 (Gentoo 4.1.2 p1.0.1)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> s = 'Ubuntu'
>>> l = 'u'
>>> i = s.find(l)+1
>>> i
3
>>> '*'.join([s[:i], s[i:]])
'Ubu*ntu'
>>>

Tu dois te tromper quelque part.

après avoir ajouté print le code de HymnTolife a aussi marché :

s = 'Ubuntu'
l = 'u'
i = s.find(l)+1
print '*'.join([s[:i], s[i:]])

Merci.

#113 Le 16/08/2007, à 17:08

/b/nt/

Re : [Résolu] gros débutant en python : besoin d'aide

Bonsoir,

Voici une question  qui me tracasse : c'est une question sur les fonctions en programmation :

Par exemple, en python,  la fonction cube :

def cube(w):
    return w*w*w

print cube(3)

Donne évidemment cube(3) = 27

Ceci se fait sans aucun doute en affectant 3 à w. mais qu'elle est la commande qui donne cette instruction ? est ce c'est def qui est derrière cela ?  ou y'a t-il  un autre  code ...? lequel ?

Avez vous des éclaircissements ?

#114 Le 16/08/2007, à 19:34

scholi

Re : [Résolu] gros débutant en python : besoin d'aide

heu si tu as:

def func(a,b,c,d,e,f):
       print "a=%i, b=%i, c=%i, d=%i, e=%i, f=%i" %(a,b,c,d,e,f)

func(1,2,3,4,5,6)

donnera bien:

a=1, b=2, c=3, d=4, e=5, f=6

si c'est pas ce que tu voulais, alors explique mieux, car j'ai pas très bien compris...

sinon:

def func(a=0, b=0, c=0, d=0, e=1, f=3):
       print "a=%i, b=%i, c=%i, d=%i, e=%i, f=%i" %(a,b,c,d,e,f)

func(c=5,a=2, b=10)

donnera:
a=2, b=10, c=5, d=0, e=1, f=3

Dernière modification par scholi (Le 16/08/2007, à 19:38)


S'il n'y a pas de solution, c'est qu'il n'y a pas de problème.

Hors ligne

#115 Le 16/08/2007, à 21:11

/b/nt/

Re : [Résolu] gros débutant en python : besoin d'aide

Bonsoir,

le code :

x=3
y=x*x*x

print y

Donne évidement y =27 : ceci découle des affectations : x=3 veut dire placez 3 dans la variable (ou plutôt la mémoire) x , puis y = 3*3*3 c'est simple..(ici on voit l'affectation).

Mais dans le code :

def cube(w):
    return w*w*w

print cube(3)

pour afficher cube(3), on doit d'abord le calculer, pour le caculer on fait appel à la fonction cube(), mais  la fonction cube ne va pas affecter toute seule 3 dans la mémoire w, il doit y avoir un code qui gère les fonctions...lequel?

sinon comment se passe la procédure ?

j'espère que ma question est claire.

Dernière modification par /b/nt/ (Le 17/08/2007, à 00:09)

#116 Le 16/08/2007, à 21:18

tylhdar

Re : [Résolu] gros débutant en python : besoin d'aide

/b/nt/ a écrit :

pour afficher cube(3), on doit d'abord la calculer, pour la acculer on fait appel à la fonction cube(), mais  la fonction cube ne va pas affecter toute seule 3 dans la mémoire w, il doit y avoir un code qui gère les fonctions...lequel?

l' interpréteur python ?


un matériel non compatible linux est un matériel défectueux
ubuntu 10.4 sur pc1 ; debian squeeze sur pc2

Hors ligne

#117 Le 16/08/2007, à 21:25

scholi

Re : [Résolu] gros débutant en python : besoin d'aide

Non, il n'y a pas de code qui gère ça. Comme l'a dit tylhdar, c'est bien l'interpreteur python qui affecte automatiquement la valeur 3 à la variable w (attention, c'est une variable local à la fonction et non une variable globale!)

-------------------------

Sinon petite question python. J'ai une string composée de 1 et de 0 (mais de caractère "1" et "0") et je voudrais la transformer en hexadécimal (voire ensuite en binaire avec hexlify). Est-ce que qqu à une idée de comment je pourrais faire ça?

donc si
x="1010010101001010"
j'aimerais pouvoir calculer
y="a545"

Dernière modification par scholi (Le 16/08/2007, à 21:28)


S'il n'y a pas de solution, c'est qu'il n'y a pas de problème.

Hors ligne

#118 Le 17/08/2007, à 02:25

HymnToLife

Re : [Résolu] gros débutant en python : besoin d'aide

b='1010010101001010'; d=0; j=1

for i in b :
    if i == '1' : d += 2**(len(b)-j)
    j += 1

print("Binaire : %s" % b)
print("Décimal : %u % d)
print("Hexa : %x" % d)

C'est tout ce que j'ai trouvé...

Dernière modification par HymnToLife (Le 17/08/2007, à 03:02)


- Rodrigue, as-tu du cœur ?
- Non, mais j'ai du pique !

Hors ligne

#119 Le 17/08/2007, à 09:28

scholi

Re : [Résolu] gros débutant en python : besoin d'aide

j'avais une solution plus ou moins semblable. EN faite je cherche une solution en une ligne.

si x="ae47f3bc67"
pour avoir la version binaire il suffit de faire
binhex.unhexlify(x)
je me demandais si une fonction du genre unbinlify existait?


sinon je te conseil d'utiliser reduce au lieu du for, ça te ferra économiser 2 lignes  (et tu n'auras pas à faire d'initialisation de variable) wink

b='1010010101001010'
d=reduce(lambda a,b: 2*a+[0,1][b=='1'],b,0)
print("Binaire : %s" % b)
print("Décimal : %u % d)
print("Hexa : %x" % d)

Dernière modification par scholi (Le 17/08/2007, à 09:36)


S'il n'y a pas de solution, c'est qu'il n'y a pas de problème.

Hors ligne

#120 Le 17/08/2007, à 10:04

supergromz

Re : [Résolu] gros débutant en python : besoin d'aide

scholi a écrit :

sinon je te conseil d'utiliser reduce au lieu du for, ça te ferra économiser 2 lignes  (et tu n'auras pas à faire d'initialisation de variable)

Bonjour!

Grand consommateur de Python, j'ai remarqué 3 éléments "dangereux" dans ta phrase, ou tout du moins, contraires à la philosophie générale de Python:

1) "je te conseille d'utiliser reduce" => la fonction reduce devient obsolète avec le futur Python 2.6. On lui préfère la compréhension de liste (list comprehension en anglais), plus "pythonique", de même pour les autres méthodes de programmation fonctionnelle (map, zip, ... qui elles ne sont pas obsolètes il me semble)

2) "ca te fera économiser 2 lignes" => l'idiome principal de Python est "explicit is better than implicit". Economiser 2 lignes n'est pas forcément une bonne chose, on gagne en place ce que l'on perd en lisibilité. Poussé à l'extrême, certains blocs condensés en une ligne deviennent vite illisibles (par un tiers ou par soi-même un jour de stress - ou un lendemain de fête). En Python, le code se lit comme un poême. En Perl, le code se déchiffre comme du mandarin lol.

3) "tu n'auras pas à faire d'initialisation de variable" => sorti du contexte, c'est mâââl big_smile.
En Python, toutes les variables doivent être initialisées. Pour rejoindre le point #2, économiser des lignes ou des variables revient à réduire la lisibilité du code (à l'inverse, trop de variables inutiles polluent la lisibilité d'autant).
Evidemment dans le contexte actuel, je comprends ce que tu veux dire, c'est juste que si un débutant tombe là dessus par hasard (il l'aura bien cherché quand même), il peut interpréter ca différemment.

Voila, c'est tout, je passais juste pour dire bonjour. tongue

Hors ligne

#121 Le 17/08/2007, à 10:13

dwan

Re : [Résolu] gros débutant en python : besoin d'aide

Cette mise au point de supergromz me donne soif de Python, moi qui n'ai jamais programmé qu'en Matlab et en langage casio (bon j'avoue, j'ai effleuré le C une fois avec le site du zéro)...


Auto-hébergé !
HP dv6164ea

Hors ligne

#122 Le 17/08/2007, à 11:00

scholi

Re : [Résolu] gros débutant en python : besoin d'aide

supergromz a écrit :

Bonjour!

Grand consommateur de Python, j'ai remarqué 3 éléments "dangereux" dans ta phrase, ou tout du moins, contraires à la philosophie générale de Python:

1) "je te conseille d'utiliser reduce" => la fonction reduce devient obsolète avec le futur Python 2.6. On lui préfère la compréhension de liste (list comprehension en anglais), plus "pythonique", de même pour les autres méthodes de programmation fonctionnelle (map, zip, ... qui elles ne sont pas obsolètes il me semble)

En effet, je ne savais pas que reduce devenait obsolete. Mais t'arrive à me donner l'équivalent de mon reduce avec une "list comprehension"?

parceque sans le reduce moi je peux le faire avec un map, mais c'est justement moins lisible...

sum(map(lambda z, pow(2,len(b)-z[0])*[0,1][z[1]==1],enumerate(b)))

sinon je viens de regarder online et je vois nul part où il est indiquer que reduce devient obsolete. T'es sûr de ce que tu dis?

EDIT: C'est python 3.0 qui ne supportera plus reduce, pas python 2.6 si jamais

supergromz a écrit :

2) "ca te fera économiser 2 lignes" => l'idiome principal de Python est "explicit is better than implicit". Economiser 2 lignes n'est pas forcément une bonne chose, on gagne en place ce que l'on perd en lisibilité. Poussé à l'extrême, certains blocs condensés en une ligne deviennent vite illisibles (par un tiers ou par soi-même un jour de stress - ou un lendemain de fête). En Python, le code se lit comme un poême. En Perl, le code se déchiffre comme du mandarin lol.

à moitié d'accord. En effet il ne faut PAS à tout prix réduire son code pour avoir le moins de ligne possible. Mais les for ne sont eux non plus explicite. Je trouve qu'un reduce permet très vite de comprendre ce que l'on fait alors qu'un for il faut regarder sur quelle liste il fait le for quelle sont les variables, etc...

supergromz a écrit :

3) "tu n'auras pas à faire d'initialisation de variable" => sorti du contexte, c'est mâââl big_smile.
En Python, toutes les variables doivent être initialisées. Pour rejoindre le point #2, économiser des lignes ou des variables revient à réduire la lisibilité du code (à l'inverse, trop de variables inutiles polluent la lisibilité d'autant).
Evidemment dans le contexte actuel, je comprends ce que tu veux dire, c'est juste que si un débutant tombe là dessus par hasard (il l'aura bien cherché quand même), il peut interpréter ca différemment.

Je voulais juste dire que dans le cas du for on a besoin de 2 variables à initialiser (donc en lisant le code aussi à comprendre de où ça part et ce que ça fait). Alors qu'avec reduce tu as besoin de faire seulement l'initialisation du 0 qui est faite dans le reduce lui-même.

Enfin bref pour résumer, je suis tout à fait d'accord avec toi, il ne faut pas réduir à tout prix son code. Mais il y a des cas où cela devient plus lisible (c'est perso, mais moi je trouverai toujours un zip, map ou reduce plus "lisible" que la même fonction faite avec des for). De plus c'est beaucoup plus rapide, car il ne faut pas oublier que python n'est pas du tout optimisé pour faire des for. Comme reduce, map et zip sont des "build-in" commandes, le résultat ne serra que plus rapide (voire la même chose)

EDIT: De plus je ne vois absolument pas pourquoi ce serrait moins "pythonique" comme tu dis...

Dernière modification par scholi (Le 17/08/2007, à 11:14)


S'il n'y a pas de solution, c'est qu'il n'y a pas de problème.

Hors ligne

#123 Le 17/08/2007, à 16:50

supergromz

Re : [Résolu] gros débutant en python : besoin d'aide

scholi a écrit :

Enfin bref pour résumer, je suis tout à fait d'accord avec toi (...)

Je ne cherchais pas à m'interposer face à ta solution, simplement profiter de la forme de tes remarques pour appuyer le message que Python n'est pas qu'une syntaxe à apprendre, mais qu'il faut en comprendre la "philosophie" pour mieux apprécier le langage (simplicité de code, lisibilité, etc). Ca s'addresse implicitement aux nouveaux et aux curieux.

A vrai dire, je n'ai rien contre la fonction reduce (si ce n'est qu'elle disparait), mais pour reprendre les idées du créateur de Python (c'est en ce sens que j'appelle ca "pythonique"), il est préférable de substituer ces fonctions par des list comprehensions. Cette remarque est discutable, mais était argumentée par l'auteur:
- pas besoin de connaitre la syntaxe exacte des fonctions map, zip, reduce, ... => hop une list comprehension et c'est parti (ca peut se faire en une ou deux lignes, restons lisibles tongue)
- les list comprehensions ont été/vont être optimisées pour gagner en performance face aux fonctions ci dessus (maintenant je sais pas le statut exact de ca, et les gains en performance doivent être minimes face à nos besoins courants)
- ca ouvrait la voie vers le futur Python 3.0

Pour finir, si on me demandait ma solution, je n'utiliserais pas "reduce" et je remplacerai la fonction lambda par une vraie fonction sur 2 ou 3 lignes, pour y caser 1 ou 2 commentaires. Au final, je (=opinion personnelle suite à mon expérience du Perl en entreprise et à la disparition inexpliquée de collègues trop fiers de leur code spaghetti) trouverai mon code beaucoup plus lisible, mieux aéré, favorable au commerce équitable, contre les DRM, et qui préserverait la couche d'ozone cool.

Hors ligne

#124 Le 17/08/2007, à 17:07

supergromz

Re : [Résolu] gros débutant en python : besoin d'aide

dwan a écrit :

Cette mise au point de supergromz me donne soif de Python

Vas-y, fonce!
Python est un langage simple à apprendre, capable de toucher à tout ("batteries included": les librairies standard sont très variées; mail, ftp, maths, xml, web, threads, client-serveur, base de données, ...), et qui ne demande pas trop de connaissances préalables.
Par contre, il ne faut pas être allergique à l'anglais ... comme tout ce qui touche à l'informatique en fait.

Hors ligne

#125 Le 23/08/2007, à 23:41

/b/nt/

Re : [Résolu] gros débutant en python : besoin d'aide

Salut tout le monde,
Je voudrais savoir où puis je jeter un coup d' oeil sur les scripts intégrés à python?

Par exemple : l'utilisation de for (for _ in_ ) en python est différente du celle utilisée en pascal ou en c (dans ces deux derniers c'est arithmétique ); je voudrais savoir comment ceci est écrit dans la bibliothèque de python?