我正在做一个爱好项目。我正在尝试用Python制作一个刽子手游戏。到目前为止一切都很好。只有一个问题。如果我输入两次出现在单词中的字母,我就无法显示第二个字母。我一直在使用string.find和string.count方法,但无济于事。有谁知道我会怎么做呢?我很难过。
#!bin/bash/python
import os
import time
word = 'megalopolis'
l = len(word)
list = []
n=0
while n!=l:
list.append('-')
n+=1
os.system('cls' if os.name=='nt' else 'clear')
print list
i=3
while i!=0:
x = raw_input('Enter a letter: ')
if x in word and x!='':
print 'Good choice!'
count=word.count(x)
loc=word.find(x)
print count
print loc
list[loc]=x
os.system('cls' if os.name=='nt' else 'clear')
if '-' not in list:
break
print list
else:
print 'Sorry...'
i-=1
if i==2:
print 'You have '+`i`+' more chances.'
if i==1:
print 'You have '+`i`+' more chance!'
time.sleep(1)
os.system('cls' if os.name=='nt' else 'clear')
print list
if '-' not in list:
print 'YOU WIN!!'
else:
print 'GAME OVER!!'
x = raw_input('press enter')
答案 0 :(得分:2)
如果你只需要每个角色出现的索引:
indexes = [idx for idx, ch in enumerate(word) if ch == x]
也许您应该使用Unidecode将重音保留在单词中,根据语言(如果不是英语)可能会有用。此外,您可以使用str.lower()
或str.upper()
方法确保每个单词和试用版都是相同的。
string module为您提供了有用的常量(例如ascii_uppercase
)。
然而,在这个游戏中你不需要担心任何索引。我为你做了另一个版本:
#!/usr/bin/env python
from string import ascii_uppercase
word = "megalopolis".upper() # Top-secret!
trial = 3 # Total trials available (number of mistakes to lose the game)
typed = set() # Typed characters
word_letters = set(word)
while trial:
print
print "".join(ch if ch in typed else "-" for ch in word)
# Winning condition
if typed.issuperset(word_letters):
break
# Data input
x = raw_input("Enter a letter: ").upper()
# Error cases
if len(x) != 1:
print "Invalid input."
continue
if x in typed:
print "Already typed."
continue
if x not in ascii_uppercase:
print "What you typed isn't a letter."
continue
# Valid data cases
typed.add(x)
if x in word:
print "Good choice!"
else:
print "{} not found!".format(x),
trial -= 1
if trial == 1:
print "You have one more chance!"
elif trial > 1:
print "You have {} more chances.".format(trial)
else:
print 'Sorry...'
# Ending message
print
if trial:
print "YOU WIN!!"
else:
print "GAME OVER!!"
l
应该避免变量名!它可能被视为一个或更低的“L”(PEP8),甚至是管道“|”。 PS:在这个项目的开头,我在这里输入了两次相同的字母。“cls”和“clear”都没有在这里工作,显示
“未设置TERM环境变量。”
而不是清除控制台屏幕。我用空的替换了这些 “打印”,并删除了睡眠时间。如果你想从控制台调用某些内容,请查找subprocess(如果需要进行CLI可视化,我也会查找curses。)
x
是一个字符串。如果x == ""
,bool(x)
为False
,则bool(x)
为True
。x
是一个整数。如果x == 0
,bool(x)
为False
,则bool(x)
为True
。repr
内置代替。但是,您可能想要str(trial)
,"%d" % trial
或"{}".format(trial)
。x
中。如果您有不明白的地方,请提出新问题。
答案 1 :(得分:1)
这个问题应该适合你:
Finding multiple occurrences of a string within a string in Python
它应该对单个字符和字符串一样有效,考虑从第一个字符构成第二个字符的容易程度。
答案 2 :(得分:0)
所以最后,我结束了这样做:
if x in word and x!='':
count=word.count(x)
loc=0
while count==1 or count>1:
loc=word.find(x,loc)
list[loc]=x
loc+=1
count-=1
print 'Good choice!'
感谢大家的帮助。我确实学到了一些东西。