我遇到了问题,并希望得到任何提示/建议。到目前为止,这是我的代码:
name = input("Enter text file name\n")
radio = {'a':'alfa', 'b':'bravo', 'c':'charlie', 'd':'delta','e':'echo', 'f':'foxtrot', 'g':'golf', 'h':'hotel','i':'india', 'j':'juliett', 'k':'kilo', 'l':'lima','m':'mike', 'n':'november', 'o':'oscar', 'p':'papa','q':'quebec', 'r':'romeo', 's':'sierra', 't':'tango','u':'uniform', 'v':'victor', 'w':'whiskey', 'x':'x-ray','y':'yankee', 'z':'zulu'}
def main():
try:
f = open(name, "r")
for line in f.read().split():
//print(line)
if line in radio:
print(radio[line])
else:
print("Not an radio/nato alphabet")
f.close()
except IOError:
print("file", nimi, "does not exist.")
main()
目前我的if line in radio:
无法找到单个字母。我想知道是因为" line"是str
格式,广播是dict
?
澄清情况。这是文本文件和想要的输出。
textfile:
A O U
G 1 Y
C A !
想要输出:
alfa
oscar
uniform
golf
Not an radio/nato alphabet
yankee
charlie
alfa
Not an radio/nato alphabet
这是学校作业,而检验软件并不是最好的。想要的输出有那些额外的空格,但是当我使用split()命令进行for循环时,它不会添加这些新行。
答案 0 :(得分:2)
看起来原因是因为文本文件中的字母全部为大写,但在dict中设置为全部小写。解决此问题的一种简单方法是首先将文件的内容转换为小写:
for letter in f.read().lower().split():
if letter in radio:
print(radio[letter])
else:
print("Not an radio/nato alphabet")
为了在每行文本之间添加换行符,您可以执行以下操作:
for line in f:
for letter in line.lower().split():
if letter in radio:
print(radio[letter])
else:
print("Not an radio/nato alphabet")
print('')
现在,您首先迭代每一行。对于每一行,您都试图将该字母转换为NATO代码,然后添加一个空行以将其与下一行分开。
答案 1 :(得分:2)
您正在将A
与a
进行比较,您需要使用lower
将其设为小写。
if line.lower() in radio:
print(radio[line.lower()])
您可以将dict.get
与默认值一起用于不存在的密钥。
def main():
try:
f = open(nimi, "r")
lines = [x.split() for x in f]
for line in lines:
for char in line:
print(radio.get(char.lower(),"Not an radio/nato alphabet"))
print('')
f.close()
except IOError:
print("file", nimi, "does not exist.")
答案 2 :(得分:0)
有两个问题。其他问题提到了第一个问题:文件中的字符是大写字母,而字典中包含小写字符,因此请使用.lower()
翻译您阅读的内容。
另一个问题是你提到的“额外空间”。输出包含组之间的换行符,这些换行符是原始文件中的行。您的代码使用f.read().split()
,这会丢失原始文件中的换行符。
您可以使用for line in f:
遍历文件的行,然后使用for letter in line.split():
遍历一行中的字符。