每当我输入1时,它会说列表索引超出范围 我最后放了一个if语句,说明输入是1月打印1 如何使用第一个if语句
使这个程序工作months= ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ]
months_nums=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
user_input= int(input("Enter month: "))
while user_input != 0:
for i in months_nums:
if user_input == months_nums[i]:
print(months[i])
break
user_input= int(input("Enter months: "))
答案 0 :(得分:1)
如果您只是想根据持续提示的用户输入打印月份名称,为什么不使用它呢?
user_input= int(input("Enter month: "))
while user_input != 0:
print(months[user_input-1])
user_input= int(input("Enter months: "))
这利用了数组month
中的顺序 - 该数组中的月份名称索引只是输入数字-1。
你的循环不起作用的原因实际上是一个小而不是那个可见的错误。 for i in months_nums:
表示你实际上是在获取months_nums
的元素,而不是索引。换句话说,i = 1,2,3,..,12
不是0,1,2,..11
。
在寻找1月时,您会要求找到第一个从未找到过的元素,因为i
中的months_nums[i]
将永远不会有值0
,并且会获取您的月号1。另一方面它最终将达到值12,而month_nums
的最后一个索引是11 - 这是它抛出错误的时间。
您可以使用i
作为实际的元素来解决原始循环中的此问题,而不是if
语句中的索引:
user_input= int(input("Enter month: "))
while user_input != 0:
for i in months_nums:
if user_input == i:
print(months[i-1])
break
user_input= int(input("Enter months: "))
这个仍然利用months
中的排序,因此打印的值的索引为i-1
。
答案 1 :(得分:0)
问题与迭代索引和检查用户输入是否与month_num列表中的月份相匹配的方式有关。
if user_input == months_nums[i]
无法正常工作,因为如果用户输入1
个月,February
会导致列表从0
开始计算。
相反,您应该执行以下操作:
months= ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ]
months_nums=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
options = dict(zip(months_num, months))
user_input= int(input("Enter month: "))
try:
print(options[user_input])
except KeyError as e:
print(e)
答案 2 :(得分:0)
months= ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ]
months_nums=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
user_input= int(input("Enter month: "))
while user_input != 0:
if user_input in months_nums:
print(months[user_input-1])
break
user_input= int(input("Enter months: "))
答案 3 :(得分:0)
Given that I have a s3 bucket called "mybucket"
And I have a docker container called "myfileserver"
And I have another docker container called "s3cli" with s3 cli commands
And I am on "s3cli"
when I try to copy files from "mybucket" to "myfileserver"
Then I get confused how to do so?
答案 4 :(得分:0)
而不是创建列表,为什么不使用日期时间库:
import datetime
user_input = int(input("Enter month: "))
while user_input != 0:
month = datetime.datetime.strptime(str(user_input),"%m")
print(month.strftime("%B"))
user_input= int(input("Enter months: "))
基本上你可以阅读更多关于以特定方式打印日期时间对象的strftime: datetime.strftime("%B")给出月份。你还需要strptime从字符串中读取日期,例如datetime.strptime(" 31/12 / 1999","%d /%m /%Y"),在这种情况下我们只需阅读月份。
但是,我可能会检查输入是否为整数,然后检查它是否在1-12范围内,如果没有退出。这样的事情:
import datetime
# Start a loop
while True:
# Ask for a number until you get one
while True:
user_input= input("Enter months: ")
try:
user_input = int(user_input)
break
except ValueError:
print("you must enter an integer")
# Break if user input not in range
if user_input not in range(1,12):
break
# Get current month
month = datetime.datetime.strptime(str(user_input),"%m")
# Print
print(month.strftime("%B"))