- 1
- 2
- 3
- 4
def main():
pipe(int(input('Введите неотрицательное целое число: ')),
lambda n: (n, reduce(lambda x, y: x * y, range(1, n + 1))),
lambda tup: print(f'Факториал числа {tup[0]} равняется {tup[1]}'))
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+1
def main():
pipe(int(input('Введите неотрицательное целое число: ')),
lambda n: (n, reduce(lambda x, y: x * y, range(1, n + 1))),
lambda tup: print(f'Факториал числа {tup[0]} равняется {tup[1]}'))
Из https://habr.com/ru/post/555370/ (Функциональное ядро на Python).
0
def generate_words(sample, phonemes, num=10):
global words, yd
gen = True
parens = 0
r = random.random()
word = ""
i = 0
while i < int(num):
for j in range(0, len(sample)):
if sample[j] == '(':
if gen:
gen = (random.randint(0,1) == 0)
if not gen:
parens += 1
elif sample[j] == ')':
if not gen:
parens -= 1
if parens == 0:
gen = True
elif sample[j] in phonemes.keys():
for n, phtype in enumerate(phonemes.keys()):
if gen and phtype == sample[j]:
#k = random.choice(phonemes[phtype])
n = yd.randomGen(phonemeRanks[phtype])
k = phonemes[phtype][n]
word += k
elif gen:
word += sample[j]
if (not word in words) and (not isExceptional(word)):
words.append(word)
i += 1
word = ""
# ...
"""parsing sound changes rule with the notation X>Y/Z, where X is a set of source phonemes
Y - a set of resulting phonemes, Z - a positional condition (optional)"""
def parsePhNotation(inline):
rule = inline.split('>')
if (not len(rule) == 2):
return []
source = rule[0].split(',')
final = rule[1].split('/')
result = final[0].split(',')
posCond = []
rule = []
if (len(final) > 2):
return False
elif (len(final) == 2):
posCond = final[1].split('_')
if (not len(posCond) == 2):
return []
posCond[0] = posCond[0].split('#')
posCond[1] = posCond[1].split('#')
if (len(posCond[0]) == 2) and len(posCond[0][0]) > 0:
return []
elif len(posCond[0]) == 2:
rule.append(" "+posCond[0][1])
else:
rule.append(posCond[0][0])
if (len(posCond[1]) == 2) and len(posCond[1][1]) > 0:
return []
rule.append(posCond[1][0])
if len(posCond[1]) == 2:
rule[1] += " "
rule[0] = rule[0].split(",")
rule[1] = rule[1].split(",")
final = []
if len(source) > len(result):
for i in range(len(result)-1, len(source)-1):
result.append("")
elif len(source) < len(result):
for i in range(len(source)-1, len(result)-1):
source.append("")
final.append(source)
final.append(result)
if (len(rule)>0):
final.append(rule)
return final
Рекурсивный спуск, автомат с магазинной памятью, top-down parsing, bottom-up parsing? Не, не слышал. В свое время время делал вот такие самопальные алгоритмы для рандомной генерации слов по фонетическим шаблонам (типа "CV(C)", "VC" и т.д.) и фонетического преобразования слов и при попытке починить чета наступал на новые баги, т.к. не до конца понимал как вообще парсятся компьютерные языки.
+1
import cowsay
cowsay.cow('Hello World')
___________
< Hello World >
===========
\
\
^__^
(oo)\_______
(__)\ )\/\
||----w |
|| ||
0
"""
This module provides a function merge_sort, which is one of the simplest and the
most robust sorting algorithms, being relatively fast, having (n*log(n))
complexity. Also, this module counts the number of inversions in a given array.
Usage: import this module and use the function merge_sort. The first element in
a returned tuple shall be a sorted array, while the second one will be a number
of inversions in the array.
Copyright (C) 2021 Sergay Gayorgyevich.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
"""
import argparse
def merge_sort(array : list) -> (list, int):
"""
MergeSort algorithm with additional inversion counting.
input: array.
output: sorted array and number of inversions in it.
"""
if len(array) <= 1:
return (array, 0)
elif len(array) == 2:
if array[0] > array[1]:
array[0], array[1] = array[1], array[0]
return (array, 1)
return (array, 0)
mid = len(array) // 2
left, left_inversions = merge_sort(array[:mid])
right, right_inversions = merge_sort(array[mid:])
merged, split_inversions = _merge(left, right)
return (merged, right_inversions + left_inversions + split_inversions)
def _merge(left_array : list, right_array : list) -> (list, int):
"""
This function isn't supposed to be called, it's an inner function of the
module, and not a part of its API!
The purpose of this function is to merge two arrays. Due to the nature of
the MergeSort algorithm, it operates two arrays, both of which are sorted.
input: two sotrted arrays.
output: sorted array, consisting of elements of both operated arrays.
"""
resulting_array = list()
inversion_count = 0
c_len = len(left_array) + len(right_array)
for i in range(c_len):
if (len(left_array) != 0) and (len(right_array) != 0):
if left_array[0] > right_array[0]:
inversion_count += len(left_array)
resulting_array.append(right_array.pop(0))
else:
resulting_array.append(left_array.pop(0))
elif len(left_array) == 0:
resulting_array.append(right_array.pop(0))
elif len(right_array) == 0:
resulting_array.append(left_array.pop(0))
return (resulting_array[:], inversion_count)
# For testing purposes only! Do not use in production!
if __name__ == '__main__':
DESC = "Sort an array and print an amount of inversions it has." # Description for argparse.
argparser = argparse.ArgumentParser(description = DESC)
argparser.add_argument("elements", type = int, nargs = '+', help = "A list to be sorted.")
args = argparser.parse_args()
print(merge_sort(args.elements))
Изучаю алгоритм "Сортировка Слиянием".
+3
"""
A module for printing funny frames.
Copyright (C) 2021 Ingostnus.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
"""
from math import sqrt
_str = "sample" # String to be turned into a funny frame.
_sep = ' ' # Separator, i.e. a string to be inserted between each letter of the _str.
_vertical_separator_mode = 'F' # Determines whether separator should be printed between each row.
# ... 'F' --> off. 'T' --> on.
def get_user_input() -> None:
"""
This function lets user input desired values and override the defaults.
"""
global _str; _str = str(input("String: "))
global _sep; _sep = str(input("Character: "))
global _vertical_separator_mode; _vertical_separator_mode = str((input("VSM (T/F):")))
if _vertical_separator_mode == 'T':
print("VMS is ON!!!")
def print_frame(printer = print) -> list:
"""
This function is designed for printing a frame. Custom printer function
may be supplied to process the output in a specific way.
"""
buffer_len = (len(_str) + len(_sep) * (len(_str) - 1))**2
# First line.
printer(''.join([_str[i] + _sep if i < (len(_str) - 1) else _str[-1] for i in range(len(_str))]))
# Second -- pre last lines.
empty_space = ' ' * (int(sqrt(buffer_len)) - 2)
for i in range(1, len(_str) - 1):
# If vertical separator mode is toggled, print vertical separator.
if _vertical_separator_mode == 'T':
printer(_sep + empty_space + _sep)
printer(_str[i] + empty_space + _str[-(i + 1)])
# Last line.
printer(''.join([_str[-(i + 1)] + _sep if i < (len(_str) - 1) else _str[0] for i in range(len(_str))]))
# To give the best perfomance and flexibility, this module should be used as
# an imported library. Though, its basic functionality can be used even if
# it's executed directly.
if __name__ == '__main__':
get_user_input()
print_frame()
Переписала код https://govnokod.ru/27348 на питон, добавив чуть-чуть улучшений и немноже4ко документацци.
−1
def karatsuba_multiplication(x : int, y : int) -> int:
sx, sy = map(lambda x: '0' + str(x) if len(str(x)) % 2 != 0 else str(x), (x, y))
return _karatsuba_multiplication(sx, sy, max(len(sx), len(sy)))
def _prepend_nils(string : str, amount_of_nils : int) -> str:
return ('0' * amount_of_nils + string)
def _karatsuba_multiplication(x : str, y : str, n : int) -> int:
x, y = map(lambda x: _prepend_nils(x, (n - len(x))), (x, y))
if (n == 1):
return (int(x) * int(y))
mid = n // 2
a, b = int(x[:mid]), int(x[mid:])
c, d = int(y[:mid]), int(y[mid:])
p = a + b
q = c + d
ac = _karatsuba_multiplication(str(a), str(c), max(len(str(a)), len(str(c))))
bd = _karatsuba_multiplication(str(b), str(d), max(len(str(b)), len(str(d))))
pq = _karatsuba_multiplication(str(p), str(q), max(len(str(p)), len(str(q))))
adbc = pq - ac - bd
return 10**n * ac + 10**(mid + n % 2) * adbc + bd
Как-то не очень получилось...
+1
def ForQueryInAddr(query, addr):
global listed, primalsource
print("Searcing in: "+addr)
html = requests.get(addr,proxies=proxies).text
if (query.lower() in html.lower()):
print("==============================================")
print("Query found in: "+addr)
print("==============================================")
if ("<html>" in html or "<head>" in html):
data = PyQuery(html)
links = data('a')
for link in links:
ahref = link.attrib['href']
#print("Found: "+ahref)
if (ahref not in listed):
if (ahref[0].lower() == "h"):
if (primalsource in ahref):
if (ahref[-3:].lower() not in filetypes and ahref[-4:].lower() not in filetypes and ahref[-5:].lower() not in filetypes):
listed.append(ahref)
ForQueryInAddr(query, ahref)
https://github.com/Dev1lroot/OnionSearch/blob/master/main.py
+2
match group_shapes():
case [], [point := Point(x, y), *other]:
print(f"Got {point} in the second group")
process_coordinates(x, y)
https://www.python.org/dev/peps/pep-0622/
0
def luhn(self):
all_sum = 0
self.__card_number = str(self.__card_number)
self.__card_number = list(self.__card_number)
for element in range(len(self.__card_number)):
if element % 2 == 0:
self.__card_number[element] = int(self.__card_number[element]) * 2
if self.__card_number[element] > 9:
number = self.__card_number[element]
self.__card_number[element] = number // 100 + number // 10 % 10 + number % 10 # sum digits of number
self.__card_number[element] = int(self.__card_number[element])
all_sum += self.__card_number[element]
checksum = 0
while checksum < 10:
if all_sum % 10 == 0:
checksum = str(checksum)
break
else:
all_sum += 1
checksum += 1
self.i = str(self.i)
self.i = list(self.i)
self.i.append(checksum)
self.__card_number = self.i
self.__card_number = "".join(self.__card_number)
Для преокта нужен был алгоритм луна, чтобы создать в конце контрольную сумму. При написании проебался, что мне card_number нужно просто добавить 1 цифру, а не менять его и по этому просто добавил костыль в виде i.
0
def IsZIPFile(filename):
return filename.lower().endswith('.zip')
ибааааать!