Привет и добро пожаловать в стек переполнения. Это выглядит как забавный маленький проект. Но да, вы сделали это безнадежно слишком сложным! Давайте посмотрим, как мы можем это исправить.
TLDR, ваша настоящая ошибка была в сравнениях. Это:
if (name1 < name2 and name3 and name4):
Не даст вам того, что вы имеете в виду. Он проверит первое условие, а затем проверит, имеют ли name3 и name4 значения. Вероятно, вы имеете в виду следующее:
if (name1 < name2 and name1 < name3 and name1 < name4):
Но есть гораздо лучшие способы сортировки списка имен! Я привел это в порядок и покажу вам ниже.
Просто несколько заметок заранее: 1) Я понимаю, что вы понятия не имели, в чем проблема. Однако, прежде чем задавать вопрос, вы должны сделать несколько журналов, чтобы попытаться изолировать проблему, чтобы вы могли опубликовать простой, воспроизводимый пример. 2) Не размещайте ссылки на код, пожалуйста. Разместите код. Было бы лучше, если вы действительно можете отредактировать свой вопрос, чтобы это исправить. Это также, почему вы должны изолировать проблему. 3) Подумайте об использовании обмена стеками обзора кода.
Хорошо, в любом случае, здесь вы go:
# Tip 1: Be careful with uninformative print messages! They will just clutter your output.
print("This is a sanity-check message. If this displays, then the program is running.")
from random import seed
from random import randint
import time
# Tip 2: in Python, you don't need to initialise variables! I've deleated all that.
# Tip 3: DRY (Don't repeat yourself!). This is the same logic four times, so let's use a list and a loop!
# This list will store all of the flatmate names
flatmates = []
# This list will store the random numbers assigned to each flatmate
flatmate_scores = []
# I'm declaring this separately (and centrally), so that you can change it easily. Always write code in a way that is
# easiest to change (also known by the cool kids as 'agile' development).
NUMBER_OF_FLATMATES = 4
for i in range(NUMBER_OF_FLATMATES):
flatmates.append(input("Enter the name of flatemate number " + str(i)))
print("Generating random numbers...")
time.sleep(2)
for flatmate in flatmates:
if flatmate[0] == "R":
# Why create a 'value' variable if you are immediately going to
# assign it to a 'name' variable?
# also, 'name' was a terrible variable name for this anyway!
score = randint(1, 20)
else:
score = randint(21, 100)
flatmate_scores.append(score)
for i in range(NUMBER_OF_FLATMATES):
print(flatmates[i], end=', score: ')
print(flatmate_scores[i])
# Here is where you make your first actual mistake.
# You cannot say 'if (name1 > name2 and name3)'
# You would have to say 'if (name1 > name2 and name1 > name3)'
# etc. But there is a better way.
# We will combine the names and scores into a tuple,
# (When you are more experienced, you can make a class and objects.
# but for now a tuple is an easy data structure to use). We'll
# make the tuple using Python's zip function
names_with_scores = zip(flatmates, flatmate_scores)
# Now we can just sort this list using a key which tells Python to sort by
# The second element (x[1]), which is the flatmate score:
names_with_scores = sorted(names_with_scores, key=lambda x:x[1])
# Reverse so high score means good.
names_with_scores = reversed(names_with_scores)
print("Flatmates should choose in the following order:")
for name, _ in names_with_scores:
print(name)
# And boom. If you ignore comments, this is about 5X shorter than your original script,
# and much easier to understand.