このエラーを無効にするための修正を探しました。これは主に、呼び出したライブラリ関数に暗黙的な反復がない限り、count 変数を除いて、コード内の何も反復しないためです。このエラーが発生するのはなぜですか?
import random
import math
rand = random.randint
floor = math.floor
count = 0
pastGuesses = None
ans = 0
success = False
low = 1
high = 100
player = ""
def initC():
"Initialize the game mode where the user guesses."
print "I will come up with a number between 1 and 100 and you have to guess it!"
answer = rand(1, 100)
player = "You"
return answer
def guessEvalC(answer, g):
"Pass the real answer and the guess, prints high or low and returns true if guess was correct."
if g == answer:
print "Correct!"
return True, 1, 100
elif g > answer:
print "Too high!"
return False, 1, 100
else:
print "Too low!"
return False, 1, 100
def guessC(a, b):
"Prompt user for a guess."
suc = 0
print "%u)Please enter a number." % (count)
while True:
try:
gu = int(raw_input())
if gu <= 100 and gu >= 1:
return gu
print "Outside of range, please try again."
except ValueError:
print "NAN, please try again."
def initU():
"Initialize the game mode where the computer guesses."
print "Think of a number between 1 and 100, and I'll guess it!"
player = "I"
return 0
def guessEvalU(a, b):
"Prompt user for correctness of guess"
print "Is this high, low, or correct?"
s = raw_input()
value = s[0]
if value == "l" or value == "L":
return False, b, high
elif value == "h" or value == "H":
return False, low, b
else:
return True
def guessU(l, h):
"Calculations for guess by computer."
guess = int(floor((l + h)/2))
print "I guess %u!" % (guess)
return guess
print "Guessing game!\nDo you want to guess my number?"
resp = raw_input("Yes or no. ")
mode = resp[0]
if mode == "y" or mode == "Y":
init = initC
guess = guessC
guessEval = guessEvalC
else:
init = initU
guess = guessU
guessEval = guessEvalU
ans = init()
while success != True:
count = count + 1
gue, low, high = guess(low, high)
success = guessEval(ans, gue)
print "%s guessed it in %u tries!" % (player, count)
raw_input()
77 行目でエラーが発生します。タプルに型を混在させることができないためですか?
gue, low, high = guess(low, high)
編集:これを書いたときにいくつかの関数呼び出しを切り替えましたguessEval()
.3つのアイテムを返すはずの関数ですが、推測は1つしか返しません.'int' object not iterable
エラーが発生した理由は、戻り値を割り当てようとしたときです変数のタプル。インタープリターは、関数によって返されるオブジェクトが反復可能なオブジェクトであると想定します。 guess()
int 型の 1 つの値のみを返し、インタープリターが返されたオブジェクトを反復処理してその内容を目的の変数に配置しようとすると、このエラーが返されます。コンパイラ/インタプリタが特定のオブジェクトに関連するエラーを返したときに、エラー メッセージが参照しているオブジェクトについて言及してくれると助かります。たとえば'int'(returned from guess()) object not iterable
。機能としては特に必要ありませんが、非常に便利です。