【发布时间】:2018-07-24 11:41:03
【问题描述】:
我对 python 很陌生,1 周前才开始学习。该程序运行良好,除非我在以 0 开头的guess1 变量中输入数字。
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()
这是一个为游戏编写的程序,其中要猜一个 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
请帮忙,谢谢!
更新:
感谢用户@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()
因为如果第一个数字是0,我的猜测总是错误的,所以我不需要将它转换为int。
再次感谢大家的帮助!这是我在网站上的第一个问题。这真是一个很酷的网站。
【问题讨论】:
-
在出现错误的第 36 行之前,执行
print(len(number))、print(len(guess))和print(a)。您应该看到a可能太大而无法索引两个列表之一(请注意,length-1 是可能的最大索引) -
当您包装为
int时,您的前导零会丢失 - 因此,当您猜测'0010'时,将其包装为整数会将其转换为10。 -
例如,我猜是因为如果你使用一些以 0 开头的数字,但 list(str(num)) 的长度只有 3 或更少。后来你调用了 num[3],因此超出了索引。
-
感谢大家的回答!这真的很有帮助。转换为 int 是错误的 - 所以只需删除该行就可以纠正错误吗?
标签: python error-handling runtime-error