hnc-eduard/HNC/Excercises/Много простых задач/main.py

215 lines
7.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Сумма элементов массива
def sum_array(array):
# Что должна возвращать функция?
sum = 0
# Проводим вычисления
for a in array:
sum = sum + a
# Вернуть значение
return sum
# Из суммы элементов с четным индексом вычесть элементы с нечетным индексом (0 - четный)
def sum_diff_array(array):
# Что должна возвращать функция?
result = 0
# Проводим вычисления
for e in range(len(array)):
if e % 2 == 0:
result = result + array[e]
else:
result = result - array[e]
# Вернуть значение
return result
# Максимальное число из массива помножить на минимальное число из массива
def max_mul_min_array(array):
if len(array) == 0:
return 0
max_x = array[0]
min_x = array[0]
for w in array:
if w > max_x:
max_x = w
if w < min_x:
min_x = w
return max_x * min_x
# Развернуть строку (например "Abc" -> "cbA")
def invert_string(string):
# Что должна возвращать функция?
str1 = ""
# Проводим вычисления
length = len(string) - 1
while length >= 0:
str1 = str1 + string[length]
length = length - 1
# Вернуть значение
return str1
# Все буквы сделать заглавными (например "aBc" -> "ABC")
def to_upper_string(string):
str2 = ""
for c in string:
if 97 <= ord(c) <= 122:
str2 += chr(ord(c) - 32)
else:
str2 += c
return str2
# Все буквы сделать прописными (например "aBc" -> "abc")
def to_lower_string(string):
# Что должна возвращать функция?
str3 = ""
# Проводим вычисления
for c in string:
# Проверить, какая буква
if 65 <= ord(c) <= 90:
# Если большая - то превращаем в маленькую и добавляем в итоговую строку
str3 += chr(ord(c) + 32)
else:
str3 += c
return str3
# Проверить, является ли строка палиндромом (независимо от больших/маленьких букв)
def check_palindrome(string):
string = to_lower_string(string)
for c in range(len(string)//2):
if string[c] != string[-1-c]:
return False
return True
# Проверить, является ли строка палиндромом (независимо от больших/маленьких букв и знаков пунктуации/пробелов)
def check_palindrome_escaped(string):
string = to_lower_string(string)
marks = [' ', ':', ',', '.', '?', '!']
left = 0
right = len(string) - 1
while right > left:
if string[left] in marks:
left += 1
if string[right] in marks:
right -= 1
if string[left] != string[right]:
return False
left += 1
right -= 1
return True
string = check_palindrome(string)
return string
# "Ручной" аналог функции split()
def split_string(string, separator):
pass
# "Ручной" аналог функции join()
def join_array(array, separator):
pass
#################################################
def verifier(test_name, actual, expected):
print(test_name)
if actual != expected:
print("=======> FAILED! <=======")
print(f"Got value <{actual}>")
print(f"Expected value is <{expected}>")
else:
print("PASSED")
print()
test_array1 = [6, 4, 7, -3, 6, -1, 5, 8, 4, -6, 8, 3, 6, 4, -7, 21, 6, 4, -1, 1]
test_array2 = [987, 342, -876, 182, -6534, 998, -11, 334, 0, 6654, -9901, 333, 111, 664]
test_array3 = [10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10]
test_string1 = "The World is not enough"
test_string2 = "Testing is key"
test_palindrome1 = "Sir, I demand, I am a maid named Iris"
test_palindrome2 = "Satire: Veritas"
test_palindrome3 = "Saippuakivikauppias"
test_split1 = "1, 2, 3, 4, 5, 6, 7, 8, 9"
test_split2 = "1 2 3 4 5 6 7 8 9"
test_split3 = "bagahajemanbdneorijahdhrea4"
test_array4 = test_split1.split(',')
test_array5 = test_split2.split(' ')
test_array6 = test_split3.split('a')
sum_array_tests = [test_array1, test_array2, test_array3, [], [0]]
string_tests = [test_string1, test_string2, test_palindrome1, test_palindrome2, test_palindrome3, '']
palindrome_tests = [test_string1, test_string2, test_palindrome1, test_palindrome2, test_palindrome3, '']
split_string_tests = [test_split1, test_split2, test_split3, test_string1, test_string2, '']
join_array_tests = [test_array4, test_array5, test_array6, [], ['']]
for i in range(len(sum_array_tests)):
verifier(f"SUM_ARRAY TEST {i+1}", sum_array(sum_array_tests[i]), sum(sum_array_tests[i]))
for i in range(len(sum_array_tests)):
verifier(f"SUM_DIFF_ARRAY TEST {i+1}", sum_diff_array(sum_array_tests[i]), sum(sum_array_tests[i][0::2]) - sum(sum_array_tests[i][1::2]))
for i in range(len(sum_array_tests)):
if len(sum_array_tests[i]) == 0:
verifier(f"MAX_MUL_MIN_ARRAY TEST {i + 1}", max_mul_min_array(sum_array_tests[i]), 0)
else:
verifier(f"MAX_MUL_MIN_ARRAY TEST {i+1}", max_mul_min_array(sum_array_tests[i]), max(sum_array_tests[i]) * min(sum_array_tests[i]))
for i in range(len(string_tests)):
verifier(f"INVERT_STRING TEST {i+1}", invert_string(string_tests[i]), string_tests[i][::-1])
for i in range(len(string_tests)):
verifier(f"TO_UPPER_STRING TEST {i+1}", to_upper_string(string_tests[i]), string_tests[i].upper())
for i in range(len(string_tests)):
verifier(f"TO_LOWER_STRING TEST {i+1}", to_lower_string(string_tests[i]), string_tests[i].lower())
for i in range(len(palindrome_tests)):
verifier(f"CHECK_PALINDROME TEST {i+1}",
check_palindrome(palindrome_tests[i]),
(palindrome_tests[i].lower() == palindrome_tests[i].lower()[::-1]))
for i in range(len(palindrome_tests)):
val = "".join(e for e in palindrome_tests[i] if e.isalpha())
verifier(f"CHECK_PALINDROME_ESCAPED TEST {i+1}",
check_palindrome_escaped(palindrome_tests[i]),
(val.lower() == val.lower()[::-1]))
for i in range(len(split_string_tests)):
separator = ','
verifier(f"SPLIT_STRING (SEPARATOR='{separator}') TEST {i+1}",
split_string(split_string_tests[i], separator),
split_string_tests[i].split(separator))
for i in range(len(split_string_tests)):
separator = ' '
verifier(f"SPLIT_STRING (SEPARATOR='{separator}') TEST {i+1}",
split_string(split_string_tests[i], separator),
split_string_tests[i].split(separator))
for i in range(len(join_array_tests)):
separator = '#'
verifier(f"JOIN_ARRAY (SEPARATOR='{separator}') TEST {i+1}", join_array(join_array_tests[i], separator), separator.join(join_array_tests[i]))
for i in range(len(join_array_tests)):
separator = ''
verifier(f"JOIN_ARRAY (SEPARATOR='{separator}') TEST {i+1}", join_array(join_array_tests[i], separator), separator.join(join_array_tests[i]))