2012-11-07 1 views
2

lorsque le dernier index sur la chaîne a "x" ou "X" (il est représenté par 10), donc si j'ai quelque chose comme "1x", ce qui signifie 11 (1 + 10)ValueError: littéral invalide pour int() avec la base 10: 'x'

def main(): 
    s1 = "013162959x" 
    partial_sums(s1) 


def partial_sums(s1): 
    lst =[] 
    sum = 0  
    for i in range(len(s1)): 
     if (i == len(s1) -1) and (s1[i] == "x" or "X"): 
      sum = sum + int(s1[i]) + 10 
     else: 
      sum = sum + int(s1[i]) 
     lst.append(sum) 
    print(lst) 


main() 

je suis un ValueError: invalide littéral pour int() avec la base 10: 'x'

la sortie doit être [0, 1, 4, 5, 11, 13, 22, 27, 36, 46]

Lorsque la chaîne contient la valeur "X", elle fonctionne correctement.

def main(): 
    s1 = "0131629592" 
    partial_sums(s1) 

def partial_sums(s1): 
    lst1 =[] 
    sum = 0 
    for i in range(len(s1)): 
     sum = sum + int(s1[i]) 
     lst1.append(sum) 
    print(lst1) 

main() 

Comment puis-je résoudre ce problème?

Répondre

1

Cette déclaration:

if (i == len(s1) -1) and (s1[i] == "x" or "X"): 
     sum = sum + int(s1[i]) + 10 

appelle encore int sur s1[i] même si s1[i] est "x". Vous voulez simplement sum += 10.

Cependant, notez que or ne fonctionne pas comme vous l'utilisez. Pour citer les documents, « L'expression x or y évalue d'abord x, si x est vrai, sa valeur est retournée, sinon, y est évaluée et la valeur résultante est renvoyée. » IOW, "a" == "b" or "c" renvoie "c", non False, et "c" est évalué comme True.

En outre, puisque sum est un builtin vraiment utile, c'est probablement une mauvaise idée de l'ombre avec une variable de votre choix avec le même nom. total est souvent utilisé à la place.

+0

Puis-je faire de cette façon? if (i == len (s1) -1) et ((s1 [i] == "x") ou (s1 [i] == "X")) ou existe-t-il un meilleur moyen? – user1804925

+0

@ user1804925: cela devrait fonctionner. Vous pouvez également faire 's1 [i] .lower() == 'x'' ou' s1 [i] dans (' x ',' X ') '(je ferais probablement le premier, moi-même.) – DSM

Questions connexes