尝试编写一些适用于子手游戏的代码,我通常对代码和Python还是陌生的,因此我的代码似乎乏味或效率低下。我特别需要最后一个for循环的帮助。
import random
def_ = []
colours = ["orange", "blue", "yellow", "red", "gray"]
category = input("Please select a category to play from: 1) Colours - 2) Animals - 3) People: ") #lets only do the colours case for now
if category == "1":
rannum = random.randint(0, len(colours)-1)
word = colours[rannum]
i = 0
print(word)
for i in range(len(word)):
def_.append("_")
wordlist = str.lower(word)
i = 0
x = 0
for i in range(0,8):
guess = input("Please enter a letter that you think is in the word: ")
for x in range(0, len(wordlist)):
if str.lower(guess) == wordlist[x]:
def_[x] = wordlist[x]
print("".join(def_))
else:
print("".join(def_))
continue
例如,如果颜色是blue
,并且用户猜到了u
,我希望程序显示__u_
,而程序显示:
____
____
__u_
__u_
我相信该程序无论字符串有多长都在循环,并希望查看输入的字符是否与该迭代中涉及的字符匹配,以及每次打印该行时,我都希望它仅显示一次。
答案 0 :(得分:0)
您只需要删除print
语句中的else
,它就可以正常工作(您也可以完全删除else
语句,因为它没有用)。另外,正如Morten所指出的那样,您应该将print
从if
语句中移出,以避免在出现多个匹配字母的情况下进行多次打印。
编辑:一个小技巧,您无需在for
循环中使用变量之前就对其进行声明和初始化。
答案 1 :(得分:0)
从print
循环中删除for
,并将其放在for
循环之后,看看会发生什么;)
如果将其保留在if
语句中,则包含多个字母实例的单词将被多次打印。例如,当单词是黄色时,如果将其保留在if
语句中并将其从else
语句中删除,则会得到“ __l___”和“ __ll__”的打印输出。