如何修复这个Python变量问题?

2024-09-30 20:38:30 发布

您现在位置:Python中文网/ 问答频道 /正文

好吧,如果您在Python中运行下面的代码,那么它只会打印question变量的第一个字母,但是它可以打印其余的字母。只有在Python脚本中有for循环函数时才会发生这种情况。你有什么办法解决这个问题吗?在

    import random
    global nouns
    global verbs
    global question
    nouns =["website","browser","server","printer","computer","disc","software","desktop","a internet connection","the internet","site","forum","smf forum","phpbb forum","money making website","money making blog","firefox","chrome","opera","",""]
    verbs = ["cosntruct","build","create","design","update","reconstruct","clean","fix","repair","browse","discover","formualte","form","plan"]
    question = ["How do I","How would I", "how do i", "how would i", "what is a", "what is the", "how would i", "how should i", "when does a", "When does a", "How should I"]


    def q_gen():
       global nouns
       global verbs
       global question
       noun_pick = random.choice(nouns)
       verb_pick = random.choice(verbs)
       question = random.choice(question)
       create = question+" "+verb_pick+" "+noun_pick+"?"
       print create

    num_count = 0
    for num_count in range(1, 100):
       num_count=num_count+1
       q_gen()

Tags: countcreate字母forumrandomglobalnumhow
2条回答

发生这种情况是因为您正在用question的其中一个值重写全局变量question,该值位于以下行:

question = random.choice(question)

这意味着会发生以下情况:

^{pr2}$

解决方案是将变量名替换为其他名称:

question_pick = random.choice(question)
create = question_pick+" "+verb_pick+" "+noun_pick+"?"

关于风格的几点注记

您可以对代码进行一些改进。这些更改可以提高可读性、提高性能,或者使代码更具惯用性。在

  • 声明变量。这在Python中没有实现。当你给一个变量赋值时,它就会出现。这包括for语句

    global a # Unnecessary and dangerous
    a = 0
    
  • 迭代。当你说for x in ...时,你在一次又一次地执行一组语句。每次浏览套件时,x将分配给下一个项目。您不需要自己分配或增加x

    x = 0 # Not necessary; x is about to be assigned to the first
          # element of range(10), which is 0
    for x in range(10):
        ...
        x = x + 1 # Not necessary; as soon as this statement is done,
                  # x will be assigned to the next element of range(10)
    
  • 全局。

    • 您不需要它们。当您使用name = ...时,您正在创建一个模块级变量。每个变量都可以在模块中的任何位置访问(即,在当前的.py文件中)

    • 它们是危险的。如果其他模块正在使用一个名为name的变量,您可能会有一个令人讨厌的惊喜。如果您计划进一步开发此代码,请记住这一点。

  • 字符串格式。其思想是创建一个模板,然后将标记放在希望插入值的位置。%s标记的意思是“将下一个变量解释为字符串并将其放在这里”。在

    create = "%s %s %s?" % (question, verb_pick, noun_pick)
    
  • 样式。Python有一个称为PEP 8的样式指南。确保您的代码符合pep8,这样可以保持代码的可读性,并使其看起来更类似于其他Python代码。例如,运算符应该由一个空格包围,逗号后面应该有一个空格,等等。

此行修改全局变量:

 question = random.choice(question)

第一次之后,随机选择被赋予一个字符串而不是一个列表,因此它随机选择一个字母。从那时起,随机选择给定一个字符串,因此它总是使用同一个字母。在

发生此错误是因为您不必要地使用了global。如果不使用global编写它,则会出现编译错误,因为问题已被修改。在

以下是不带global的代码:

^{pr2}$

相关问题 更多 >