私はプログラミング全般に少し慣れていないので、Pythonを使い始めたばかりです。そして、私は数推量プロジェクトに取り組んでいます。
import random
def main(): # main function
print("Welcome to the number guesser game")
range_func()
max_guess_number(lower_range_cut, upper_range_cut)
evaluation(random_number, total_guesses)
def range_func(): # allows user to select a range for the number guess
print("Please select a range in which you would like to guess.")
lower_range_cut = int(input("Lower boundary limit: "))
global lower_range_cut
upper_range_cut = int(input("Upper boundary limit: "))
global upper_range_cut
random_number = random.randint(lower_range_cut,upper_range_cut)
global random_number
return lower_range_cut, upper_range_cut, random_number
def max_guess_number(low,high): # returns the total number of guesses
total_numbers = (high - low) + 1
total_guesses = 0
while (2**total_guesses) < total_numbers:
total_guesses += 1
print ("You have a total of %d guesses\n"
"for your range between %d to %d"
% (total_guesses, low, high))
global total_guesses
return total_guesses
def evaluation(random_number, total_guesses): # evaluates the users input
guess_count = 0
while guess_count < total_guesses:
user_guess = int(input("Your guess: "))
print("Your guess is: %d" % (user_guess))
if (random_number == user_guess):
print("You got it ")
break
Elif user_guess > random_number:
print("Guess lower!")
guess_count += 1
else:
print("Guess higher!")
guess_count += 1
if __name__ == "__main__":
main()
それを書いているときに経験した1つの問題は、各変数をグローバル変数として再定義しないとこのプログラムを実行できなかったことです。 1つの関数から値を返すだけでは、アクセスできませんでした。 range_functionから2番目に返された変数upper_range_cut
それをどうにかして短くする方法はありますか?
また、コード自体に関するすべてのメモ(読みやすさ、関数の使用、長さ)にも満足しています。リストの内包表記を使用することで、このコードを大幅に短縮できたかもしれませんが、まだこの分野での機会を見ることはできません。
助けてくれてありがとう!
キリビオ
あなたはほとんどそこにいます。すべてのグローバルを削除し、各関数から返された値をローカル変数に格納して、新しい関数に渡すだけです。
以下に加えた他の唯一の変更は次のとおりです。
そうでなければあなたは格好良いです。
import random
def main(): # main function
print("Welcome to the number guesser game")
lower, upper, Rand = range_func()
total_guesses = max_guess_number(lower, upper)
evaluation(Rand, total_guesses)
def range_func(): # allows user to select a range for the number guess
print("Please select a range in which you would like to guess.")
lower_range_cut = int(input("Lower boundary limit: "))
upper_range_cut = int(input("Upper boundary limit: "))
random_number = random.randint(lower_range_cut, upper_range_cut)
return lower_range_cut, upper_range_cut, random_number
def max_guess_number(low,high): # returns the total number of guesses
total_numbers = (high - low) + 1
total_guesses = 0
while (2**total_guesses) < total_numbers:
total_guesses += 1
print ("You have a total of %d guesses\n"
"for your range between %d to %d"
% (total_guesses, low, high))
return total_guesses
def evaluation(random_number, total_guesses): # evaluates the users input
guess_count = 0
while guess_count < total_guesses:
guess_count += 1
user_guess = int(input("Your guess: "))
print("Your guess is: %d" % (user_guess))
if (random_number == user_guess):
print("You got it!")
break
else:
print "Sorry, you didn't guess it in time. The answer was: %d" % random_number
if __name__ == '__main__':
main()
global
を定義する必要はありません。関数から返す値を変数に割り当てるだけです。
簡単な例:
def add(a, b):
"""This function returns the sum of two numbers"""
return a + b
今、あなたのコンソールでは、次のことができます
# print the return
>>> print(add(2, 3))
5
# assign it to a variable
>>> c = add(2, 3)
>>> c
5
main
関数では、さまざまな関数から返される値を変数に割り当て、さらに他の関数に渡すことができます。
def main(): # main function
print("Welcome to the number guesser game")
lower_range_cut, upper_range_cut, random_number = range_func()
total_guesses = max_guess_number(lower_range_cut, upper_range_cut)
evaluation(random_number, total_guesses)