<p>python中有一种称为set的数据类型。放在一个集合中的任何东西都必须是唯一的。一个集合中的每件事物一次只能有一件。下面的代码还应该捕获大多数(如果不是所有)可能会在将来给您带来问题的边缘情况。它确保用户输入的是一个数字,介于0和60之间,以前没有被选取过,并且将从用户那里得到6个数字。你知道吗</p>
<pre><code>def get_user_numbers(number_of_guesses):
# a set can only have one element with the any given value
users_numbers = set()
# used to keep the while loop going until you have all the information you want.
got_all_numbers = False
while not got_all_numbers:
# tries to get input from the user. The except statement will be hit if the
# user gives you something other than a whole number.
try:
current_number = int(raw_input("Enter a number between 0 and 60"))
except ValueError:
print 'Please enter a number'
# Checks to make sure the number is in the range you want it to be.
if current_number < 0 or current_number > 60:
print 'Please pick a number between 0 and 60.'
# Checks to see if the number has already been used.
elif current_number in users_numbers:
print 'Please pick a number that you have not already used'
# if everything else if correct it will add the users number to the set.
else:
users_numbers.add(current_number)
# Checks to make sure the set still has less than 6 numbers in it. If it
# does then the while loop will keep going until there are 6 guesses
if len(users_numbers) == number_of_guesses:
got_all_numbers = True
elif len(users_numbers) > number_of_guesses:
# There is a big problem... The user managed to give you more guesses
# than you are asking for! The program should exit or you should start
# over with blank guesses
raise ValueError
# If you wanted to you could print out all of the users guesses here so they
# can see what they have already tried
return users_numbers
print get_user_numbers(6)
</code></pre>
<p>要在程序中使用此函数,只需将函数调用放在文件的顶部,然后在已经编写的代码中使用函数调用。下面是代码的示例:</p>
<pre><code># -*- coding: UTF-8 -*-
import random
def get_user_numbers(number_of_guesses):
users_numbers = list()
got_all_numbers = False
while not got_all_numbers:
try:
current_number = int(raw_input("Enter a number between 0 and 60: "))
except ValueError:
print 'Please enter a number'
else:
if current_number < 0 or current_number > 60:
print 'Please pick a number between 0 and 60.'
elif current_number in users_numbers:
print 'Please pick a number that you have not already used'
else:
users_numbers.append(current_number)
if len(users_numbers) == number_of_guesses:
got_all_numbers = True
elif len(users_numbers) > number_of_guesses:
raise ValueError
user_numbers_string = ' '.join(str(guess) for guess in users_numbers)
return user_numbers_string
lotteryNumbers = []
print("Welcome to your new Lotto service")
lotterydrawfile = open("lotterydrawfile.txt", "w")
for i in range(6):
number = random.randint(1, 60)
lotterydrawfile.write(str(number) + " ")
lotterydrawfile.close()
# Here is where you call the function that is at the top of the file
userlottonumbers = get_user_numbers(6)
usernumber = []
number_string = ""
for i in userlottonumbers:
number_string = number_string + str(i)
if str(i) == " ":
usernumber.append(number_string)
number_string = ""
print("Your numbers are " + str(usernumber))
lotterydraw = open("lotterydrawfile.txt").read()
number_string1 = ""
lottodraw = []
for j in lotterydraw:
number_string1 = number_string1 + str(j)
if str(j) == " ":
lottodraw.append(number_string1)
number_string1 = ""
print("The lotto draw was " + str(lottodraw))
same = 0
for i in usernumber:
for j in lottodraw:
if i == j:
same = same + 1
prize = same * 100
if same == 6:
prize = 10000000
print("You won £" + str(prize))
</code></pre>