【问题标题】:Making a While loop out of a For loop从 For 循环中创建一个 While 循环
【发布时间】:2020-09-30 13:13:15
【问题描述】:

我编写了这段代码,它适用于以下情况:

编写代码来检查通过 input() 给出的字符串是否只包含有效字符,但一旦遇到一个无效字符就停止。所以如果字符串是有效的打印有效的字符串。如果字符串无效,则打印无效字符串直到该点

但是现在我必须为此使用 while 循环,但我无法完成,你们能帮我或向我解释一下如何将此代码转换为 while 循环,同时保持完全相同的功能。

file = input()

invalid_letter_found = False
correct_letters = []

for current_letter in file:
    if current_letter in ['A', 'T', 'G', 'C']:
        correct_letters.append(current_letter)
        continue
    elif current_letter != ['A', 'T', 'G', 'C']:
        invalid_letter_found = True
        break
if invalid_letter_found == True:
    print(f'invalid {"".join(correct_letters)}')
else:
    print(f'valid {"".join(correct_letters)}')

【问题讨论】:

  • Python 的 'for' 和 'while' 语句都用于构造循环。 'for' 语句按照它们在序列中出现的顺序迭代任何序列(列表或字符串)的项目。 “while”语句通常涉及一个或多个变量,这些变量在进入循环开始时或之前被初始化,然后在循环内的某处更新。
  • 要解决您的问题,1. 确定迭代列表的方法 2. 查看 while True 循环的构造以及如何最好地结束循环

标签: python-3.x for-loop while-loop


【解决方案1】:

此程序将在查询中给出与上述程序完全相同的输出

file = input()
n=len(file)
lst=[]
for alp in file:  # this will convert the string to list, you can use any other method if you don't want for loop
    lst.append(alp) #Here the conversion ends
invalid_letter_found = False
correct_letters = []
i= 0
while i < n:
    if lst[i] in ["A", "T", "G", "C"]:
        correct_letters.append(lst[i])
        i += 1
        continue
    elif lst[i] != ["A", "T", "G", "C"]:
        invalid_letter_found = True
        break
if invalid_letter_found == True:
    print(f'invalid {"".join(correct_letters)}')
else:
    print(f'valid {"".join(correct_letters)}')

【讨论】:

    【解决方案2】:

    虽然您需要使用 while 循环的唯一原因是如果这是一个家庭作业问题 - 这是朝着正确方向的推动:

    1. 您可以使用string slicing 逐步从字符串中删除字母
    current_letter = file[0]
    file = file[1:]
    
    1. 您可以使用字符串长度作为您的 while 循环的条件 - 一旦字符串长度为零,您就完成了:
    while len(file):
    

    【讨论】:

    • 感谢您的建议,现在我明白了如何让它发挥作用,是的,您是对的,这确实是一个家庭作业问题......
    • 除非您在 while 循环操作中减小文件大小,否则此退出条件将不起作用
    • @itprorh66 确实如此,这就是为什么我包含字符串切片操作current_letter = file[0] 来获取第一个字母,并包含file = file[1:] 来将字符串大小减少一个。根据原始代码,我认为很明显这些都进入了 while 循环,因为那是您使用 current_letter... 的地方,但这是一个公平的观点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-21
    • 2020-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-10
    相关资源
    最近更新 更多