PDA

Visualizza la versione completa : [Python] Stringhe


maiosyet_2
24-04-2005, 02:34
Poniamo stringa = "abc"

a = 1
b = 2
c = 3

devo leggere la stringa ed assegnargli un valore numerico secondo lo schemino.
Primo metodo che ho usato:



value = 1

for char in String:
if char == "a":
value = 1
total = total * value

elif char == "b":
value2 = 2
total = total * value2

elif char == "c":
value3 = 3
total = total * value3

print value


Funzionare funziona, ma le stringhe "abc", "bca" e "acb" chiaramente finiscono ad avere lo stesso valore: per ovviare a questo pensavo di aggiungere al
total = total * value<x> + y un + y dove y č la posizione del carattere nella stringa: ad esempio in "cba", "a" = 1(di value) + 3 (posizione).

Un'idea su come fare? :fagiano:

dekdek
24-04-2005, 10:34
Il Java le librerie usano questo metodo:

total = total * costante + valore[x]

maiosyet_2
24-04-2005, 15:19
Ci sto provando, ma non riesco a trovare una soluzione...
Ho bisogno di una cosa cosė:



for char in String:
if char == "a":
value = 1
total = total * value + <posizione>


Quindi nella stringa "xc"



...
elif char == "c":
value = 3 (valore di c)
total = total * value + 2 (posizione di b nella stringa)


Thanks :stordita:

dekdek
24-04-2005, 16:33
Cmq nel calcolo dell'hash non puoi pretendere di avere un valore diverso per ogni stringa...

Ikitt
24-04-2005, 17:53
Originariamente inviato da maiosyet_2
Poniamo stringa = "abc"

a = 1
b = 2
c = 3

devo leggere la stringa ed assegnargli un valore numerico secondo lo schemino.
Primo metodo che ho usato:



value = 1

for char in String:
if char == "a":
value = 1
total = total * value

elif char == "b":
value2 = 2
total = total * value2

elif char == "c":
value3 = 3
total = total * value3

print value


Funzionare funziona, ma le stringhe "abc", "bca" e "acb" chiaramente finiscono ad avere lo stesso valore: per ovviare a questo pensavo di aggiungere al
total = total * value<x> + y un + y dove y č la posizione del carattere nella stringa: ad esempio in "cba", "a" = 1(di value) + 3 (posizione).

Un'idea su come fare? :fagiano:

La prima cosa (brutta) che mi e` venuta in mente:


$ python
Python 2.3.5 (#2, Mar 27 2005, 09:43:31)
[GCC 3.3.5 (Debian 1:3.3.5-12)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> String = 'abc'
>>> total = 0
>>> values = dict((('a', 1), ('b',2), ('c',3)))
>>> values
{'a': 1, 'c': 3, 'b': 2}
>>> for i in range(len(String)):
... total += (i + values[String[i]])
...
>>> total
9

Vedi se puoi trovarci qualche spunto utile :fagiano:

Loading