Συζήτηση
Γεια χαρά, Επισκέπτης
Όνομα χρήστη: Κωδικός: Να με θυμάσαι
  • Σελίδα:
  • 1
  • 2
  • 3

ΘΕΜΑ: λίγη βοήθεια εδω

λίγη βοήθεια εδω 8 Χρόνια 8 Μήνες πριν #3506

  • embryo
  • Το Άβαταρ του/της embryo
  • Αποσυνδεμένος
  • pyth__
  • Δημοσιεύσεις: 92
  • Ληφθείσες Ευχαριστίες 31
Κάτι που δεν ανέφερα είναι ότι επειδή εγώ το τρέχω με python 2.7.11, αντί για input χρησιμοποιώ raw_input.
Θεώρησα ότι το str(input) είναι το ίδιο με το raw_input, αλλά μάλλον δεν είναι.

Αν λοιπόν είσαι στην python 2 γράψε
text = raw_input('Input time: ')
Αν είσαι στην python 3 γράψε
text = input('Input time: ')
(θεωρώντας ότι το raw_input από την 2 έγινε απλό input στην 3 όπως λένε εδώ.

Στην python 2 λοιπόν δουλεύει κανονικά με τις τιμές που μου λες.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

λίγη βοήθεια εδω 8 Χρόνια 8 Μήνες πριν #3507

  • kamar
  • Το Άβαταρ του/της kamar
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 409
  • Ληφθείσες Ευχαριστίες 88
Όταν τρέχω τον κώδικά σου, μου βγάζει το παρακάτω σφάλμα:

Με την ώρα χωρίς εισαγωγικά:
~/pythonforum$ python time_test.py 
dwse thn wra:>12:23
Traceback (most recent call last):
  File "time_test.py", line 62, in <module>
    words = input('dwse thn wra:>')
  File "<string>", line 1
    12:23
      ^
SyntaxError: invalid syntax

και με εισαγωγικά:
~/pythonforum$ python time_test.py 
dwse thn wra:>'12:34'
Traceback (most recent call last):
  File "time_test.py", line 67, in <module>
    tok,pos = scan(words,td,ad)
  File "time_test.py", line 27, in scan
    if c in transition_table[state]:
KeyError: 's0'
Γράφω σε Python 3
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

λίγη βοήθεια εδω 8 Χρόνια 8 Μήνες πριν #3508

  • nora
  • Το Άβαταρ του/της nora
  • Αποσυνδεμένος
  • pyt___
  • Δημοσιεύσεις: 37
σε python 3 το κανω
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

λίγη βοήθεια εδω 8 Χρόνια 8 Μήνες πριν #3509

  • kamar
  • Το Άβαταρ του/της kamar
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 409
  • Ληφθείσες Ευχαριστίες 88
Όπως και να το τρέξω μου βγάζει KeyError. Σε debug επιστρέφει DIGIT.
Γράφω σε Python 3
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

λίγη βοήθεια εδω 8 Χρόνια 8 Μήνες πριν #3510

  • nora
  • Το Άβαταρ του/της nora
  • Αποσυνδεμένος
  • pyt___
  • Δημοσιεύσεις: 37
τι να κανω τωρα? που γινεται το λαθος? δεν εχω ιδέα τι να κάνω να το διορθώσω και σε 4 μερες η προθεσμια λhγei.. :( oyf....
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

λίγη βοήθεια εδω 8 Χρόνια 8 Μήνες πριν #3511

  • nora
  • Το Άβαταρ του/της nora
  • Αποσυνδεμένος
  • pyt___
  • Δημοσιεύσεις: 37
βρήκα το λάθος που χτύπαγε...πάνω ήταν δηλωμένο s0 ενω στη βιβλιοθήκη κατω χρησιμοποιώ q0. τώρα όμως μου βγάζει λάθος στις ώρες...τώρα μπορείτε να μου βρείτε το γιατι? μπασ και τρεξει σωστα? :) :) :)
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

λίγη βοήθεια εδω 8 Χρόνια 8 Μήνες πριν #3512

  • nora
  • Το Άβαταρ του/της nora
  • Αποσυνδεμένος
  • pyt___
  • Δημοσιεύσεις: 37
def getchar(words,pos):
	""" epistrefei ton xarakthra ths le3hs h tipota an einai ektos oriwn """
	if pos<0 or pos>=len(words):
		return None
	if words[pos]==".":
		return 'DOT'
 
	elif words[pos]>='0' and words[pos]<='9':
		return 'DIGIT'
	return 'other'
 
 
def scan(text,transition_table,accept_states):
	"""elegxei to text otan oi metafores uparxoun sto transition_table. meta apo auto an
	mesa sthn katastash anhkei to accept_states, gurnaei kai allhlepidra me to token alliws error
	"""
 
	# arxikh katastash
	pos = 0
	state = 'q0'
	lasttoken,lastpos=None,None
 
	while True:
 
		c = getchar(text,pos)	# de3ou neo xarakthra
 
		if c in transition_table[state]:
			state = transition_table[state][c]	# 8ese nea katastash
			pos += 1	# proxwra ston epomeno xarakthra
			if state in accept_states: 
				lasttoken=accept_states[state] #h teleutaia 8esh pou dexetai
				lastpos=pos # h 8esh pou brisketai twra
 
 
		else:	# kamia metabash den bre8hke
			if lasttoken is None: # an den uparxei kati pou na exoume dextei tote bgazei la8os
				return 'ERROR',pos
			else:
				return lasttoken,lastpos
 
 
# o pinakas metabashs san le3iko
td = { 'q0':{ '0,1,2':'q1', '3,4,5,6,7,8,9':'q3'},
       'q1':{ '0,1,2,3':'q2'},
       'q3':{ ':,.':'q4'},
       'q2':{ ':,.':'q4'},
       'q4':{ '0,1,2,3,4,5':'q5'},
       'q5':{ '0,1,2,3,4,5,6,7,8,9':'q6'},
       'q6':{ ':,.':'q7'},
       'q7':{ '0,1,2,3,4,5':'q8'},
       'q8':{ '0,1,2,3,4,5,6,7,8,9':'q9'}
     } 
 
# le3iko apodoxhs katastasewn kai twn antistoixwn endei3ewn tous
 
ad = { 'q6':'INT_TOKEN',
       'q9':'INT_TOKEN'
     }
 
 
# get a string from input
words = input('dwse thn wra:>')
 
# eleg3e to keimeno mexri na mhn  uparxei allo input
while len(words)>0:
	# pare thn epomenh endei3h kai th 8esh efoson o teleutaios xarakthras anagnwristei
	tok,pos = scan(words,td,ad)
	if tok=='ERROR':
		print('unrecognized input at pos',pos,'of',words)
		break
	print("token:",tok,"ERROR:",words[:pos])
	# kainourgio keimeno gia neo elegxo
	words = words[pos:]
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

λίγη βοήθεια εδω 8 Χρόνια 8 Μήνες πριν #3513

  • nora
  • Το Άβαταρ του/της nora
  • Αποσυνδεμένος
  • pyt___
  • Δημοσιεύσεις: 37
nora έγραψε:
def getchar(words,pos):
	""" epistrefei ton xarakthra ths le3hs h tipota an einai ektos oriwn """
	if pos<0 or pos>=len(words):
		return None
	if words[pos]==".":
		return 'DOT'
 
	elif words[pos]>='0' and words[pos]<='9':
		return 'DIGIT'
	return 'other'
 
 
def scan(text,transition_table,accept_states):
	"""elegxei to text otan oi metafores uparxoun sto transition_table. meta apo auto an
	mesa sthn katastash anhkei to accept_states, gurnaei kai allhlepidra me to token alliws error
	"""
 
	# arxikh katastash
	pos = 0
	state = 'q0'
	lasttoken,lastpos=None,None
 
	while True:
 
		c = getchar(text,pos)	# de3ou neo xarakthra
 
		if c in transition_table[state]:
			state = transition_table[state][c]	# 8ese nea katastash
			pos += 1	# proxwra ston epomeno xarakthra
			if state in accept_states: 
				lasttoken=accept_states[state] #h teleutaia 8esh pou dexetai
				lastpos=pos # h 8esh pou brisketai twra
 
 
		else:	# kamia metabash den bre8hke
			if lasttoken is None: # an den uparxei kati pou na exoume dextei tote bgazei la8os
				return 'ERROR',pos
			else:
				return lasttoken,lastpos
 
 
# o pinakas metabashs san le3iko
td = { 'q0':{ '0,1,2':'q1', '3,4,5,6,7,8,9':'q3'},
       'q1':{ '0,1,2,3':'q2'},
       'q3':{ ':,.':'q4'},
       'q2':{ ':,.':'q4'},
       'q4':{ '0,1,2,3,4,5':'q5'},
       'q5':{ '0,1,2,3,4,5,6,7,8,9':'q6'},
       'q6':{ ':,.':'q7'},
       'q7':{ '0,1,2,3,4,5':'q8'},
       'q8':{ '0,1,2,3,4,5,6,7,8,9':'q9'}
     } 
 
# le3iko apodoxhs katastasewn kai twn antistoixwn endei3ewn tous
 
ad = { 'q6':'INT_TOKEN',
       'q9':'INT_TOKEN'
     }
 
 
# get a string from input
words = input('dwse thn wra:>')
 
# eleg3e to keimeno mexri na mhn  uparxei allo input
while len(words)>0:
	# pare thn epomenh endei3h kai th 8esh efoson o teleutaios xarakthras anagnwristei
	tok,pos = scan(words,td,ad)
	if tok=='ERROR':
		print('unrecognized input at pos',pos,'of',words)
		break
	print("token:",tok,"ERROR:",words[:pos])
	# kainourgio keimeno gia neo elegxo
	words = words[pos:]
επιπλέον ζητάει αυτό : Καθορίστε τις καταστάσεις αποδοχής: όταν αναγνωρίσετε μια ένδειξη ώρας θα επιστρέφετε το token
'TIME_TOKEN'. Αν υπάρχει κείμενο που δεν μπορεί να αναγνωριστεί θα επιστρέφετε το token
'ERROR'.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

λίγη βοήθεια εδω 8 Χρόνια 8 Μήνες πριν #3514

  • embryo
  • Το Άβαταρ του/της embryo
  • Αποσυνδεμένος
  • pyth__
  • Δημοσιεύσεις: 92
  • Ληφθείσες Ευχαριστίες 31
Λίγα-λίγα τα βγάζεις ... :P
Μήπως να βάλεις όλη την εκφώνηση μπας και βγάλουμε άκρη?

Ο κώδικας σου δεν φαίνεται να έχει ελπίδες ...
Αρχικά στέλνεις κάθε χαρακτήρα στο getchar το οποίο σου γυρίζει κάποια λέξη???? (DOT, DIGIT ή other)
Μετά τσεκάρεις αν αυτή η λέξη είναι key στο πρώτο subkey του transition_table dictionary.
Τα keys εκεί είναι τα '0,1,2' και '3,4,5,6,7,8,9'
Αφού λοιπόν αποτυγχάνει στο if, πάει στο else που φυσικά γυρίζει ERROR στο 0 position.
Αλλά και να το έβρισκε τι θα έκανε?
Θα ανέθετε στο state ένα key και μετά ...

Το έχεις κάνει πολύ μπερδεμένο το πράμα.
Δεν χρειάζεται.
Δοκίμασα τον κώδικα που σου έδωσα στην python 3.4.1 και δουλεύει κανονικά.
Τον άλλαξα λίγο για να ζητάει συνέχεια τιμές μέχρι να κάνεις κάποιο λάθος.
Επίσης πρόσθεσα και το κόμμα σαν επιτρεπτό χαρακτήρα (το επιτρέπεις στον κώδικα σου αλλά δεν το είχες αναφέρει).
def check_text(text):
    for char in text:
        if not char.isdigit() and char not in '.,:':
            return 'ERROR: Wrong character: "{}"'.format(char)
    time = text.replace('.', ':').replace(',', ':').split(':')
    for item in time:
        if len(item) > 2:
            return 'ERROR: No more than 2 digits!'
    if not 2 <= len(time) <= 3:
        return 'ERROR: Wrong number of fields!'
    if int(time[0]) > 23:
        return 'ERROR: Hours between 0-23!'
    if int(time[1]) > 59 or len(time[1]) == 1:
        return 'ERROR: Minutes must be between 0-59. Two digits!'
    try:
        if int(time[2]) > 59 or len(time[2]) == 1:
            return 'ERROR: Seconds must be between 0-59. Two digits!'
    except IndexError:
        pass
    return 'TIME_TOKEN'
 
if __name__ == '__main__':
    while True:
        text = input('Input time: ')
        print(check_text(text))
Τελευταία διόρθωση: 8 Χρόνια 8 Μήνες πριν από embryo. Αιτία: code update
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

λίγη βοήθεια εδω 8 Χρόνια 8 Μήνες πριν #3515

  • nora
  • Το Άβαταρ του/της nora
  • Αποσυνδεμένος
  • pyt___
  • Δημοσιεύσεις: 37
το έκανα μ αυτόν τον τρόπο γιατί στην εκφώνηση μας λεει να τον κανουμε πάνω σε αυτόν τον τρόπο. Κάτσε να σασ βάλω και όλη την εκφωνηση να την δείτε...αν πιστεύεται οτι δεν παρεμβαίνει κάποιον απο τους κανόνεσ τότε και μένα αυτό που μου στείλατε μου φαίνεται πολυ πιο απλο και ξεκάθαρο..
σασ βάζω την εκφώνηση:
Ζητούμενο
Ο στόχος της άσκησης είναι να κατασκευάσετε σε απλή Python3 (χωρίς τη βοήθεια έτοιμων
βιβλιοθηκών/εργαλείων) λεκτικό αναλυτή, ο οποίος θα αναγνωρίζει ενδείξεις ώρας.
Η αναγνωρίσιμη μορφή ώρας αποτελείται από τα εξής μέρη:
i) Ώρα (0-23, σε 1 ή 2 ψηφία)
ii) Διαχωριστής ( : ή . )
iii) Λεπτά (0-59, πάντοτε σε 2 ψηφία)
και προαιρετικά
iv) Διαχωριστής ( : ή . )
v) Δευτερόλεπτα (0-59, πάντοτε σε 2 ψηφία)
Σύμφωνα με τις προδιαγραφές, θα πρέπει να αναγνωρίζονται οι εξής ενδείξεις ώρας:
23:45 ή 7.22 ή 09:08:59
αλλά όχι άκυρες ενδείξεις όπως
17:4 ή 25:12 ή 9:66
Προσοχή!
• Το αυτόματο που θα φτιάξετε θα πρέπει να αναγνωρίζει μόνο ορθές ενδείξεις ώρας!
• Από την άλλη πλευρά, δεν απαιτείται να ελέγχετε αν χρησιμοποιήθηκε ο ίδιος διαχωριστής και
τις δύο φορές μέσα στην ένδειξη ώρας.
Διαδικασία
α) Κατασκευάστε το ντετερμινιστικό αυτόματο πεπερασμένων καταστάσεων (DFA) που αντιστοιχεί
στη ζητούμενη προδιαγραφή. Σημειώστε ποιες είναι οι τελικές καταστάσεις αποδοχής.
β) Από το DFA κατασκευάσετε τον πίνακα μεταβάσεων (ποια θα είναι η επόμενη κατάσταση,
σύμφωνα με την τρέχουσα κατάσταση και τον επόμενο χαρακτήρα εισόδου).
γ) Καθορίστε τις καταστάσεις αποδοχής: όταν αναγνωρίσετε μια ένδειξη ώρας θα επιστρέφετε το token
'TIME_TOKEN'. Αν υπάρχει κείμενο που δεν μπορεί να αναγνωριστεί θα επιστρέφετε το token
'ERROR'.
δ) Χρησιμοποιήστε υποχρεωτικά το υπόδειγμα προγράμματος Python3 που υλοποιήθηκε στο
εργαστήριο (gist.github.com/mixstef/f586af18eca356c1ef54), τροποποιώντας το κατάλληλα
έτσι ώστε να υλοποιεί τα (α), (β) και (γ).
ε) Δοκιμάστε το πρόγραμμά σας με διάφορους συνδυασμούς εισόδου (αποδεκτούς ή όχι) και
αποθηκεύστε την είσοδο και έξοδο της κονσόλας (log εκτέλεσης).
Υποδείξεις
• Προτείνεται η ταξινόμηση των χαρακτήρων εισόδου σε αντιπροσωπευτικές ομάδες και η
επιστροφή από την getchar() της ομάδας αντί κάθε ξεχωριστού χαρακτήρα: π.χ. μία ομάδα
για τους διαχωριστές ή μια ομάδα other για οτιδήποτε δεν ανήκει στους χαρακτήρες της
προδιαγραφής. Έτσι, μειώνεται το μέγεθος του πίνακα μεταβάσεων, ο οποίος θα έχει τώρα
ομάδες χαρακτήρων ως στήλες κι όχι μεμονωμένους χαρακτήρες.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

λίγη βοήθεια εδω 8 Χρόνια 8 Μήνες πριν #3516

  • embryo
  • Το Άβαταρ του/της embryo
  • Αποσυνδεμένος
  • pyth__
  • Δημοσιεύσεις: 92
  • Ληφθείσες Ευχαριστίες 31
ΟΚ. Τώρα καταλαβαίνω γιατί είναι έτσι ο κώδικας σου.

Το αρχικό παράδειγμα λειτουργεί κανονικά.
Φυσικά είναι overkill για τον σκοπό που το θες, αλλά ο στόχος της άσκησης είναι να μάθεις την τεχνική αυτή, η οποία φαίνεται αρκετά ενδιαφέρουσα...

Για να σε βοηθήσω να το λύσεις μόνη σου (και όχι απλώς να σου δώσω τον κώδικα λυμένο) θα σου πω ότι όλη η ιστορία είναι να φτιάξεις το td dictionary (και το ad, αλλά αυτό είναι πανεύκολο αν καταλάβεις την λογική).

Το κάθε key του td περιέχει ένα dictionary το οποίο έχει σαν keys τον κάθε σωστό χαρακτήρα που παίρνουμε και σαν value το key του επόμενου σωστού χαρακτήρα που θέλουμε.
Στην συγκεκριμένη άσκηση χρειάστηκαν 9 keys.
Άπαξ και φτιάξεις αυτό το dictionary (και το ad), ο κώδικας δουλεύει σχεδόν αναλλοίωτος.

Προσπάθησε το και αν κολλήσεις κάπου πες μου.

Edit: Υπ' όψιν, δεν ασχολήθηκα καθόλου με το ε) και τις υποδείξεις....
Τελευταία διόρθωση: 8 Χρόνια 8 Μήνες πριν από embryo.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

λίγη βοήθεια εδω 8 Χρόνια 8 Μήνες πριν #3517

  • nora
  • Το Άβαταρ του/της nora
  • Αποσυνδεμένος
  • pyt___
  • Δημοσιεύσεις: 37
δεν μπορω να βρω το λαθος μου στον κωδικα μου.. :( :( :( :(
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

λίγη βοήθεια εδω 8 Χρόνια 8 Μήνες πριν #3518

  • nora
  • Το Άβαταρ του/της nora
  • Αποσυνδεμένος
  • pyt___
  • Δημοσιεύσεις: 37
επιπλεον το σκεπτικο το χω καταλάβει στην πράξη έχω το θέμα..
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

λίγη βοήθεια εδω 8 Χρόνια 8 Μήνες πριν #3519

  • nora
  • Το Άβαταρ του/της nora
  • Αποσυνδεμένος
  • pyt___
  • Δημοσιεύσεις: 37
epigeiii
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

λίγη βοήθεια εδω 8 Χρόνια 8 Μήνες πριν #3520

  • embryo
  • Το Άβαταρ του/της embryo
  • Αποσυνδεμένος
  • pyth__
  • Δημοσιεύσεις: 92
  • Ληφθείσες Ευχαριστίες 31
nora έγραψε:
επιπλεον το σκεπτικο το χω καταλάβει στην πράξη έχω το θέμα..
Κι όμως, κάτι δεν έχεις καταλάβει.
Το πρώτο, και σημαντικότερο, λάθος είναι (όπως σου ξαναείπα) ότι από το getchar παίρνεις DOT, DIGIT, other ή None και τα ψάχνεις στο dt (που φυσικά δεν υπάρχουν)

Πρέπει να πάρεις κάτι που να υπάρχει σαν key στο 'q0'
Τελευταία διόρθωση: 8 Χρόνια 8 Μήνες πριν από embryo.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
  • Σελίδα:
  • 1
  • 2
  • 3
Συντονιστές: pmav99
Χρόνος δημιουργίας σελίδας: 0.431 δευτερόλεπτα

Μοιράσου το!

Powered by CoalaWeb

Λίστα Ταχυδρομείου