Skip to content

Instantly share code, notes, and snippets.

@kantale
Last active December 8, 2018 20:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kantale/8c9b8b877638601d91cfa350c73fb3fe to your computer and use it in GitHub Desktop.
Save kantale/8c9b8b877638601d91cfa350c73fb3fe to your computer and use it in GitHub Desktop.
2nd assignment, python

Γράψτε κώδικα python, κατά προτίμηση συναρτήσεις, για τα παρακάτω θέματα

Άσκηση 1

Φτιάξτε μία συνάρτηση που να παίρνει έναν αριθμό και να επιστρέφει αν είναι πρώτος ή όχι (True/False)

Άσκηση 2

Φτιάξτe μία λίστα με όλους του 1000 πρώτους αριθμούς. (προσοχή: όχι όλους τους πρώτους αριθμούς από το 1 μέχρι το 1000)

Άσκηση 3

Ποιο είναι το άθροισμα όλων των 1000 πρώτων αριθμών που τελειώνουν σε 3;

Άσκηση 4

Πάρτε τους πρώτους 10.000 πρώτους αριθμούς. Πόσοι τελειώνουν σε "1", πόσοι σε "3", πόσοι σε "7" και πόσοι σε "9";

Άσκηση 5

Πάρτε τους πρώτους 10.000 πρώτους αριθμούς. Πόσοι τελειώνουν σε "01", "02", "03", "07", "09", "11", "13", "17", "19", "21", .. "99"; Δηλαδή πάρτε όλα τα πιθανά τελευταία 2 ψηφία ενός πρώτου. Θεωρήστε ότι ο 1,2,5 και 7 τελειώνουν σε "01", "02", "05" και "07" αντίστοιχα. Φτιάξτε ένα dictionary. π.χ:

solution = {
  '01': 132,
  '03' : 76,
  ...
  '99': 91,
}

Άσκηση 6

Ποιός είναι ο μέσος όρος των τιμών του dictionary της άσκησης 5;

Άσκηση 7

Από όλα τα counts της άσκησης 5, Ποιά κατάληξη έχει τους περισσότερους πρώτους αριθμούς;

Άσκηση 8

Αν αρχίσουμε να αθροίζουμε όλους τους πρώτους αριθμούς ξεκινώντας από το 1, μετά από ποιον πρώτο αριθμό το άθροισμα θα ξεπεράσει το 1.000.000;

Άσκηση 9

Δίνεται πως να φτιάξετε μία λίστα με 1000 τυχαίους αιρθμούς από το 0.0 μέχρι το 1.0:

import random
l = [random.random() for x in range(1000)]

Ποιος είναι ο δεύτερος μεγαλύτερος αριθμός της λίστας; Μη χρησιμοποιήσετε sort ή max. Πρέπει να χρησιμοποιήσετε ένα και μόνο 1 for. Επίσης αν οι 2 (ή παραπάνω) μεγαλύτεροι αριθμοί είναι ίσοι θα πρέπει να επιστρέφει έναν από αυτούς. Δηλαδή ο δεύτερος μεγαλύτερος αριθμός της λίστας: [3,6,5,6] είναι το 6 και όχι το 5.

Άσκηση 10

Δίνεται το παρακάτω string:

a = '''
#CHROM  POS     ID      REF     ALT     QUAL
chr19   617614  .       G       A       39.2648
chr19   617804  .       G       A       0.309945
chr19   617959  .       A       C       0.0608339
chr19   618159  .       A       G       193.704
chr19   618428  .       T       G       1.87498E-5
chr19   618851  .       T       C       74.4613
chr19   618854  .       G       A       74.4613
chr19   618911  .       T       G       2.88308E-4
chr19   619021  .       G       C       352.245
chr19   619139  .       G       A       137.482
chr19   619408  .       A       G       207.722
chr19   619574  .       T       G       594.095
chr19   619772  .       G       C       612.352
chr19   619913  .       T       C       276.649
chr19   620004  .       T       C       0.00524165
chr19   620045  .       A       T       15.5734
chr19   620201  .       A       C       5.61107E-5
chr19   620210  .       A       C       1.63995E-5
chr19   620214  .       T       C       3.42253E-5
chr19   620228  .       A       C       8.62681E-4
chr19   620299  .       C       A       6.06919
chr19   620315  .       A       C       3.3417E-4
chr19   620381  .       T       G       5.01393E-4
chr19   620414  .       A       C       6.37073E-6
chr19   620429  .       T       C       2.46975E-5
chr19   620454  .       A       C       4.25049E-5
chr19   620459  .       T       C       4.96425E-5
chr19   620728  .       A       G       0.0198511
chr19   620807  .       G       A       41.4442 
'''

Όπως βλέπετε περιέχει πληροφορίες για διάφορες θέσεις στο χρωμόσωμα 19.

Πόσες γραμμές περιέχει;

Άσκηση 11

Έστω το string της άσκηση 10. Φτιάξτε ένα dictionary του οποίου το key να είναι το POS και το value να είναι το QUAL. Δηλαδή:

q = {
  617614 : 39.2648,
  617804 : 0.309945,
  ...
}
  • hint 1: Έστω το string:
a = ''' 
mitsos 452
kwstas 999
'''

Τότε:

b = a.split('\n')
print (b)
[' ', 'mitsos 452', 'kwstas 999', '']
  • hint 2: Έστω η λίστα:
b = [' ', 'mitsos 452', 'kwstas 999', '']

Τότε:

c = [x.strip() for x in b]
print (c)
['', 'mitsos 452', 'kwstas 999', '']
  • hint 3. Έστω η λίστα:
c = ['', 'mitsos 452', 'kwstas 999', '']

Τότε:

d = [x for x in c if x] # Θυμηθείτε ότι το '' είναι False
print (d)
['mitsos 452', 'kwstas 999']
  • Hint 4. Έστω η λίστα:
d = ['mitsos 452', 'kwstas 999']

Τότε:

e = [x.split() for x in d]
print (e)
[['mitsos', '452'], ['kwstas', '999']]
  • Hint 5. Έστω η λίστα:
e = [['mitsos', '452'], ['kwstas', '999']]

Τότε:

f = {x[0] : int(x[1]) for x in e}
print (f)
{'mitsos': 452, 'kwstas': 999}
  • Hint 6. (Όλο μαζί). Έστω το string:
a = ''' 
mitsos 452
kwstas 999
'''

Τότε:

b = {y[0]:int(y[1]) for y in [x.split() for x in a.split('\n') if x.strip()]}
print (b)
{'mitsos': 452, 'kwstas': 999}

Άσκηση 12

Έστω το string της άσκηση 10. Φτιάχτε ένα dictionay όπου το key θα είναι το POS και το value θα είναι ένα dictionary που θα περιέχει τα REF και ALT. Δηλαδή:

q = {
  617614 : {'REF': 'G', 'ALT': 'A'},
  617804 : {'REF': 'G', 'ALT': 'A'},
  617959 : {'REF': 'A', 'ALT': 'C'},
  ...
}

Άσκηση 13

Έστω το dictionary της άσκησης 13. Πόσες φορές βλέπουμε να έχουμε 'REF' = G και 'ALT' = A ;

Άσκηση 14

Έστω το dictionary της άσκησης 13. Πόσες φορές εμφανίζονται όλοι οι διαφορετικoί συνδοιασμοί για REF = 'A', 'C', 'G', 'T' και ALT = 'A', 'C', 'G', 'T' (όπου το REF είναι διαφορετικό από το ALT); Δηλαδή φτιάξτε ένα dictionary όπως αυτό:

d = {
 ('A', 'C') : 4,
 ('A', 'G') : 2,
 ('A', 'T') : 0,
 ('C', 'A') : 1,
 ('C', 'G') : 2,
 ('C', 'T') : 3, 
 ...
}
  • Το πρώτο value του key είναι το REF και το δεύτερο το ALT
  • Τα νούμερα που έχω βάλει εδώ είναι τυχαία.

Άσκηση 15

Φτιάξτε το ίδιο dictionary με αυτό της άσκησης 13 αλλά τα keys είναι οι 4 διαφορετικές τιμές για το REF και τα values θα πρέπει να είναι και αυτά dictionaries όπου τα keys του θα είναι οι 4 διαφορετικές τιμές του ALT και τα values θα είναι τα counts. Δηλαδή:

d = {
'A' : {'C': 4, 'G': 2, 'T': 0},
'C' : {'A': 1, 'G': 2, 'T': 3), 
...
}

Δηλαδή το REF=A και το ALT=C εμφανίζεται 4 φορές. Το REF=A και το ALT=G εμφανίζεται 2 φορές, κτλ..

  • Hint 1
a = {}
if a:
   print ('Not Empty')
else:
   print ('Empty')
Empty
  • Hint 2
a = {'A': {'C': 5}}
a['A']['T'] = 7
print (a)
{'A': {'C': 5, 'T': 7}}

Άσκηση 16

Έστω το string της άσκησης 10, ποια μεταλλαγή (δηλαδή ζευγάρι REF,ALT) εμφανίζεται τις περισσότερες φορές;

Άσκηση 17

Έστω το string της άσκησης 10. Κάντε sort των ζευγαριών REF,ALT με βάση το πόσες φορές εμφανίζονται (sort επιτρέπεται εννοείται)

Άσκηση 18

Έστω το string της άσκησης 10. Σε ποια θέση (POS) έχουμε το μεγαλύτερο QUAL;

Άσκηση 19

Έστω το string της άσκησης 10. Κάντε sort το POS ανάλογα με το QUAL. Η λίστα πρέπει να ξεκινάει από το μεγαλύτερο QUAL και να καταλήγει στο μικρότερο QUAL.

Άσκηση 20

Έστω το string της άσκησης 10. Ποιο ζευγάρι από entries, έχει τη μικρότερη απόσταση μεταξύ τους; Απόσταση ορίζεται ως το απόλυτο της διαφοράς του POS.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment