邮政分拣代码程序使用ord()和char() - 调试麻烦

时间:2017-02-14 22:45:02

标签: python

我坚持使用我的代码解决了一个问题,即让用户输入一系列数字/字母,程序会使用提供的参数返回所有可行的邮政编码。这是一个详细的问题:

  

编写一个从用户读取数字的程序。你的计划   应该能够跟踪/计算最小值,最大值,总数   sum和输入数字的平均值。当用户输入" q"时,   " Q"或"退出",程序应显示最小值,最大值,总数   总和,以及结束前输入的数字的平均值。你可以假设   用户将始终输入数字或其中一个字符串   “q”,“Q”或“退出”。您还可以假设用户将始终输入   至少一个号码(即,他们不会立即选择退出   启动该计划)。

     

将您的Python程序保存在名为a2q3.py的文件中,并将其添加到您的   提交zip文件。问题4(邮政分拣代码)

     

正向分拣区域代码是a的前三个字符   加拿大邮政编码(例如," K1S"邮政编码" K1S 5B6")和它   格式为:

     
      
  • 第一个字符:A和Z之间的字母
  •   
  • 中间字符:0到9之间的数字,包括零,包括9 - - 最后一个字符:A和Z之间的字母
  •   
     

您将创建一个程序来生成可能的子集   分拣区域代码。而不是使用整个范围,你必须   使用嵌套循环编写程序,生成所有可能的循环   适合用户指定的约束的代码。你的程序应该   请求用户提供以下信息:

     
      
  1. 第一个字符的起始字母
  2.   
  3. 第一个字符的结尾字母
  4.   
  5. 中间字符的起始位
  6.   
  7. 中间字符的结束位数
  8.   
  9. 最后一个字符的起始字母
  10.   
  11. 最后一个字符的结束字母
  12.         

    然后您的程序应打印出适合的所有可能组合   这些限制。每个范围应包括起始值   和结束值,以及它们之间的所有值。你可以假设   用户只输入有效输入(即大写字符   对于字母和0-9为数字)。你不能使用Python   列表,字典或设置功能来迭代字母。   相反,您应该使用ord()函数来查找整数值   指定字母(即ASCII值)和chr()   函数从整数转换回字母(更多   有关这些功能的信息,请访问   https://docs.python.org/3/library/functions.html)。打印完毕后   每个可能的代码,您的程序应打印出总数   结束前的代码数量。

这是我的代码:

start_let_first_char=input("Please enter the starting letter of the first character: ")
end_let_first_char=input("Please enter the ending letter of the first character: ")

start_dig_mid=int(input("Please enter the starting digit of the middle character: "))
end_dig_mid=int(input("Please enter the ending digit of the middle character: "))

start_let_last_char=input("Please enter the starting letter of the last character: ")
end_let_last_char=input("Please enter the ending letter of the last character: ")

for x in range(ord(start_let_first_char),ord(end_let_first_char)+1):
    for y in range(start_dig_mid,end_dig_mid +1):
        for z in range(ord(start_let_last_char),ord(end_let_last_char)+1):
            print(chr(x)+str(y)+chr(z))

我运行代码并输入所有字母/数字时遇到的错误是:

    for z in range(ord(start_let_last_char,ord(end_let_last_char)+1)):  
TypeError: ord() takes exactly one argument (2 given) 

谢谢,它已修好并正常工作!我忘了为邮政编码添加一个计数器。我应该在最后添加一个计数器和一个打印(计数器)功能,还是有人可以推荐一种更好的方法来做到这一点?

1 个答案:

答案 0 :(得分:0)

此:

for z in range(ord(start_let_last_char,ord(end_let_last_char)+1)):

应该是:

for z in range(ord(start_let_last_char),ord(end_let_last_char)+1):

逗号在那里放错了地方。

添加了计数器:

letter_1_start = input(
    "Please enter the starting letter of the first character: ")
letter_1_end = input(
    "Please enter the ending letter of the first character: ")

digit_start = int(
    input("Please enter the starting digit of the middle character: "))
digit_end = int(
    input("Please enter the ending digit of the middle character: "))

letter_2_start = input(
    "Please enter the starting letter of the last character: ")
letter_2_end = input(
    "Please enter the ending letter of the last character: ")

counter = 0

for x in range(ord(letter_1_start), ord(letter_1_end) + 1):
    for y in range(digit_start, digit_end + 1):
        for z in range(ord(letter_2_start), ord(letter_2_end) + 1):
            print(chr(x) + str(y) + chr(z))
            counter += 1

print("Total number of codes:", counter)