python学习——while True的用法

本文通过对比两种不同实现方式,详细解释了如何利用while True循环优化用户登录系统的流程,确保在输入错误时能循环请求用户重新输入,提高用户体验。

在学习过程中,经常能遇到采用while True的用法。下面以一个例子进行说明:

建立一个用户登录系统,用户输入用户名和密码,如果正确就可以进入系统。

1、我自己最开始的写法:

d = {} #数据库字典,所有用户的用户名密码存储在此

name = input("请输入您的用户名:")
if name in d:
password = input("请输入您的密码")
if d[name] == password:
print('进入系统')
else:
print('您输入的密码错误,请重新输入')
else:
print('您输入的用户名不正确,请重新输入')

这个自己写的程序逻辑上貌似是对的:
——先让用户输入用户名,如果存在该用户名,就继续让用户输入密码,如果密码正确就进入系统。如果密码不正确就重新输入。
——如果不存在该用户名,提示“您输入的用户名不正确,请重新输入”

但是在实际运行过程中,如果用户输入的用户名和密码都正确,那自然是没有问题的。但是如果有一个输入不正确,那系统只会显示“您输入的用户名不正确,请重新输入”或“您输入的密码错误,请重新输入”。也就是说,如果出现错误,没有返回到原来的地方,请求继续输入。

2、采用while True循环语句:

采用该语句的核心思想是如果出现错误的话,可以继续循环。

d = {}

while Ture:
name = input('请输入您的用户名:')
if name in d:
break
else:
print('您输入的用户名不存在,请重新输入')
continue

while True:
password = input('请输入您的密码:')
if d[name] == password:
print('进入系统')
break
else:
print('您输入的密码不正确,请重新输入')
continue

以上程序就可以达到所需目的:在输入用户名或密码错误的情况下返回到开始部分,请求继续输入。

while True 语句中一定要有结束该循环的break语句,否则会一直循环下去的。

当然,我们遇见过如果密码错误的话,提示您还有几次输入密码的机会。可以这样实现:

count = 5
while count:
password = input('请输入您的密码:')
if d[name] == password:
print('进入系统')
break
else:
count -= 1
print('您输入的密码不正确,还有{}次输入机会'.format(count))
continue
---------------------
作者:geerniya
来源:优快云
原文:https://blog.youkuaiyun.com/geerniya/article/details/77524173
版权声明:本文为博主原创文章,转载请附上博文链接!

转载于:https://www.cnblogs.com/huigebj/p/11298332.html

<think>好的,我现在需要帮助用户找到Python实现埃拉托斯特尼筛法的代码或教程。首先,我应该回顾用户提供的引用内容,看看里面有没有相关的代码示例。用户提到了三个引用,其中引用[1]看起来直接包含了一个Python函数sieve_of_eratosthenes,这可能就是用户需要的。引用[2]和引用[3]也提到了埃式筛法的实现,但引用[1]的代码更完整,应该优先考虑。 接下来,我需要确认用户的问题:他们想要示例代码和教程。所以我的回答应该包括代码示例,并解释代码的工作原理,可能还需要指出优化点或使用场景,比如计算n以内的素数。根据引用[1]中的代码,函数接收参数n,返回所有素数列表。代码中使用布尔列表标记素数,初始假设所有数为素数,然后从2开始,将每个素数的倍数标记为非素数。 用户可能还需要了解代码的步骤,比如初始化、筛选过程、结果收集。这时候需要分步骤解释,确保清晰。同时,要注意代码中的优化,例如p*p <= n来减少循环次数,以及从p*p开始标记非素数,避免重复工作。这些优化点可以提升代码效率,应该提到。 另外,用户可能想知道如何调用这个函数,比如示例中求100以内的素数,可以给出示例调用和输出。引用[1]的代码返回的是小于n的素数,所以当输入100时,结果不包含100,但用户可能需要确认这点,或者调整代码。 还需要注意用户提到的引用格式,在回答中适当加入引用标识,例如在解释埃拉托斯特尼筛法原理时,引用[2]提到该算法由埃拉托斯特尼提出,所以加上引用标记。引用[3]可能涉及到代码的不同实现方式,但当前示例代码来自引用[1],所以主要引用[1]和[2]。 此外,用户要求生成相关问题,我需要考虑用户可能进一步的问题,比如算法的时间复杂度、优化方法、与其他筛法的比较(如欧拉筛),或者在不同规模数据下的表现。因此,相关问题可以围绕这些方面展开。 最后,确保回答符合用户的要求:结构清晰,分步骤解释,代码正确,引用正确。检查LaTeX格式是否正确,比如变量用$...$,独立公式用$$...$$,但在这个问题中可能数学公式较少,主要集中在代码和算法步骤上。需要确保所有数学表达式如时间复杂度O(n log log n)正确使用LaTeX格式。</think>### Python实现埃拉托斯特尼筛法 #### 实现原理 埃拉托斯特尼筛法通过逐步筛选非素数来获取指定范围内的所有素数。核心思想是从2开始,将每个素数的倍数标记为非素数,直到遍历完$\sqrt{n}$的范围[^2]。 #### 示例代码 ```python def sieve_of_eratosthenes(n): prime = [True] * (n + 1) prime[0:2] = [False, False] # 0和1不是素数 p = 2 while p * p <= n: if prime[p]: # 从p^2开始标记非素数,避免重复标记 for i in range(p * p, n + 1, p): prime[i] = False p += 1 return [i for i, is_prime in enumerate(prime) if is_prime] ``` #### 代码解析 1. **初始化布尔数组**:`prime`数组标记$0$到$n$是否为素数,初始默认全为`True`[^1]。 2. **筛除非素数**:从$p=2$开始,若`prime[p]`为`True`,则将$p^2, p^2+p, ...$标记为`False`。 3. **终止条件**:当$p^2 > n$时停止循环(因所有合数已被标记)[^2]。 4. **结果收集**:遍历布尔数组,返回所有标记为`True`的索引。 #### 使用示例 ```python print(sieve_of_eratosthenes(100)) # 输出100以内的所有素数 # 结果包含:[2, 3, 5, ..., 97] ``` #### 时间复杂度 该算法的时间复杂度为$O(n \log \log n)$,是效率最高的素数筛选算法之一[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值