July 11, 2022

Циклы и диапазоны

Вернуться к содержанию

Циклы
Синтаксис:

Диапазоны от и до

range(старт, стоп, шаг)

Вызывая range() с тремя аргументами, вы можете выбрать не только то, где ряд чисел начнется и остановится, но также то, на сколько велика будет разница между одним числом и следующим. Если вы не задаете этот «шаг», то range() автоматически будет вести себя так, как если бы шаг был бы равен 1.

Обратите внимание: шаг может быть положительным, или отрицательным числом, но он не может равняться нулю:

Так отрабатывает код с шагом 3

Функция map как замена цикла

Цикл(loop) в одну строку

Примеры цикла в одну строку (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

Вернуться к содержанию