July 11, 2022
Циклы и диапазоны
Диапазоны от и до
range(старт, стоп, шаг)
Вызывая range() с тремя аргументами, вы можете выбрать не только то, где ряд чисел начнется и остановится, но также то, на сколько велика будет разница между одним числом и следующим. Если вы не задаете этот «шаг», то range() автоматически будет вести себя так, как если бы шаг был бы равен 1.
Обратите внимание: шаг может быть положительным, или отрицательным числом, но он не может равняться нулю:
Примеры цикла в одну строку (Comprehensive lists):
sp = [7, 8, 9, 9] sp1 = [x**2 for x in sp] print(sp1)
a = str(input('Input a number\n')) lst = [int(i) for i in a] s = sum(lst) print(s)
Вложенные циклы одной строкой:
list = [['1', '345', 'htyuj',], ['Andrei', 'Pasha', 'Olya'], ['Hello', 'hi', ], ['Dad','Son', 'Spouse']] # list_output = [] # for element in list: # for i in element: # list_output.append(i) ## new_string = ', '.join(list_output) # print(new_string) [[print(i) for i in element] for element in list] #Вывод будет в столбик значений вложенного листа
Еще пример:
greeting = 'Hello' letter_l = [] [letter_l.append(l) for l in greeting] print(letter_l) Второй вариант: letter_l = [letter for letter in greeting]
Пример с условием if
nl = [-6, 5, 65, -65, -2, 4, 9] pnl = [number for number in nl if number<0] print(pnl)
C оператором <else> конструкция с if переносится вперед
nl = [-6, 5, 65, -65, -2, 4, 9] [print('+') if i>0 else print('-')for i in nl] или new_list = ['+' if i>o else '-' for i in nl]
Вариант замены ветвления if:
def bmi(weight, height): b = weight / height ** 2 return ['Underweight', 'Normal', 'Overweight', 'Obese'][(b > 30) + (b > 25) + (b > 18.5)]
Примеры задач
FizzBuzz is a famous code challenge used in interviews to test basic programming skills. It's time to write your own implementation. Print numbers from 1 to 100 inclusively following these instructions: if a number is multiple of 3, print"Fizz"
instead of this number if a number is multiple of 5, print"Buzz"
instead of this number for numbers that are multiples of both 3 and 5, print"FizzBuzz"
print the rest of the numbers unchanged. Output each value on a separate line.
for i in range(1, 101): if i % 5 ==0 and i % 3 == 0: print('FizzBuzz') elif i % 3 == 0: print('Fizz') elif i % 5 == 0: print('Buzz') else: print(i)
for i in range(1, 101): output = "" if i % 3 == 0: output += "Fizz" if i % 5 == 0: output += "Buzz" print(output or i)
for i in range(1, 101): print("Fizz" * (i % 3 == 0) + "Buzz" * (i % 5 == 0) or str(i))
for number in range(1, 101): res = "" if number % 3 == 0: res = "Fizz" if number % 5 == 0: res += "Buzz" print(res or number)
for num in range(1, 101): print( 'FizzBuzz' if num % 3 == 0 and num % 5 == 0 else 'Fizz' if num % 3 == 0 else 'Buzz' if num % 5 == 0 else num )
for i in range(1, 101): fizz = 'Fizz' if i % 3 == 0 else '' buzz = 'Buzz' if i % 5 == 0 else '' print(f'{fizz}{buzz}' or i)
for n in range(1, 101): print('Fizz' * (not n % 3) + 'Buzz' * (not n % 5) or n)
# Explanation: # # - Expressions like (not n % 3) will return True or False # - Expressions like `'Fizz' * True` is the same as `'Fizz' * 1 ` # - Expressions like `'Fizz' * False` is the same as `'Fizz' * 0` # - Multiplying a string by 1 returns the same string # - Multiplying a string by zero returns empty string