好吧,如果您在 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 代码更相似。例如,运算符应该用一个空格包围,逗号后面应该有一个空格等。
