-
Notifications
You must be signed in to change notification settings - Fork 0
/
lab-while-2.py
84 lines (61 loc) · 3.2 KB
/
lab-while-2.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
from __future__ import print_function
from colorama import init, Fore, Back, Style
values = [10, 43, 12, 48, 12, 11, 18, 98, 57, 28, 19, 27, 49, 19, 74]
# print(len(values))
i = 0
iMax = len(values) - 2
while i < iMax :
print(i, values[i], values[i+1], values[i+2])
if values[i] < values[i+1] and values[i+1] < values[i+2] :
print(Fore.LIGHTGREEN_EX + "\tFound:", values[i], values[i+1], values[i+2], "" + Fore.RESET)
i += 1
'''
exercises
'''
# Dzięki znajomości Pythona dostajesz pracę w BTAW (Bardzo Tajna Agencja Wywiadowcza). Od poprawnego rozwiązania
# poniższych zadań zależy złamanie algorytmów szyfrujących wroga:
#
# 1. Dana jest zakodowana informacja w postaci tabeli:
# numbers = [8, 18, 2, 4, 16, 5, 25, 4, 22, 3, 3, 5, 3, 9, 81, 11]
# Trzeba odnaleźć takie dwie kolejne liczby, że druga jest kwadratem pierwszej. W tym celu:
# trzeba wykonać analizę po dwa elementy na raz
# zmienna sterująca i przyjmie wartość od zera do ..... ?
# przy pomocy pętli while i sterującej nią zmiennej i analizuj po dwie wartości z listy na raz
# wyświetl analizowane wartości
# jeżeli pierwsza z nich do kwadratu jest równa drugiej, to wyświetl napis "FOUND"
numbers = [8, 18, 2, 4, 16, 5, 25, 4, 22, 3, 3, 5, 3, 9, 81, 11]
i = 0
iMax = len(numbers) - 1
while i < iMax :
print(numbers[i], numbers[i+1])
if numbers[i]**2 == numbers[i+1]:
print(Fore.LIGHTBLUE_EX + "\tFound:", numbers[i], numbers[i+1], "" + Fore.RESET)
i += 1
# 2. Pracujemy z tą samą listą co poprzednio. Tym razem należy analizować po 3 wartości na raz. Interesuje nas
# odnalezienie takich 3 liczb, że pierwsza do kwadratu równa się drugiej, a druga do kwadratu równa się trzeciej.
# Właściwie do tego zadania możesz wykorzystać pętlę z poprzedniego zadania, z tym, że:
# analizujemy po 3 liczby na raz
# zmienna sterująca przyjmie wartość od zera do ....?
i = 0
iMax = len(numbers) - 2
while i < iMax :
print(numbers[i], numbers[i+1], numbers[i+2])
if numbers[i]**2 == numbers[i+1] and numbers[i+1]**2 == numbers[i+2]:
print(Fore.LIGHTMAGENTA_EX + "\tFound:", numbers[i], numbers[i+1], numbers[i+2], "" + Fore.RESET)
i += 1
# 3. Tym razem w wejściowej liście znajdują się napisy:
# texts = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
# Twoim zadaniem jest znalezienie takich par kolejnych napisów z tej listy, że długość pierwszego jest równa
# długości drugiego, np, długość napisu "one" to 3, długość napisu "two" to 3, więc taka para powinna być odnaleziona.
# Z kolei długość napisu 'two' to 3, a długość napisu "three" to 5, więc taka para nie jest rozwiązaniem. Właściwie
# można znowu bazować na poprzednich rozwiązaniach, ale:
# zmieniła się tabela wejściowa
# zmienia się warunek w if - to już nie są działania na liczbach ale porównywanie długości napisów
texts = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
i = 0
iMax = len(texts) - 1
while i < iMax :
print(texts[i], texts[i+1])
if len(texts[i]) == len(texts[i+1]) :
print(Fore.LIGHTCYAN_EX + "\tFound (", len(texts[i]), "): ", texts[i], texts[i+1], "" + Fore.RESET)
i += 1