Advertisement
Dodik_Parahodik

Hexlet_python

Feb 26th, 2020
420
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.10 KB | None | 0 0
  1. Деструктуризация
  2.  
  3. Обращение по индексу, это не самый удобный способ работы с кортежами. Дело в том, что кортежи часто содержат значения разных типов, и помнить, по какому индексу что лежит — очень непросто. Но есть способ лучше! Как мы кортеж собираем, так его можно и разобрать:
  4.  
  5. name_and_age = ('Bob', 42)
  6.  
  7. (name, age) = name_and_age
  8. name  # 'Bob'
  9. age   # 42
  10.  
  11. Именно таким способом принято получать и сразу разбирать значения, которые возвращает функция (если таковая возвращает несколько значений, конечно):
  12.  
  13. (quotient, modulo) = div_mod(13, 4)
  14.  
  15. Соответственно кортеж из одного элемента нужно разбирать так:
  16.  
  17. (a,) = (42,)
  18. a  # 42
  19.  
  20. Если же после имени переменной не поставить запятую, то синтаксической ошибки не будет, но в переменную a кортеж запишется целиком, т.е. ничего не распакуется. Всегда помните о запятых!
  21.  
  22. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  23. def fibRecGood(n,c,p):
  24.     global gCount
  25.     gCount+=1
  26.     if (n==1):
  27.         return c
  28.     else:
  29.         return fibRecGood(n-1,c+p,c)
  30.  
  31. def fibRecBad(n):
  32.     global gCount
  33.     gCount+=1
  34.     if (n<=2):
  35.         return 1
  36.     else:
  37.         return fibRecBad(n-1)+fibRecBad(n-2)
  38.        
  39.        
  40. # Тест
  41.  
  42. gCount=0
  43. f=fibRecGood(20,1,0)
  44. print(f)
  45. print("counter="+str(gCount))
  46.  
  47. gCount=0
  48. f=fibRecBad(20)
  49. print(f)
  50. print("counter="+str(gCount))
  51.  
  52. ~~~~~~~~~
  53. Fuzzbuzz_naive_still_not_the_worst
  54. for i in range(1, 101):
  55.     s = ''
  56.     if i % 3 == 0:
  57.         s = 'Fizz'
  58.     if i % 5 == 0:
  59.         s += 'Buzz'
  60.     if not s:
  61.         s = str(i)
  62.     print (s)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement