2016-05-16 16 views
0

Ich bin ein Anfänger in Python. Ich bin in Codewars auf diese Frage gestoßen.ValueError: ungültiges Literal für int() mit Basis 10

Jaden ist für einige seiner Philosophie bekannt, die er über Twitter liefert. Wenn er auf Twitter schreibt, ist er dafür bekannt, fast immer jedes Wort zu kapitalisieren. Ihre Aufgabe besteht darin, Zeichenfolgen so zu konvertieren, wie sie von Jaden Smith geschrieben wurden. Die Strings sind tatsächliche Zitate von Jaden Smith, aber sie werden nicht auf die gleiche Art und Weise kapitalisiert, wie er sie ursprünglich eingegeben hat.

Beispiel:

Nicht Jaden Gefasste: "Wie kann Spiegel real sein, wenn unsere Augen nicht real sind"

Jaden Gefasste: „Wie Spiegel Echt sein kann, wenn unsere Augen sind nicht Real“

Dies ist mein Versuch (ich soll eine Funktion Code)

def toJadenCase(string): 
    l = len(string) 
    for i in range(0,l): 
     if string[i] == ' ': 
      y = string[i] 
      string[i+1] = chr(int(y)-32) 
    return srting 
s = raw_input() 
print toJadenCase(s) 

Sobald er ausgeführt wird, zeigten die folgenden Fehler

bis
How can mirrors be real if our eyes aren't real (this is the input string) 
Traceback (most recent call last): 
    File "jaden_smith.py", line 9, in <module> 
    print toJadenCase(s) 
    File "jaden_smith.py", line 6, in toJadenCase 
    string[i+1] = chr(int(y)-32) 
ValueError: invalid literal for int() with base 10: '' 

ich nicht diese Fehler auch nach dem Google-ing es verstehen konnte. Jede Hilfe wäre willkommen. Ich wäre auch gut, wenn andere Fehler in meinem Code hervorgehoben werden und ein besserer Code vorgeschlagen wird.

Vielen Dank im Voraus: D

+3

Warum versuchen Sie, whitespace zu einem int zu konvertieren? Meintest du "y = string [i + 1]"? und statt 'int()' meinst du 'ord()'? – Natecat

+2

Sie versuchen, jeden Platz in Ihrer Nachricht in einen Int zu konvertieren. Was ist der Int-Wert von ""? –

+0

Das ist ein Fehler, ich wollte String [i + 1] in int umwandeln. – Kaushik

Antwort

1

Als Extras weist darauf hin, String nicht als Variablenname

die Zen of Python Nach verwendet werden soll, ist dies technisch eine Funktion, die genau das tut, was Sie versuchen, zu erreichen:

def toJadenCase(quote): 
    return quote.title() 

Edit:

Überarbeitete ver sion mit Apostroph umgehen:

import string 

def toJadenCase(quote): 
    return string.capwords(quote) 
+0

schließen, aber es wird auch die t nach dem Apostroph – Vincenzooo

+0

großgeschrieben Dies wird nicht funktionieren. Verwenden Sie 'capwords()' aus dem 'string' Modul. Beispiel: 'titleize = lamda s: __import __ (" Zeichenfolge "). Capwords (s)'. Ich würde es lieber importieren und wahrscheinlich eine echte Funktion verwenden, aber ich bin ein wenig eingeschränkt atm. – Goodies

+0

Aus diesem Grund sollten Sie 'string' nicht als Parameternamen verwenden. – Goodies

0

Zuerst müssen Sie verstehen, dass Strings unveränderlich ist, so können Sie ein einzelnes Zeichen in einem String nicht gesetzt, sondern eine neue Zeichenfolge von dem alten bauen und die alten ersetzen (das kann in der Regel noch in einem Durchgang getan werden, so ist es keine große Komplikation). Zweitens, für die meisten dieser Art von Operationen ist es viel besser, die Methoden des String-Objekts selbst zu verwenden, anstatt alles von Grund auf neu zu erstellen.

sagte, dass es noch einige Komplikationen mit der Frage, aber eine Funktion, die das tut, was Sie in der Modulstring wollen:

import string 
s="How can mirrors be real if our eyes aren't real" 
newstring=string.capwords(s) 

Wenn Sie (warum ?!) eine DIY-Lösung bevorzugen (mit String-Methoden):

newstring=' '.join([ss.capitalize() for ss in s.split()]) 

anzumerken, dass split ohne Argument teilt den String auf jeder Leerraum (zB Laschen etc.), dass ich denke, ist das gewünschte Verhalten.

0

Wenn Sie dies tun wollen, eine Funktion, ohne die bereits vorhanden ist, ist dies, wie ich es tun würde, und ich werde alles erklären:

Sie eine Zeichenfolge mit nur Text basiert Worte erhalten Angenommen und alle Wörter beginnen mit einem Zeichen *

def toJadenCase(string): 
    words = string.strip().split() 
# This first strips all empty spaces around the words in the text and then splits the string by spaces (default) otherwise you can add a character inside split in order to split it at the character. This returns a list of words in the sentence. 
    li = [] # initialize empty list 
    for word in words: 
     word = chr(ord(word[0])-32) + word[1:] 
# So there's a couple of things going on here. 
# I could use .upper() to upper case something (like word[0].upper() + word[1:] 
# in order to get it but I wanted to do it without the use of that. 
# That being said, ord just figures out the ascii number and subtracting 
# 32 makes it uppercase. chr changes it back to a string. 
# Then it can be concatenated to the rest of the word. 
# Strings can be treated as lists in python so word[0] and word[1:] works 
Also, word[1:] just means from the 1st index to the end. 
    li.append(word) # this appends the word to the list 
    return ' '.join(li) # this joins all of the words in the list with a space 

Nun, wenn Sie etwas viel prägnant wollen (können Sie .capitalize() verwenden):

def toJadenCaseShort(string): 
    return ' '.join([x.capitalize() for x in string.strip().split()]) 

, die zurückgibt:

Im Grunde genommen nutzt es Listenverstehen, um die Wörter zu trennen und zu teilen, kapitalisiert sie und verbindet sie dann mit Leerzeichen!

Natürlich könnten Sie einfach string.title() als Marke s verwenden. sagt aber was macht den Spaß daran? :)

0

Hier ist die Antwort, die für mich übergeben

import string 
 
def toJadenCase(str): 
 
    quote = string.capwords(str) 
 
    return quote #Do not use print(quote) as it adds spaces

def toJadenCase (str): quote = string.capwords (str) return Zitat #Do nicht drucken verwenden (Zitat), da es Leerzeichen hinzufügt

Verwandte Themen