微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决随机字母生成器直到生成 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"(它将是一个包含多个字母的字符串)并且您将陷入困境无限循环。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?