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

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

λίγη βοήθεια εδω 8 Χρόνια 3 Εβδομάδες πριν #3521

  • nora
  • Το Άβαταρ του/της nora
  • Αποσυνδεμένος
  • pyt___
  • Δημοσιεύσεις: 37
δηλαδη οπου dot digit kai other να βαλω καταστασεισ? δηλ q0-q1 px? η τις τιμες(0-23)??
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

λίγη βοήθεια εδω 8 Χρόνια 3 Εβδομάδες πριν #3522

  • 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 'q1,q0'
 
	elif words[pos]>='0' and words[pos]<='9':
		return 'q0,q5,q8'
	return 'q1,q4,q7'
 
 
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 Χρόνια 3 Εβδομάδες πριν #3523

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

λίγη βοήθεια εδω 8 Χρόνια 3 Εβδομάδες πριν #3524

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

Για αρχή άσε το getchar όπως ήταν:
def getchar(text, pos):
    """ returns char at pos of words, or None if out of bounds """
    if pos < 0 or pos >= len(text):
        return 'none'
    return text[pos]
Έτσι το c θα πάρει την τιμή του πρώτου χαρακτήρα.
Αφού ξεκινάμε με state='q0' θα κοιτάξει μέσα στα keys του 'q0' αν υπάρχει το c.

Άρα τα keys πρέπει να είναι οι επιτρεπτοί χαρακτήρες για την πρώτη θέση.
Αυτοί είναι οι 0123456789 άρα πρέπει να έχει τον κάθε χαρακτήρα σαν ξεχωριστό key
{'0': 'q1', '1': 'q1', '2': 'q2', '3': 'q3', '4': 'q3', '5': 'q3',
             '6': 'q3', '7': 'q3', '8': 'q3', '9': 'q3'}
με value την επόμενη θέση.

π.χ. Αν το πρώτο νούμερο είναι 0 το επόμενο state είναι το 'q1' το οποίο περιέχει μόνο τους χαρακτήρες που θα μπορούσαν να ακολουθούν το 0 στην πρώτη θέση.
Αν το πρώτο νούμερο είναι 4 το επόμενο state είναι το 'q3' το οποίο περιέχει μόνο τους χαρακτήρες που θα μπορούσαν να ακολουθούν το 4 στην πρώτη θέση.

Θα μπορούσες να ομαδοποιήσεις τα keys για να έχεις λιγότερα, αλλά προσπάθησε να καταλάβεις αυτή την μορφή γιατί είναι πιο εύκολη.

edit: Προσπάθησε το όσο μπορείς και αν φτάσει το deadline, πες μου να σου στείλω αυτό που έχω κάνει εγώ ...
Τελευταία διόρθωση: 8 Χρόνια 3 Εβδομάδες πριν από embryo.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Οι ακόλουθοι χρήστες είπαν "Σε Ευχαριστώ": nora

λίγη βοήθεια εδω 8 Χρόνια 3 Εβδομάδες πριν #3525

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

λίγη βοήθεια εδω 8 Χρόνια 3 Εβδομάδες πριν #3526

  • nora
  • Το Άβαταρ του/της nora
  • Αποσυνδεμένος
  • pyt___
  • Δημοσιεύσεις: 37
δεν ξερω πως να τα γράψω στο λεξικο μπερδευομαι...το κανα σε χαρτι... σαν 1ο στοιχείο μπορεί να δέχεται το 0,1,2,3,4,5,6,7,8,9 σαν 2ο αν το 1ο ειναι το 0 τοτε το 2ο μπορεί να ναι το 0,1,2,3,4,5,6,7,8,9 ή '.' ή ':' αν είναι το 1 το ίδιο δηλ απο 0-9 ή '.' ή ':' , άν τώρα είναι το 2 μπορεί σαν δεύτερο να δεχτεί το 0,1,2,3 την . ή την : κλπ ΣΩΣΤΑ? μπορείς να μου στειλεις το πώς γραφεται αυτο το πράμα?
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

λίγη βοήθεια εδω 8 Χρόνια 3 Εβδομάδες πριν #3529

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

λίγη βοήθεια εδω 8 Χρόνια 3 Εβδομάδες πριν #3531

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

λίγη βοήθεια εδω 8 Χρόνια 3 Εβδομάδες πριν #3532

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

λίγη βοήθεια εδω 8 Χρόνια 3 Εβδομάδες πριν #3533

  • embryo
  • Το Άβαταρ του/της embryo
  • Αποσυνδεμένος
  • pyth__
  • Δημοσιεύσεις: 92
  • Ληφθείσες Ευχαριστίες 31
Συγνώμη, αλλά μόλις τώρα το είδα...
def getchar(text, pos):
    """ returns char at pos of words, or None if out of bounds """
    if pos < 0 or pos >= len(text):
        return 'none'
    return text[pos]
 
def scan(text, transition_table, accept_states):
    """ scans `text` while transitions exist in
    'transition_table'. After that, if in a state belonging to
    `accept_states`, it returns the corresponding token, else ERROR.
    """
    # initial state
    pos = 0
    state = 's0'
    while True:
        if len(text) > 8:  # more characters than it is accepted
            return 'ERROR', 8
        c = getchar(text, pos)  # get next char
        for key in transition_table[state].keys():
            if c in key:
                state = transition_table[state][key]  # set new state
                pos += 1  # advance to next char
                break
        else:
            # no transition found
            return 'ERROR', pos
        # check if new state is accepting
        if state in accept_states and pos == len(text):
            return 'TIME_TOKEN', pos
 
# the transition table, as a dictionary
td = {'s0': {'0': 's1', '1': 's1', '2': 's2', '3456789': 's3'},
      's1': {'0123456789': 's3', '.,:': 's4'},
      's2': {'0123': 's3', '.,:': 's4'},
      's3': {'.,:': 's4'},
      's4': {'012345': 's5'},
      's5': {'0123456789': 's6'},
      's6': {'.,:': 's7'},
      's7': {'012345': 's8'},
      's8': {'0123456789': 's9'}}
 
# the accepted states
ad = ['s6', 's9']
 
# get a string from input
words = input('give some input>')
# scan text until no more input
while len(words) > 0:
    # get next token and position after last char recognized
    tok, pos = scan(words, td, ad)
    if tok == 'ERROR':
        msg = 'unrecognized input at pos', pos, 'of', words
        print(msg)
        # with open("log.txt", "a") as log:
        #     log.write('Input: {}\nOutput: {}\n\n'.format(words, msg))
        break
    msg = "token:", tok, "text:", words[:pos]
    print(msg)
    # with open("log.txt", "a") as log:
    #     log.write('Input: {}\nOutput: {}\n\n'.format(words, msg))
    # new text for next scan
    words = words[pos:]
Αυτό λογικά δουλεύει.
Δοκίμασε το και πες μου.
Αν θες να σου γράφει και σε log, un-comment τις σειρές, που αρχίζουν με # with open και # log.write

Παρατήρηση για τον Moderator (άσχετο...).
Γιατί το forum δεν μου έστειλε notification για όλες τις προηγούμενες 5 καταχωρήσεις?
Έστειλε μόνο για την τελευταία...
Τελευταία διόρθωση: 8 Χρόνια 3 Εβδομάδες πριν από embryo.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Οι ακόλουθοι χρήστες είπαν "Σε Ευχαριστώ": nora

λίγη βοήθεια εδω 8 Χρόνια 3 Εβδομάδες πριν #3534

  • embryo
  • Το Άβαταρ του/της embryo
  • Αποσυνδεμένος
  • pyth__
  • Δημοσιεύσεις: 92
  • Ληφθείσες Ευχαριστίες 31
Ο προηγούμενος κώδικας είναι κάπως αλλαγμένος.
Αυτό που εννοούσα με τον τρόπο που σου έλεγα (η πιο απλή εκδοχή) είναι αυτή
def getchar(text, pos):
    """ returns char at pos of words, or None if out of bounds """
    if pos < 0 or pos >= len(text):
        return None
    return text[pos]
 
def scan(text, transition_table, accept_states):
    """ scans `text` while transitions exist in
    'transition_table'. After that, if in a state belonging to
    `accept_states`, it returns the corresponding token, else ERROR.
    """
    # initial state
    pos = 0
    state = 's0'
    while True:
        if len(text) > 8:  # more characters than it is accepted
            return 'ERROR', 8
        c = getchar(text, pos)  # get next char
        if c in transition_table[state]:
            state = transition_table[state][c]  # set new state
            pos += 1  # advance to next char
 
            # check if new state is accepting
            if state in accept_states and pos == len(text):
                return 'TIME_TOKEN', pos
        else:  # no transition found
            return 'ERROR', pos
 
# the transition table, as a dictionary
td = {'s0': {'0': 's1', '1': 's1', '2': 's2', '3': 's3', '4': 's3', '5': 's3',
             '6': 's3', '7': 's3', '8': 's3', '9': 's3'},
      's1': {'0': 's3', '1': 's3', '2': 's3', '3': 's3', '4': 's3', '5': 's3', '6': 's3',
             '7': 's3', '8': 's3', '9': 's3', '.': 's4', ',': 's4', ':': 's4'},
      's2': {'0': 's3', '1': 's3', '2': 's3', '3': 's3', '.': 's4', ',': 's4', ':': 's4'},
      's3': {'.': 's4', ',': 's4', ':': 's4'},
      's4': {'0': 's5', '1': 's5', '2': 's5', '3': 's5', '4': 's5', '5': 's5'},
      's5': {'0': 's6', '1': 's6', '2': 's6', '3': 's6', '4': 's6', '5': 's6',
             '6': 's6', '7': 's6', '8': 's6', '9': 's6'},
      's6': {'.': 's7', ',': 's7', ':': 's7'},
      's7': {'0': 's8', '1': 's8', '2': 's8', '3': 's8', '4': 's8', '5': 's8'},
      's8': {'0': 's9', '1': 's9', '2': 's9', '3': 's9', '4': 's9', '5': 's9',
             '6': 's9', '7': 's9', '8': 's9', '9': 's9'}}
 
# the accepted states
ad = ['s6', 's9']
 
# get a string from input
words = input('give some input>')
# scan text until no more input
while len(words) > 0:
    # get next token and position after last char recognized
    tok, pos = scan(words, td, ad)
    if tok == 'ERROR':
        msg = 'unrecognized input at pos', pos, 'of', words
        print(msg)
        # with open("log.txt", "a") as log:
        #     log.write('Input: {}\nOutput: {}\n\n'.format(words, msg))
        break
    msg = "token:", tok, "text:", words[:pos]
    print(msg)
    # with open("log.txt", "a") as log:
    #     log.write('Input: {}\nOutput: {}\n\n'.format(words, msg))
    # new text for next scan
    words = words[pos:]
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Οι ακόλουθοι χρήστες είπαν "Σε Ευχαριστώ": nora

λίγη βοήθεια εδω 8 Χρόνια 3 Εβδομάδες πριν #3535

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

λίγη βοήθεια εδω 8 Χρόνια 3 Εβδομάδες πριν #3536

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

λίγη βοήθεια εδω 8 Χρόνια 3 Εβδομάδες πριν #3537

  • embryo
  • Το Άβαταρ του/της embryo
  • Αποσυνδεμένος
  • pyth__
  • Δημοσιεύσεις: 92
  • Ληφθείσες Ευχαριστίες 31
Ο.Κ.
Κατάλαβες όμως πως δουλεύει?
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
  • Σελίδα:
  • 1
  • 2
  • 3
Συντονιστές: pmav99
Χρόνος δημιουργίας σελίδας: 0.729 δευτερόλεπτα

Μοιράσου το!

Powered by CoalaWeb

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