Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么python显示';列表索引超出范围';错误?_Python_Error Handling_Runtime Error - Fatal编程技术网

为什么python显示';列表索引超出范围';错误?

为什么python显示';列表索引超出范围';错误?,python,error-handling,runtime-error,Python,Error Handling,Runtime Error,我对python非常陌生,一周前才开始学习。这个程序运行得很好,除非我在guess1变量中输入一个以0开头的数字 import random import sys def script(): while True: number1 = random.randint(1000, 9999) number1 = int(number1) while True: print ("Enter Your Guess")

我对python非常陌生,一周前才开始学习。这个程序运行得很好,除非我在guess1变量中输入一个以0开头的数字

import random
import sys
def script():
    while True:
        number1 = random.randint(1000, 9999)
        number1 = int(number1)
        while True:
            print ("Enter Your Guess")
            guess1 = input()
            guess1 = int(guess1)
            while True:
                if guess1 != number1:
                    break
                elif guess1 == number1:
                    print ("Your Guess Was Right!")
                    print ("Do you want to play again? Type YES or NO")
                    ask = input()
                    ask = str(ask)
                    if ask == "YES" or ask == "yes":
                        script()
                    elif ask == "NO" or ask == "no":
                        sys.exit()
                    else:
                        print ("Invalid input, try again.")
                        continue
            number = list(str(number1))
            guess = list(str(guess1))
            if len(guess) > 4:
                print ("Please type a 4-digit number")
                continue
            bulls = 0
            wr = 0
            cows = 0
            a = 3
            while a >= 0:
                if number[a] == guess[a]:
                    number[a] = 'a'
                    guess[a] = 'b'
                    bulls += 1
                a -= 1
            b = 0
            c = 0
            while b < 4:
                c = 0
                while c < 4:
                    if number[b] == guess[c]:
                        number[b] = 'a'
                        guess[c] = 'b'
                        wr += 1
                    c += 1
                b += 1
            z = bulls + wr
            cows = 4 - z
            bulls = str(bulls)
            cows = str(cows)
            wr = str(wr)
            print ("Cows: "+cows)
            print ("Bulls: "+bulls)
            print ("Wrongly Placed: "+wr)
        break
script()
随机导入
导入系统
def脚本():
尽管如此:
number1=random.randint(10009999)
number1=int(number1)
尽管如此:
打印(“输入您的猜测”)
猜测1=输入()
猜测1=int(猜测1)
尽管如此:
如果猜1!=第一:
打破
elif guess1==编号1:
打印(“你的猜测是对的!”)
打印(“是否要再次播放?键入是或否”)
ask=输入()
ask=str(ask)
如果ask==“是”或ask==“是”:
脚本()
elif ask==“否”或ask==“否”:
sys.exit()
其他:
打印(“输入无效,请重试。”)
持续
编号=列表(str(编号1))
猜测=列表(str(猜测1))
如果len(猜测)>4:
打印(“请键入4位数字”)
持续
多头=0
wr=0
奶牛=0
a=3
当a>=0时:
如果数字[a]==猜测[a]:
编号[a]=“a”
猜[a]=“b”
多头+=1
a-=1
b=0
c=0
b<4时:
c=0
c<4时:
如果数字[b]==猜测[c]:
编号[b]=“a”
猜[c]=“b”
wr+=1
c+=1
b+=1
z=公牛队+wr
奶牛=4-z
多头=str(多头)
奶牛=str(奶牛)
wr=str(wr)
打印(“奶牛:+奶牛)
打印(“多头:+多头)
打印(“错误放置:+wr)
打破
脚本()
这是一个为游戏编写的程序,其中有一个4位数的数字可以猜测。我们从一个随机数开始,我们得到了牛、公牛和错误排列的线索。奶牛意味着数字是错的,公牛意味着数字是对的,错误的位置意味着数字是对的,但是错误的位置。
整个过程正常,但当我输入一个以0开头的数字时,它显示如下:-

Traceback (most recent call last):
  File "GuessingGame.py", line 61, in <module>
    script()
  File "GuessingGame.py", line 36, in script
    if number[a] == guess[a]:
IndexError: list index out of range
回溯(最近一次呼叫最后一次):
文件“gussinggame.py”,第61行,在
脚本()
脚本中第36行的文件“gussinggame.py”
如果数字[a]==猜测[a]:
索引器:列表索引超出范围
请帮忙,谢谢

更新:

多亏了user@blue_note的回答,这个程序现在可以运行了!这就是它被修改的方式-

import random
import sys
def script():
    while True:
        number1 = random.randint(1000, 9999)
        number1 = int(number1)
        while True:
            print ("Enter Your Guess")
            guess1 = input()
            number = list(str(number1))
            guess = list(str(guess1))
            if guess[0] == 0:
                guess1 = str(guess1)
            else:
                guess1 = int(guess1)
            while True:
                if guess1 != number1:
                    break
                elif guess1 == number1:
                    print ("Your Guess Was Right!")
                    print ("Do you want to play again? Type YES or NO")
                    ask = input()
                    ask = str(ask)
                    if ask == "YES" or ask == "yes":
                        script()
                    elif ask == "NO" or ask == "no":
                        sys.exit()
                    else:
                        print ("Invalid input, try again.")
                        continue
            bulls = 0
            wr = 0
            cows = 0
            a = 3
            while a >= 0:
                if number[a] == guess[a]:
                    number[a] = 'a'
                    guess[a] = 'b'
                    bulls += 1
                a -= 1
            b = 0
            c = 0
            while b < 4:
                c = 0
                while c < 4:
                    if number[b] == guess[c]:
                        number[b] = 'a'
                        guess[c] = 'b'
                        wr += 1
                    c += 1
                b += 1
            z = bulls + wr
            cows = 4 - z
            bulls = str(bulls)
            cows = str(cows)
            wr = str(wr)
            print ("Cows: "+cows)
            print ("Bulls: "+bulls)
            print ("Wrongly Placed: "+wr)
        break
script()
随机导入
导入系统
def脚本():
尽管如此:
number1=random.randint(10009999)
number1=int(number1)
尽管如此:
打印(“输入您的猜测”)
猜测1=输入()
编号=列表(str(编号1))
猜测=列表(str(猜测1))
如果猜测[0]==0:
猜测1=str(猜测1)
其他:
猜测1=int(猜测1)
尽管如此:
如果猜1!=第一:
打破
elif guess1==编号1:
打印(“你的猜测是对的!”)
打印(“是否要再次播放?键入是或否”)
ask=输入()
ask=str(ask)
如果ask==“是”或ask==“是”:
脚本()
elif ask==“否”或ask==“否”:
sys.exit()
其他:
打印(“输入无效,请重试。”)
持续
多头=0
wr=0
奶牛=0
a=3
当a>=0时:
如果数字[a]==猜测[a]:
编号[a]=“a”
猜[a]=“b”
多头+=1
a-=1
b=0
c=0
b<4时:
c=0
c<4时:
如果数字[b]==猜测[c]:
编号[b]=“a”
猜[c]=“b”
wr+=1
c+=1
b+=1
z=公牛队+wr
奶牛=4-z
多头=str(多头)
奶牛=str(奶牛)
wr=str(wr)
打印(“奶牛:+奶牛)
打印(“多头:+多头)
打印(“错误放置:+wr)
打破
脚本()
因为如果第一个数字是0,我的猜测总是错误的,所以我不需要将它转换为int


再次感谢大家的帮助!这是我在网站上的第一个问题。这真是一个很酷的网站。

当你传递一个从0开始的整数,比如说,
0123
,然后在下一行将其转换为
int
,剩下的是
123
(3位数字)。稍后,您将执行
number=list(str(number1))
,因此您的
编号是
['1','2','3']
(长度3)。然后,您尝试使用
a=3
获取
number[a]
,这就是您得到的错误

你可以这样做

number = list(str(number1) if number1 > 999 else '0' + str(number1))

在出现错误的第36行之前,执行
print(len(number))
print(len(guess))
print(a)
。您应该看到,
a
可能太大,无法索引两个列表中的一个(请注意,length-1是可能的最大索引),当您包装为
int
时,前导零丢失-因此,当您猜测
'0010'
时,将其包装为整数会将其转换为
10