2016-05-13 5 views
0

Ich habe Mühe, die vom Benutzer angegebene Datumseingabe als MM/TT/JJJJ in 3 Variablen zu konvertieren. Ich kann das nicht aufteilen, weil ich einen Fehler erhalte, da es sich um ein Float handelt.MM/TT/JJJJ Datum zur Variablenkonvertierung m, d und y

>>> date=3/2/2016 
>>> date.split('/') 
Traceback (most recent call last): 
    File "<pyshell#152>", line 1, in <module> date.split('/') 
AttributeError: 'float' object has no attribute 'split' 

Was muss ich hinzufügen, um sicherzustellen, dass das Datum bei der Division nicht ausgewertet wird?

def main(): 
    date=input("Enter date mm/dd/yyyy: ") 

Ich möchte die Datumseingabe als mm/tt/gegeben, und dann eine Möglichkeit, dies als m = Monat d = Tag y = Jahr

-3 Variablen zu konvertieren, was der beste Weg ist zu tun Dies?

+1

Ich verstehe Ihre Eingabedaten oder Ihre Fehlermeldung nicht. Bitte geben Sie ein Muster an. – TigerhawkT3

+0

>>> Datum = 3/2/2016 >>> date.split ('/') Traceback (jüngste Aufforderung zuletzt): File "" Linie 1 in date.split ('/ ‚) Attribute:‚schweben‘Objekt hat kein Attribut‚split‘ >>> –

+0

ich glaube, es sollte date = sein‘ 3/2/Jahr 2016' Das Problem ist, dass python dividieren und die Schaffung der Schwimmer tut 0,000744047619047619 anstelle der Eingabe als Zeichenfolge – user1462442

Antwort

0

Ich schrieb dieses folgende Stück Code und es funktioniert einwandfrei.

>>> date='3/2/2016' 
>>> new=date.split('/') 
>>> new 
['3', '2', '2016'] 
>>> 
>>> m,d,year=new 
>>> m 
'3' 
>>> d 
'2' 
>>> year 
'2016' 
>>> 

wie Jessica Smith hat darauf bereits aus, Datum = 3/2/2016 Ausdrücke und teilt die Zahlen auswertet. Es muss vom String-String-Typ sein, der geteilt werden soll.

2

Versuchen str.split:

>>> test_date = "05/12/2016" 

>>> month, day, year = test_date.split('/') 

>>> print("Month = %s, Day = %s, Year = %s") % (month, day, year) 
Month = 05, Day = 12, Year = 2016 
+0

das hat funktioniert !! Danke –

-1

Versuchen:

def main(): 
    month, day, year = [int(x) for x in raw_input("Enter date mm/dd/yyyy: ").split('/')] 
    print "Month: {}\n".format(month), "Day: {}\n".format(day), "Year: {}".format(year) 

main() 

Ausgang:

Enter date mm/dd/yyyy: 03/09/1987 
Month: 3 
Day: 9 
Year: 1987 
0

Der Fehler „ 'schweben' Objekt Kein Attribut 'split' " schlägt vor, dass type(date) == float in Ihrem Beispiel bedeutet, dass Sie versuchen, Python 3-Code mit Python 2-Interpreter auszuführen. input() wertet seine Eingabe als Python-Ausdruck aus, anstatt sie als Zeichenfolge zurückzugeben.

Um das Datum als String auf Python 2, verwenden raw_input() statt input():

date_string = raw_input("Enter date mm/dd/yyyy: ") 

Um es auf beiden Python funktioniert 2 und 3, am Anfang des Skripts hinzu:

try: # make input() and raw_input() to be synonyms 
    input = raw_input 
except NameError: # Python 3 
    raw_input = input 

Wenn Sie das alte Python 2 input() Verhalten benötigen; Sie könnten eval() explizit aufrufen.

das Eingangsdatum bestätigen, könnten Sie use datetime.strptime() und ValueError fangen:

from datetime import datetime 

try: 
    d = datetime.strptime(date_string, '%m/%d/%Y') 
except ValueError: 
    print('wrong date string: {!r}'.format(date_string)) 

.strptime() garantiert, dass das Eingangsdatum ansonsten gilt ValueError angehoben wird. Bei Erfolg funktionieren d.year, d.month, d.day wie erwartet.

setzen sie alle zusammen (nicht getestet):

#!/usr/bin/env python 
from datetime import datetime 

try: # make input() and raw_input() to be synonyms 
    input = raw_input 
except NameError: # Python 3 
    raw_input = input 

while True: # until a valid date is given 
    date_string = raw_input("Enter date mm/dd/yyyy: ") 
    try: 
     d = datetime.strptime(date_string, '%m/%d/%Y') 
    except ValueError: # invalid date 
     print('wrong date string: {!r}'.format(date_string)) 
    else: # valid date 
     break 

# use the datetime object here 
print("Year: {date.year}, Month: {date.month}, Day: {date.day}".format(date=d)) 

Asking the user for input until they give a valid response See.

könnten Sie .split('/') anstelle von .strptime(), wenn Sie müssen:

month, day, year = map(int, date_string.split('/')) 

Es überprüft nicht, ob die Werte ein gültiges Datum im gregorianischen Kalender bilden.

Verwandte Themen