Как вырезать буквы из строки с цифрами, чтобы ее можно было изменить на int и отсортировать - PullRequest
0 голосов
/ 05 декабря 2018

Я делаю игру в кости, в которой результаты и игроки должны храниться в массиве, а затем распечатываться в порядке табло.Я могу сделать все это, но сортировка табло.

Я понял, что мне нужно убрать буквы из строки (player1 37 до всего 37).Текущий код, который я использую, - delchars = Player1.join(c for c in map(chr, range(256)) if not c.isalnum()), но, похоже, он не работает, все знают, что делать.

#code for entering Player1 
let= True
while let == True:
    delay_print("player 1 enter your username\n")
    Player1 = input()
    if len(Player1) > 20 or len(Player1) < 3:
        print("That is too long or too short, please try again") 
    else:
        let = False
#code for entering Player2
tel = True
while tel == True:
    delay_print("player 2 enter your username\n")
    Player2 = input()
    if len(Player2) > 20  or len(Player2) < 3:
        print("That is too long, or too short, please try again")
    else:
        tel = False

Мой желаемый результат - распечатать табло,с целью.Текущий код этого табло:

print("first place is ", scoreboard[0] ,
      "\nsecond place is ", scoreboard[1], 
      "\nthird place is "  ,scoreboard[2], 
      "\nfourth place is " ,scoreboard[3], 
      "\nfifth place is "  ,scoreboard[4])

Ответы [ 3 ]

0 голосов
/ 05 декабря 2018

Способ создания отсортированного табло для вашего списка.Я не понимаю, почему вы должны объединять имена и оценки ваших игроков, хотя, это должны быть отдельные переменные.

n=0
scoreboard = ["player1 37","player3 45","player2 75", "player32 43"]
def myFunc(e):
    return int(e.split(" ")[1])
scoreboard = sorted(scoreboard, key=myFunc, reverse=True)
print("SCOREBOARD:")
for players in scoreboard:
    print("{0}: {1}".format(n+1,scoreboard[n]))
    n+=1
0 голосов
/ 05 декабря 2018

Вместо

delchars = Player1.join(c for c in map(chr, range(256)) if not c.isalnum())

используйте

delchars = "".join([c for c in Player1 if not c.isalnum()])
0 голосов
/ 05 декабря 2018

Как уже упоминали другие, вы, вероятно, пытаетесь сделать это очень странным образом.Чтобы ответить на ваш вопрос:

myString = "player1 37"
score = int(myString.split(" ").pop())

Что здесь происходит: строка разбивается на список, разделяясь на пробел.Pop берет последний элемент списка, а int () конвертирует его в целое число, потому что иметь счет в виде строки - это действительно плохая идея.

...