【问题标题】:Dictionary and integer input字典和整数输入
【发布时间】:2021-04-18 06:32:23
【问题描述】:

这里是 Python 新手。

我的任务是创建一个包含月份的字典,然后要求用户输入数字。如果数字是 1-12,则返回月份名称,如果用户输入了任何其他数字,则返回“请输入 1-12 范围内的有效数字”,如果用户输入了其他任何内容(fe“什么?”) - 返回 ' {input} 不是数字!'

到目前为止,我的第一个问题是默认情况下输入是字符串。我决定更改类型,但是当用户输入除整数以外的任何内容时出现问题 - 我得到 ValueError: invalid literal for int() with base 10: 'd' 但是如果我留下类型字符串,当用户输入 12..

时我会遇到问题

这是我目前所拥有的:

# 1. Create dictionary
months = {
    1: 'January',
    2: 'February',
    3: 'March',
    4: 'April',
    5: 'May',
    6: 'June',
    7: 'July',
    8: 'August',
    9: 'September',
    10: 'October',
    11: 'November',
    12: 'December'
}

# 2. Create input
answer = input('Please input a number of the month: ')
answer = int(answer)

# 3. Create possible outcomes
if answer == 1:
    print(months[1])
if answer == 2:
    print(months[2])
if answer == 3:
    print(months[3])
if answer == 4:
    print(months[4])
if answer == 5:
    print(months[5])
if answer == 6:
    print(months[6])
if answer == 7:
    print(months[7])
if answer == 8:
    print(months[8])
if answer == 9:
    print(months[9])
if answer == 10:
    print(months[10])
if answer == 11:
    print(months[11])
if answer == 12:
    print(months[12])
if answer < 1 or answer >12:
    print('Please input valid number in range 1-12!')

提前谢谢你!

【问题讨论】:

  • 欢迎来到 SO。这里的问题是针对特定问题提出的,并得到特定的答案。虽然无论如何你都会得到一般性的建议,但提出具体问题可以帮助人们在遇到相同问题时找到这个问题。例如,一个更好的问题标题应该是“如何将用户输入解释为整数?”

标签: python dictionary if-statement input types


【解决方案1】:

试试这个

answer = input('Please input a number of the month: ')
if answer.isdecimal() and 1 <= int(answer) <= 12:
  print(months[int(answer)])

【讨论】:

  • 您可以根据需要更改条件以显示正确的错误
  • 谢谢,但这返回了 1-12 的所有必要答案,但没有返回任何其他整数或字符串。
【解决方案2】:

要检查用户是否引入了有效的整数,您可以将字符串到 int 的转换放在 try-except 块中。另外,您的第 3 步太多余了。

months = { ... }

answer = input('Please input a number of the month: ')
try:
    answer = int(answer)
    print(months.get(answer, 'The number must be in range 1-12!'))
except ValueError:
    print('That is no integer!')

此外,您可以在进行转换之前使用 answer.isdecimal() 检查 answer 是否为有效整数,而不是 try-except。但这不符合“请求宽恕而不是许可”的理念。

【讨论】:

  • 谢谢,这很有帮助!
【解决方案3】:

字典的主要思想之一是避免使用多个“if”语句。

这是您的代码的更完善的版本:

# 1. Create dictionary
months = {
    1: 'January',
    2: 'February',
    3: 'March',
    4: 'April',
    5: 'May',
    6: 'June',
    7: 'July',
    8: 'August',
    9: 'September',
    10: 'October',
    11: 'November',
    12: 'December'
}

# 2. Create input
answer = input('Please input a number of the month: ')
try:
    answer = int(answer)
except ValueError:
    print(f'{answer} is not a number!')

if answer in months:
    print(months[answer])

else:
    print('Please input valid number in range 1-12!')

【讨论】:

  • 谢谢,这很有帮助!我仍然遇到的唯一问题是输入字符串时,返回答案是 2 行,而我需要一个。但我现在解决了。
  • 我很高兴你解决了它,好处是通过这个过程学习。祝你好运!
【解决方案4】:

谢谢大家,这很好用:

try:
    answer = int(answer)
    print(months.get(answer, 'Please enter valid number in range 1-12!'))
except ValueError:
    print(f'{answer} is not a number, please try again!')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-14
    • 1970-01-01
    • 2010-11-22
    • 2021-12-24
    • 2021-10-08
    • 1970-01-01
    • 2017-06-25
    相关资源
    最近更新 更多