Εμφάνιση 1-9 από 9
  1. #1
    Εγγραφή
    04-04-2012
    Μηνύματα
    1.511
    Downloads
    0
    Uploads
    0
    Τύπος
    ADSL2+
    Ταχύτητα
    24576/1024
    ISP
    ΟΤΕ Conn-x
    Router
    Fritz 7270, Mikrotik x86
    καλησπέρα παιδιά. μια επείγουσα βοήθεια παρακαλώ. σε python3 θέλω να ζητάω από τον χρήστη να γράψει ένα νούμερο και αυτό να προστεθεί στην λιστα. αν το νούμερο που γράψει έχει την μορφή 01, 02 τότε προστίθεται στην αρχή του προγράμματος χωρίς το 0, ενώ αν δεν έχει 0 τότε πάει στο τέλος. αν πατήσει q το πρόγραμμα σταματάει. με r αφαιρεί ένα στοιχείο από το τέλος ενώ με 0r από την αρχή.

    ξεκίνησα να γράφω κάτι τέτοιο
    Κώδικας:
    while True:
        if input("\n\n\nPlease enter a number to add it to the queue or press q to end the game: ") == 'q':
            break
    mylist=[]
    user_input = int(input("Enter a number: "))
    mylist = user_input.append(i)
    print(input_list)
    αλλά εχω σκαλώσει, εκτός του ότι το παραπάνω βγάζει λάθη.

  2. #2
    Εγγραφή
    12-02-2005
    Περιοχή
    ΚΑΤΕΡΙΝΗ
    Ηλικία
    50
    Μηνύματα
    2.675
    Downloads
    9
    Uploads
    0
    Τύπος
    VDSL2
    Ταχύτητα
    89836/10996
    ISP
    Forthnet
    DSLAM
    Forthnet - ΚΑΤΕΡΙΝΗ
    Router
    ZTE H288A
    SNR / Attn
    9.7(dB) / 6.1(dB)
    Path Level
    Interleaved
    Πρώτον σε αυτό τον κώδικα που γίνεται ο έλεγχος αν ο χρήστης έχει δώσει αριθμό με την μορφή 0Χ ή Χ (όπου Χ ένας αριθμός).

    Η append δεν συντάσσετε έτσι, συντάσσετε Όνομα λίστας.append(δεδομένα) και πάντα προσθέτει το στοιχείο στο τέλος της λίστας.
    Αν θέλεις να εισάγεις κάποιο στοιχείο σε διαφορετική θέση της λίστας εκτός της τελευταίας χρησιμοποίησε την insert. Σύνταξη Όνομα λίστας.insert(δείκτης,δεδομένα)
    Όπου δείκτης η θέση της λίστας στην οποία θέλεις να εισάγεις δεδομένα. Να έχεις υπόψιν ότι η αρίθμηση ξεκινάει από το 0 και όχι από το 1.
    Τα όνειρα που κάνω από τα 20 παρκάρουν στον ακάλυπτο νωρίς. Μα εσύ που με κοιτάς σαν λύτρωση ζωή παρκαρισμένη μην δεχτείς.

  3. #3
    Εγγραφή
    04-04-2012
    Μηνύματα
    1.511
    Downloads
    0
    Uploads
    0
    Τύπος
    ADSL2+
    Ταχύτητα
    24576/1024
    ISP
    ΟΤΕ Conn-x
    Router
    Fritz 7270, Mikrotik x86
    ευχαριστώ για την απάντηση.
    το θέμα είναι ότι η λίστα αλλάζει δυναμικά και συνεχώς προστίθενται πράγματα. δεν μπορώ να προσθέσω σε σευγκεκριμένη θέση πχ list[5]=100 μιας και και δεν ξέρω ούτε τι νούμερο θα πληκτρολογήσει ο χρήστης αλλά ούτε και πόσα νούμερα θα βάλει ώστε να ξέρω την θέση τους.
    μέχρι τώρα:
    Κώδικας:
    queue = list()
    status = ''
    instructions = "\n\nAdd a number to the queue or q to exit: "
    
    while True:
    
        # -- convert the string inputs to int(), float() or whatever type you want
        #    the program to operate on
        #
        response = input(status + instructions)
        response = response.lower()  # -- lower case the string
        if response == 'q':
            break
    
        #
        try:
            number = int(response)  # -- or float(response)
        except ValueError:
            status = "Ignoring non-integer input: " + response
            continue
    
        queue.append(response)
        status = "queue = " + str(queue)
        print(queue)
    προσθέτει πάντα στο τέλος, ενώ αν έχω πχ 01 θέλω να βγάλει το 0 και να βάλει το νούμερο στην αρχή.

    τέλος πως θα αφαιρέσω ένα νούμερο από το τέλος με r ή από την αρχή με 0r?

    - - - Updated - - -

    μέχρι τώρα έχω:
    Κώδικας:
    import collections
    queue = list()
    status = ''
    instructions = "\n\nPlease enter an integer to add to queue or q to exit: "
    
    while True:
    
        response = input(status + instructions)
        response = response.lower()  
        if response == 'q':
            break
        if response == 'r':     #remove a number from right
            queue.pop()
        if response =='0r':     #remove a number from left
            queue.popleft()
            
        #
        try:
            number = int(response)  
        except ValueError:
            status = "Non integers are ignored: " + response
            continue
    
        queue.append(response)
        status = "queue = " + str(queue)
        #print(queue)
    το πρόβλημα που έχω:
    -δεν δουλεύει το r και το 0r. Αυτά αφαιρούν από δεξιά της λίστας και αριστερά αντίστοιχα.
    -δεν έχω βρει τρόπο όταν ο χρήστης εισάγει έναν αριθμό που ξεκινά από 0, πχ 03, να αφαιρείται το 0 και να μπαίνει στην αρχή της λίστας μόνο το 3.
    την βοήθεια σας παρακαλώ.

  4. #4
    Δεν ξερω Python , αλλα αν συμπεριφερθεις στο 01 , 02 , κλπ σαν string και αφαιρεσεις απλως το 0 , ενω οταν προστιθεται αριθμος πχ 1 ,2 ,3 κλπ να τους μετατρεπεις σε ακεραιους?

    - - - Updated - - -

    Δηλαδη οπως το φανταζομαι το πρωτο τμημα της λιστας θα εχει strings με ταξινομηση, απο τον πινακα ASCII ή κατι και το δευτερο τμημα της λιστας ακεραιους αριθμους.

  5. #5
    Εγγραφή
    03-11-2016
    Ηλικία
    34
    Μηνύματα
    160
    Downloads
    0
    Uploads
    0
    Τύπος
    ADSL2+
    Ταχύτητα
    UP:1061 k/ DN:11889 k
    ISP
    Cyta Hellas
    DSLAM
    Cyta Hellas - Σ.Σ. ΑΓΡΑ
    Router
    TG788v2
    SNR / Attn
    21.4(dB) / 4.3(dB)
    Path Level
    Interleaved
    Θα πρέπει αρχικά να κάνεις έναν έλεγχο εάν το string (στοιχείο) που παίρνεις απο τον χρήστη ξεκινάει απο 0.

    Εάν ναι, τότε το στοιχείο μπαίνει αριστερά της λίστας αλλά αφαιρώντας ταυτόχρονα το πρώτο χαρακτήρα. Άν όχι μπαίνει δεξιά (li + [a]).

    Για να αφαιρέσουμε το πρώτο στοιχείο απο τη λίστα, χρησιμοποιείς την pop() με index 0 ενω το τελευταίο την pop() as-is.

    *Εάν ο χρήστης, εισάγει το 0001, θα πρέπει να αφαιρεθούν όλα ή μόνο το πρώτο 0;
    Αν νομίζεις ότι μπορείς να το κάνεις καλύτερα, απόδειξέ το. Μή μένεις μόνο στα λόγια.

  6. #6
    Εγγραφή
    12-02-2005
    Περιοχή
    ΚΑΤΕΡΙΝΗ
    Ηλικία
    50
    Μηνύματα
    2.675
    Downloads
    9
    Uploads
    0
    Τύπος
    VDSL2
    Ταχύτητα
    89836/10996
    ISP
    Forthnet
    DSLAM
    Forthnet - ΚΑΤΕΡΙΝΗ
    Router
    ZTE H288A
    SNR / Attn
    9.7(dB) / 6.1(dB)
    Path Level
    Interleaved
    Φαίνεται ότι προσπαθείς να γράψεις κώδικα χωρίς να έχεις αποφασίσει ποια ακριβώς δομή θα έχει το προγραμμά σου.

    Ξεκίνα τυπώνοντας σαφής οδηγίες στους χρήστες για το πως να χρησιμοποιήσουν το πρόγραμμα. Το Please enter an integer to add to queue or q to exit: δεν τους λέει ούτε πως να προσθέσουν αριθμό στην αρχή ή στο ΄τελος της λίστας, ούτε πως μπορούν να αφαιρέσουν κάποιο στοιχείο.

    Μετά τι μπορεί να δώσει ο χρήστης σύμγωνα με τις οδηγίες που του έδωσες;

    Έδωσε q;
    Σε αυτή την περίπτωση πιθανών να θέλουμε να εμφανίσουμε την λίστα που έχει δημιουργηθεί μέχρι εκείνη την στιγμή και να τερματίσουμε το πρόγραμμα.

    Έδωσε r;
    Τότε θα πρέπει να ελέγξουμε αν το μήκος της λίστας είναι μεγαλύτερο από το 0.
    Αν δεν είναι τότε σημαίνει ότι η λίστα είναι κενή και δεν υπάρχει νόημα να προσπαθήσουμε να αφαιρέσουμε κάποιο στοιχείο. Ενημερώνουμε τον χρήστη με μήνυμα και ξαναστέλνουμε τον έλεγχο του προγράμματος στην αρχή του βρόγχου

    Αν το μήκος της είναι μεγαλύτερο από το 0 χρησιμοποιούμε την pop όπως σου είπαν για να αφαιρέσαουμε το τελευταίο στοιχείο της λίστας. Εναλακτικά μπορείς να χρησιμοποιήσεις και την del αλλά ας μην σε μπερδευώ.

    Έδωσε 0r;

    Τότε θα πρέπει να ελέγξουμε αν το μήκος της λίστας είναι μεγαλύτερο από το 0.
    Αν δεν είναι τότε σημαίνει ότι η λίστα είναι κενή και δεν υπάρχει νόημα να προσπαθήσουμε να αφαιρέσουμε κάποιο στοιχείο. Ενημερώνουμε τον χρήστη με μήνυμα και ξαναστέλνουμε τον έλεγχο του προγράμματος στην αρχή του βρόγχου

    Αν το μήκος της είναι μεγαλύτερο από το 0 χρησιμοποιούμε την pop όπως σου είπαν για να αφαιρέσαουμε το πρώτο στοιχείο της λίστας.

    Αν δεν έδωσε τίποτα από τα πρώτα 2 τότε περιμένουμε να μας έδωσε έναν αριθμό ή μηδέν ακολουθούμενο από έναν αριθμό

    Αυτό που έδωσε ο χρήστης έχει στην πρώτη θέση το 0 και έχει μήκος πάνω από 1 χαρακτήρα; (Εξήγηση: Ο χρήστης θα μπορούσε να δώσει τον αριθμό 0 που θα πρέπει να μπει στο τέλος, αν θέλει να δώσει τον αριθμό 0 και να μπει στην αρχή θα πρέπει να τον δώσει με την μορφή 00)

    Αν ναι:
    Μετέτρεψε την είσοδο του χρήστη σε integer. (Με αυτό τον τρόπο αν ο χρήστης δώσει 010 θα μείνει το 10 αλλά και το ίδιο αν δώσει 00010 αν θέλεις να αφαιρείτε μόνο το πρώτο 0 και να υπάρχουν τα υπόλοιπα δεν θα πρέπει να κάνεις την μετατροπή)
    Χρησιμοποίησε την insert για να εισάγεις τον αριθμό στην πρώτη θέση της λίστας

    διαφορετικά (αν όχι):
    μετέτρεψε την είσοδο του χρήστη σε integer
    χρησιμοποίησε την append για να εισάγεις το στοιχείο στο τέλος της λίστας
    τέλος προγράμματος

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

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

    Ίσως τώρα να σου φανεί ως ευκολία αλλά αν δεν μάθεις να σκεφτεσαι για το πως θα φτιάξεις την δομή ενός προγράμματος αυτό θα φανεί στο τέλος στις εξετάσεις που δεν θα έχεις την πολυτέλεια να αναζητήσεις βοήθεια από τους άλλους.
    Τα όνειρα που κάνω από τα 20 παρκάρουν στον ακάλυπτο νωρίς. Μα εσύ που με κοιτάς σαν λύτρωση ζωή παρκαρισμένη μην δεχτείς.

  7. #7
    Χμ εγω δεν διαβασα την εκφωνηση καλα , νομιζα οτι την ηθελες και ταξινομημενη δλδ πρωτα το 01 που θα γινει 1 μετα το 02 που θα γινει 2, μετα το 1 μετα το 2 κλπ. αλλα τελικα πουθενα δεν αναφερεις κατι τετοιο .... λαθος μου.

  8. #8
    Εγγραφή
    12-02-2005
    Περιοχή
    ΚΑΤΕΡΙΝΗ
    Ηλικία
    50
    Μηνύματα
    2.675
    Downloads
    9
    Uploads
    0
    Τύπος
    VDSL2
    Ταχύτητα
    89836/10996
    ISP
    Forthnet
    DSLAM
    Forthnet - ΚΑΤΕΡΙΝΗ
    Router
    ZTE H288A
    SNR / Attn
    9.7(dB) / 6.1(dB)
    Path Level
    Interleaved
    Στην περιγραφή που σου έκανε προηγουμένως θέλει μια πολύ μικρή διόρθωση. Συγκεκριμένα όταν είσαι στην περίπτωση 0 και αριθμός, π.χ. 05 θα πρέπει πριν δοκιμάσεις να το μετατρέψεις σε ακέραιο να αφαιρέσεις το 0.
    Μα γιατί θα ρωτήσεις, η συνάρτηση int δεν θα το κάνει αυτόματα;
    Θα το κάνει, αλλά σύμφωνα με τις οδηγίες που έχεις δώσει στον χρήστη, αν θελήσει να εισάγει το -5 στην αρχή της λίστας, θα πρέπει να δώσει ως είσοδο το 0-5 (0 για να πάει στην αρχή της λίστας και θέλει να καταχωρηθεί ο αριθμός -5)
    Αν δοκιμάσεις να μετατρέψεις σε ακέραιο με την int το 0-5 φυσικά θα χτυπήσει σφάλμα.
    Τα όνειρα που κάνω από τα 20 παρκάρουν στον ακάλυπτο νωρίς. Μα εσύ που με κοιτάς σαν λύτρωση ζωή παρκαρισμένη μην δεχτείς.

  9. #9
    Εγγραφή
    04-04-2012
    Μηνύματα
    1.511
    Downloads
    0
    Uploads
    0
    Τύπος
    ADSL2+
    Ταχύτητα
    24576/1024
    ISP
    ΟΤΕ Conn-x
    Router
    Fritz 7270, Mikrotik x86
    Σας ευχαριστώ πολύ

Παρόμοια Θέματα

  1. Απλό CPU Benchmarking με Python (μαθητική εργασία)
    Από GeorgeVita στο φόρουμ Unix - Linux
    Μηνύματα: 13
    Τελευταίο Μήνυμα: 17-05-17, 23:48

Bookmarks

Bookmarks

Δικαιώματα - Επιλογές

  • Δεν μπορείτε να δημοσιεύσετε νέα θέματα
  • Δεν μπορείτε να δημοσιεύσετε νέα μηνύματα
  • Δεν μπορείτε να αναρτήσετε συνημμένα
  • Δεν μπορείτε να επεξεργαστείτε τα μηνύματα σας
  •  
  • Τα BB code είναι σε λειτουργία
  • Τα Smilies είναι σε λειτουργία
  • Το [IMG] είναι σε λειτουργία
  • Το [VIDEO] είναι σε λειτουργία
  • Το HTML είναι εκτός λειτουργίας