Python 中的 Nato Alphabet 程序 [已关闭]

Nato Alphabet program in Python [closed]

提问人:Joe Roth 提问时间:9/15/2023 更新时间:9/15/2023 访问量:91

问:


这个问题是由一个错别字或一个无法再重现的问题引起的。虽然类似的问题可能在这里成为主题,但这个问题的解决方式不太可能帮助未来的读者。

2个月前关闭。

我编写了一个程序,可以获取您的输入,将它们保存在列表中并将它们转换为北约音标等价物,但是,如果我执行多个输入,它仅适用于第一个列表索引,我无法弄清楚我的循环出了什么问题

from pickle import FALSE
# Two lists one for nato the other for letters

import sys
nato= ["alpha", "bravo", "charlie", "delta", "echo", "fox-trot", "golf", "hotel", "india","juliet", "kilo", "lima", "mike", "november", "oscar", "papa", "quebec", "romeo", "sierra", "tango", "uniform", "victor", "whiskey", "x-ray", "yankee", "zulu" ]
alphabet = ['a','b','c', 'd', 'e','f','g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']

# enter input in words or letters

user_input = input('Enter any word or letter: ').casefold() # if the user enters a capital letter

list =[]

list.append(user_input)

print("Continue?: ")

answer = input("y or n: ")
if answer == "y":
  answer=True
elif answer =="n":
  answer=False
  print(list)
while bool(answer) == True:
  user_input = input('Enter any word or letter: ').casefold() # if the user enters a capital letter

  list.append(user_input)

  print("Continue?: ")
  answer = input("y or n: ")
  if answer == "y":
    answer=True
  elif answer =="n":
    answer=False
   # print(list)
    break


for x in range(len(list)):
  x=0
  list[x]=list[x][0]
  for n in range(26):
    if list[x]==alphabet[n]:
      list[x]=nato[n]
  x+=1
print(list)
 

输入任何字词或字母:jhkhjk 继续?: y 或 n:y 输入任意字词或字母:sdfg 继续?: y 或 n:n ['朱丽叶', 'SDFG']

那应该说朱丽叶,塞拉

python 列表 输入

评论

2赞 Barmar 9/15/2023
不要用作变量名称,它是一种内置类型。list
0赞 Barmar 9/15/2023
你需要遍历 中的所有字符,而不仅仅是进程。list[x]list[x][0]
0赞 Barmar 9/15/2023
不要对 和 使用两个列表。使用从字母映射到北约的字典。alphabetnato
0赞 Barmar 9/15/2023
如果你确实使用列表,你可以用它来获取索引,而不是编写你自己的循环。alphabet.find()for
1赞 Karl Knechtel 9/15/2023
仔细考虑代码的逻辑。它在哪里说,你认为这到底意味着什么?在每个循环开始时会发生什么?这样做的预期目的是什么?现在,看看代码的下一行。它说了什么?你明白这会导致什么问题吗?for x in range(len(list)):x

答:

-1赞 pylll 9/15/2023 #1

您必须更改打印条目的 for 循环:

for x in range(len(list)):
  list[x]=list[x][0]
  for n in range(26):
    if list[x]==alphabet[n]:
      list[x]=nato[n]
print(list)

如前所述,问题在于线路重置计数器x=0

评论

0赞 Karl Knechtel 9/15/2023
这是错误的,并且表明了对 Python 中循环工作方式的根本误解。虽然 in OP 的代码不是必需的,但它的效果只会被循环的正常操作所覆盖。 不是特殊的语法;它只是一种创建可迭代值序列的方法。循环不仅仅是循环上的句法糖;它实际上将“计数器”设置为从可迭代输入中获取的值,并受该输入长度的限制,而不是任何算术条件。x += 1rangeforwhile
0赞 Karl Knechtel 9/15/2023
相反,问题出在循环的顶部x=0
0赞 pylll 9/15/2023
是的,你是对的,不知道增量不会影响计数器变量,我更习惯于它有影响的 C。
0赞 Joe Roth 9/15/2023
我把增量拿出来了,它起作用了,我已经习惯了 Java 仅此而已
-2赞 Joe 9/15/2023 #2

如前所述,不应用作变量名称。虽然从技术上讲,您可以将其用作变量名称,但强烈建议不要这样做,并将其视为不良做法。这样做的原因是 Python 中的内置数据类型listlistlist

此外,在您的情况下,字典似乎是一个更合适的数据结构:

# Define a dictionary to map letters to NATO phonetic alphabet words
nato_dict = {
    'a': 'alpha', 'b': 'bravo', 'c': 'charlie', 'd': 'delta', 'e': 'echo',
    'f': 'fox-trot', 'g': 'golf', 'h': 'hotel', 'i': 'india', 'j': 'juliet',
    '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'
}

# Initialize an empty list to store the NATO phonetic alphabet words
nato_list = []

# Take user input
while True:
    user_input = input('Enter any word or letter: ').casefold()
    
    # Check if the input is not empty and is a letter
    if user_input and user_input[0].isalpha():
        # Get the first letter of the user input
        first_letter = user_input[0]
        # Find corresponding NATO phonetic alphabet word
        nato_word = nato_dict.get(first_letter)   
        # Append the result to the list
        nato_list.append(nato_word)

    # Ask if the user wants to continue
    answer = input("Continue (y/n): ").strip().lower()
    if answer != "y":
        break

# Print the NATO phonetic alphabet words
print(nato_list)

如果你好奇如何使用两个列表来获得相同的结果,这里有一个例子:

# Define lists to store letters and their corresponding NATO phonetic alphabet words
letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
nato_words = ['alpha', 'bravo', 'charlie', 'delta', 'echo', 'fox-trot', 'golf', 'hotel', 'india', 'juliet', 'kilo', 'lima', 'mike', 'november', 'oscar', 'papa', 'quebec', 'romeo', 'sierra', 'tango', 'uniform', 'victor', 'whiskey', 'x-ray', 'yankee', 'zulu']

# Initialize an empty list to store the NATO phonetic alphabet words
nato_list = []

# Take user input
while True:
    user_input = input('Enter any word or letter: ').casefold()
    
    # Check if the input is not empty and is a letter
    if user_input and user_input[0].isalpha():
        # Get the first letter of the user input
        first_letter = user_input[0]
        
        # Find the index of the letter in the 'letters' list
        index = letters.index(first_letter)
        
        # Find corresponding NATO phonetic alphabet word from the 'nato_words' list using the same index
        nato_word = nato_words[index]
        
        # Append the result to the list
        nato_list.append(nato_word)

    # Ask if the user wants to continue
    answer = input("Continue (y/n): ").strip().lower()
    if answer != "y":
        break

# Print the NATO phonetic alphabet words
print(nato_list)

评论

0赞 Karl Knechtel 9/15/2023
这并不能解决实际错误,即拼写错误。请阅读如何回答,并记住,我们在这里不进行代码审查,并希望 OP 首先尝试标准调试步骤,以获得实际导致问题的代码的适当最小可重现示例