Skip to main content
 首页 » 编程设计

python之如何修复此 Python 变量问题

2025年05月04日9xiaohuochai

好吧,如果您在 Python 中运行以下代码,它只会打印问题变量的第一个字母,但它会打印其余部分。只有当我的 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() 

请您参考如下方法:

发生这种情况是因为您在这一行用 question 的值之一覆盖了全局变量 question:

question = random.choice(question) 

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

question = [...] # question is a list of strings 
question = random.choice(question) # question is a single string 
question = random.choice(question) # question is a character from that string 

解决方法是将变量名换成其他的:

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 .确保您的代码符合 PEP 8 以保持其可读性并使其看起来与其他 Python 代码更相似。例如,运算符应该用一个空格包围,逗号后面应该有一个空格等。