我需要帮助在我的python代码中找到小错误

时间:2016-03-30 21:02:28

标签: python debugging

我写了这个程序,而且我遇到了很多问题。我对python没有太多经验,所以我确定我犯了一堆愚蠢的语法错误。请帮我找到代码中的所有错误!

import string 
num_ltr = []
ltr_num = []
num = 1
for ltr in string.ascii_lowercase:
    num_ltr[num] = ltr
    ltr_num[ltr] = num 
    num += 1

def print_menu():
    return '1. Translate a string to numbers'
    return '2. Translate numbers to a string'
    return '3. Quit'

def ltr_to_num(s, ltr_num):
    for char in s:
        print ltr_num[char]
    print 

def num_to_ltr(num_ltr, s):
    num_list = s.split()
    sentence = 0 
    for num in num_list:
        if num.isdigit():
        sentence = num_ltr[num]
    else: 
        sentence += num 

user_choice = 0
while user_choice != 3:
    print print_menu()
     user_choice = raw_input("> ")
     if user_choice = 1:
        s = raw_input('Enter a sentence: ')
        num_to_ltr(s,num_ltr)
    elif user_choice = 2:
        s = raw_input('Enter the numbers separated by spaces: ')
        num_to_ltr(s,num_ltr)
    elif user_choice != 3:
        print "I don't recognize that choice."
print "Goodbye!"

3 个答案:

答案 0 :(得分:1)

我不知道你在第一部分做了什么,在这里很难帮助你。如果您解释得更多,则更容易解决:

for ltr in string.ascii_lowercase:
    num_ltr[num] = ltr
    ltr_num[ltr] = num 
    num += 1

您希望打印这些行,而不是"返回"它们(每个函数只能返回一个东西)。

def print_menu():
    return '1. Translate a string to numbers'
    return '2. Translate numbers to a string'
    return '3. Quit'

改为将其改为:

def print_menu():
    print('1. Translate a string to numbers')
    print('2. Translate numbers to a string')
    print('3. Quit')

比较值的代码为===用于分配:

while user_choice != 3:
    print print_menu()
    user_choice = raw_input("> ")
    if user_choice == 1:
        s = raw_input('Enter a sentence: ')
        num_to_ltr(s,num_ltr)
    elif user_choice == 2:
        s = raw_input('Enter the numbers separated by spaces: ')
        num_to_ltr(s,num_ltr)
    elif user_choice != 3:
        print "I don't recognize that choice."
print "Goodbye!"

答案 1 :(得分:0)

一般建议:编写伪代码。编写程序并同时测试代码以最大限度地减少错误。信息收集了老师,朋友和stackoverflow。

你有使用python 2.7的具体原因吗?

import string
num_ltr = []
ltr_num = []
num = 1

for ltr in string.ascii_lowercase:
    num_ltr[num] = ltr
    ltr_num[ltr] = num
    num += 1

def print_menu():
    print '1. Translate a string to numbers'
    print '2. Translate numbers to a string'
    print'3. Quit'

def ltr_to_num(s, ltr_num):
    for char in s:
        print (ltr_num[char])


def num_to_ltr(num_ltr, s):
    num_list = s.split()
    sentence = 0
    for num in num_list:
        if num.isdigit():
            sentence = num_ltr[num]
        else:
            sentence += num

user_choice = 0
while user_choice != 3:
     print print_menu()
     user_choice = raw_input("> ")
     if user_choice == 1:
         s = raw_input('Enter a sentence: ')
         num_to_ltr(s,num_ltr)
     elif user_choice == 2:
         s = raw_input('Enter the numbers separated by spaces: ')
        num_to_ltr(s,num_ltr)
     elif user_choice != 3:
        print "I don't recognize that choice."
print "Goodbye!"

我修正了你的一些错误,我不知道你在顶部做了什么,如果你想要更多帮助请告诉我。我希望我有所帮助。

答案 2 :(得分:0)

如果您使用IDE(集成开发环境),则可以使用它来突出显示代码出现问题的位置。我使用PyCharm

刚才你在末尾和sentence = num_ltr[num]行的while块中有一些缩进错误。

此外,您的print_menu函数会多次调用return。我想你想把字符串加在一起。你可能也想在每一行的末尾加上'\ n'。

您需要更改检查菜单选择的方式。将输入转换为int,或者与字符串而不是数字进行比较,例如'1'代替1

除此之外,只需尝试运行代码并阅读错误消息。这应该给你足够的线索以进一步 - 甚至可能就工作代码而言。