day5 - python的forLoops、最高分、范围for循环、密码生成器

128 阅读4分钟

day5 - python的forLoops、最高分、范围for循环、密码生成器

1 for Loops

# 语法
# for <每项内容的变量名> in <一个列表>:
#     <执行某些操作>
#     <执行其他操作>

# 化身为计算机
# 预测以下代码会打印出什么:
#
fruits = ["Apple", "Peach", "Pear"]
for fruit in fruits:
    print(fruit)
    print(fruit + " pie")

# 缩进
# 在 Python 编程中,缩进非常重要。每次你看到使用 : 的符号时,你需要特别注意随后代码的缩进。
#
# 例如:以下代码的行为非常不同:
fruits = ["Apple", "Peach", "Pear"]
for fruit in fruits:
    print(fruit)
    print("Hello")

fruits = ["Apple", "Peach", "Pear"]
for fruit in fruits:
    print(fruit)
print("Hello")

2 最高分

求和

Python有许多内置函数来帮助我们处理数字。其中一个可以帮助我们计算总和(总计)。 例如:

学生分数 = [180, 124, 165, 173, 189, 169, 146]
总分 = sum(学生分数)

但是sum()的背后效果是如何实现的呢?这段代码是由开发Python的人员编写的,它可能看起来像这样:

student_scores = [150, 142, 185, 120, 171, 184, 149, 24, 59, 68, 199, 78, 65, 89, 86, 55, 91, 64, 89]
print(range(1, 10))
sum = 0
for score in student_scores:
    sum += score
print(sum)

最大值

Python也有一个内置方法叫做max()以及min(), 这些方法允许你传入一个数字列表,它会给你最大值或者最小值。

你的任务是去理解Python程序员是如何通过循环和条件语句来构建此类功能。

nums = []
for num in range(100):
    nums.append(num)
print(nums)

maxNum = max(nums)
minNum = min(nums)
print(maxNum, minNum)

在不使用max()的情况下完成此挑战

你将获得一份考试分数的列表,你必须从列表中打印出最高分。你需要利用你所学的关于列表,循环和条件语句,从成绩列表中打印出最高分。例如,如果分数是:

arrFraction = [8, 65, 89, 86, 55, 91, 64, 89]
maxFraction = 0
for fraction in arrFraction:
    if fraction > maxFraction:
        maxFraction = fraction
print(maxFraction)

3 范围for循环

# range()函数与Python For Loop的结合使我们能够按照我们的需求进行循环。
# 我们可以通过一系列数字进行循环,而不是在一个列表中逐个循环。
# 范围函数
# range(1, 10)
#
# 这段代码本身并不能做任何事情。例如,如果你试图打印它,它不会给你单个的数字。
#
# 但是,它可以与For Loops结合使用。例如:
#
# for number in range(1, 10):
#     print(number)
# 这将打印出1 - 9的每一个数字。所以范围也可以被如此表达:
#
# a <= range(a, b) < b
#
# 其中数字范围包括了下限,但是不包括上限。
for number in range(1, 10):
    print(number)

# 暂停 1 - 高斯挑战
# 计算出1到100之间的数字总和,包括1和100。
sum = 0
for number in range(1, 101):
    sum += number
print(sum)

4 密码生成器

程序将会询问:

您希望密码中有多少个字母?
您希望有多少个符号?
您希望有多少个数字?

目标是从用户对这些问题的输入中获取数据,然后生成一个随机密码。请运用你关于Python列表和循环的知识来完成这个挑战。

import random

letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
symbols = ['!', '#', '$', '%', '&', '(', ')', '*', '+']
numbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']


# 密码生成器项目
# 程序将会询问:
#
# 您希望密码中有多少个字母?
# 您希望有多少个符号?
# 您希望有多少个数字?
# 目标是从用户对这些问题的输入中获取数据,然后生成一个随机密码。请运用你关于Python列表和循环的知识来完成这个挑战。

# 简单版本
# 依次生成密码。先是字母,然后是符号,最后是数字。如果用户想要
#
# 4个字母 2个符号和 3个数字 那么密码可能是这个样子:
#
# fgdx$*924
#
# 你可以看到所有的字母在一起。所有的符号在一起,所有的数字也在一起。首先尝试解决这个问题。
lettersInt = int(input("您希望密码中有多少个字母?\n"))
symbolInt = int(input("您希望有多少个符号?\n"))
numbersInt = int(input("您希望有多少个数字?\n"))

password = ''
passwords = []
# 字母
for i in range(lettersInt):
    letter = letters[random.randint(0, len(letters) - 1)]
    password += letter
    passwords.append(letter)
#  特殊
for i in range(symbolInt):
    sym = symbols[random.randint(0, len(symbols) - 1)]
    password += sym
    passwords.append(sym)
# 数字
for i in range(numbersInt):
    num = numbers[random.randint(0, len(numbers) - 1)]
    password += num
    passwords.append(num)
print(password)

# 困难版本
# 当你完成简单版本后,就可以挑战困难版本了。在这个项目的高级版本中,最终的密码没有遵循任何模式。所以上面的例子可能看起来是这样的:
#
# x$d24g*f9
#
# 每次你生成密码,符号、数字和字母的位置都是不同的。这将使密码更难以被黑客破解。
#
# 一个优秀的程序员最关键的技能是使用谷歌找到你所需的东西。你的大脑是用来思考的,
# 不是用来记忆功能的!你将需要在谷歌上搜索解决这个项目的高难度级别。如果你卡住了,查看下面的提示,看看该谷歌什么。
# 在Python中,你可以使用random模块中的shuffle()函数来随机混洗列表中的元素。
# 这个函数会就地(in-place)打乱列表的顺序,也就是说它不会创建一个新的列表,而是直接修改原始列表。
random.shuffle(passwords)
print(passwords)
pss = ''
for ps in passwords:
    pss += ps
print(pss)