随机字母生成器直到生成 D,Python

问题描述

我是学习 Python 的新手,我想知道我的程序无法运行的原因。生成工作完美,但它尝试检测字母 D 的部分并没有停止脚本并打印完成。

这是我的代码

import random
import string
import sys
import time

def get_random_string(length):

    while True:
        letters = string.ascii_lowercase
        result_str = ''.join(random.choice(letters) for i in range(length))
        time.sleep(1) #Basically stops the program from using 100% of my cpu.
        print("GENErating: ",result_str)
    if result_str == d:
        print("TASK COMPLETED! ")

get_random_string(1)

解决方法

您创建了一个无限循环,并且您检查的条件实际上从未达到,因为它不在循环内。

  1. 您需要缩进 if 块,此时您会得到一个 NameError,因为 d 不是一个已定义的变量。
  2. 您实际上要做的是与字符串 "d" 进行比较,因此我们可以将其更改为该字符串。
  3. 在此之后输入 breakreturn 也有帮助,这样它在找到后实际上会退出。
  4. 此外,与其进行相等比较,不如使用 startswith 以便在使 length 大于 1 时循环仍会退出。
  5. 现在您的搜索实际上将退出,您可以摆脱 time.sleep 调用,因为您的代码不会锁定,因此它可以运行得更快。
  6. 最后,为了灵活起见,您也可以将搜索目标设为参数。

因此:

import random
import string

def get_random_string(length,target):
    while True:
        letters = string.ascii_lowercase
        result_str = ''.join(random.choice(letters) for i in range(length))
        print("GENERATING:",result_str)
        if result_str.startswith(target):
            print("TASK COMPLETED!")
            break

get_random_string(1,"d")
,

我相信你只需要缩进 if 块。 以这种方式编写的 if 语句位于无限 while 循环之后,因此永远不会到达。

只需将其重写为:

import random
import string
import sys
import time

def get_random_string(length):

    while True:
        letters = string.ascii_lowercase
        result_str = ''.join(random.choice(letters) for i in range(length))
        time.sleep(1) #Basically stops the program from using 100% of my CPU.
        print("GENERATING: ",result_str)
        if result_str == "d":
            print("TASK COMPLETED! ")
            return

get_random_string(1)

还可以考虑,如果参数长度大于 1,那么 result_str 永远不会等于 "d"(它将是一个包含多个字母的字符串)并且您将陷入困境无限循环。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...