首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python跳出循环

python跳出循环
EN

Stack Overflow用户
提问于 2022-03-29 15:11:22
回答 1查看 67关注 0票数 -2

我不知道怎么打破这个循环。这个程序问了我的用户两次相同的问题,我不知道为什么。它应该问我哪个队只赢了一次,然后问我,‘这是正确的’,但它又问谁赢了

代码语言:javascript
运行
复制
import time
class Team:
    def __init__(self, num, name, size, score):
        self.num = num
        self.name = name
        self.size = size
        self.score = score

    def add_victory(self):
        self.score += 1

    def __repr__(self):
        return f'Team Number: {self.num} |-| Team Name: {self.name} |-| Member Count: {self.size} |-| Team Score: {self.score}'

def NewTournament():

    TeamCounter=int(input('How many Teams will be in the tournament? '))

    print('')
    for i in range(TeamCounter):
        NameOfTeam=input(f'Please Enter Team {i+1} Name: ')
        MemberCount=int(input('How Many Members in Team? '))
        print('')
        teams.append( Team( i+1, NameOfTeam, MemberCount, 0) )


def Score(teams):
    winner = input('Which Team Won the Event? ')
    for team in teams:
        if team.name == winner:
            team.add_victory()
            break
            print('Updated Leaderboard')

def Leaderboard():
    for t in teams:
        print(t)
    
def Menu():
    MenuLoop=1
    while MenuLoop==1:
        print('1.Create Tournament')
        print('2.Update Existing Tournament')
        print('3.View Leaderboard')
        print('4.Exit')
        MenuOption=input('')
        if MenuOption=='1':
            print('Creating Tournament')
            NewTournament()#runs the new tournament function
            MenuLoop-=1
            Menu()
        elif MenuOption=='2':
            print('Updating Tournament')
            MenuLoop-=1
            EventName=input('Which Event Was Completed? ')
            winner=input('Which Team Won the Event? ')#asking me this 2 times
            print('Event Winner:', winner, '||', 'Event:',EventName)
            print('Is this correct? Y/N') 
            Check=input('')
            if Check=='y':
                print('Updating Leaderboard')
                Score(teams)
                Menu()
                    
                
                
        elif MenuOption=='3':
            MenuLoop-=1
            Leaderboard()
            print('')
            time.sleep(0.3)
            Menu()
                
        elif MenuOption=='4':
            print('Exiting Program...')
        else:
            print('Error, please choose an option from the list below.')#keeps looping if user is not choosing a correct number from list


#start of program
teams = []        

print('░██╗░░░░░░░██╗███████╗██╗░░░░░░█████╗░░█████╗░███╗░░░███╗███████╗')
print('░██║░░██╗░░██║██╔════╝██║░░░░░██╔══██╗██╔══██╗████╗░████║██╔════╝')
print('░╚██╗████╗██╔╝█████╗░░██║░░░░░██║░░╚═╝██║░░██║██╔████╔██║█████╗░░')
print('░░████╔═████║░██╔══╝░░██║░░░░░██║░░██╗██║░░██║██║╚██╔╝██║██╔══╝░░')
print('░░╚██╔╝░╚██╔╝░███████╗███████╗╚█████╔╝╚█████╔╝██║░╚═╝░██║███████╗')
print('░░░╚═╝░░░╚═╝░░╚══════╝╚══════╝░╚════╝░░╚════╝░╚═╝░░░░░╚═╝╚══════╝')#welcome user
print('')
Username=input('Enter Username: ')
Password=input('Enter Password: ')
if Username =='Admin' and Password == 'Admin':#very basic login system for security of school
    print('Logging in...')
    print('User Verified')
    Menu()
else:
    print('User Does Not Exist.')#stops pupils gaining unauthorised access

我得到了这个输出:

代码语言:javascript
运行
复制
1.Create Tournament
2.Update Existing Tournament
3.View Leaderboard
4.Exit
2
Updating Tournament
Which Event Was Completed? Football
Which Team Won the Event? Two
Event Winner: Two || Event: Football
Is this correct? Y/N
y
Updating Leaderboard
Which Team Won the Event? Two
1.Create Tournament
2.Update Existing Tournament
3.View Leaderboard
4.Exit
3

它会像我想的那样返回到menu(),但我不喜欢它问我‘是哪个队赢得了比赛?’两次。应该只有一次。

EN

回答 1

Stack Overflow用户

发布于 2022-03-31 08:30:58

所以做了一些调整:

  1. 你被问了两次,因为你确实有两次:一次在菜单() MenuOption 2中,然后在相同的选项2中调用得分(),所以你需要决定保留哪一种。我保留了菜单()中的一个,然后将这个winner输入传递给Score()函数
  2. --这里处理循环的更好方法是让while循环继续,而Score()需要修复您的Check。您要求用户输入大写的Y/N,然后是if Check=='y'。因此,即使用户输入YCheck=='y'也将返回False。同样到了这一点,为什么单独的print()后面跟着input
  3. ,您在break in Score()之后添加了一个print()语句?然后,您就会意识到,break之后的一切都不会运行?
  4. 具有菜单()函数和Menu()函数。当您期望while循环跳出时,递归调用它将使您处于while循环中。

所以做了几处改变。我建议查找/使用和IDE可以让您逐行调试和运行代码,这样您就可以遵循您的代码/逻辑了。PyCharm是非常受欢迎的。我用间谍。

代码语言:javascript
运行
复制
import time
class Team:
    def __init__(self, num, name, size, score):
        self.num = num
        self.name = name
        self.size = size
        self.score = score

    def add_victory(self):
        self.score += 1

    def __repr__(self):
        return f'Team Number: {self.num} |-| Team Name: {self.name} |-| Member Count: {self.size} |-| Team Score: {self.score}'

def NewTournament():

    TeamCounter=int(input('How many Teams will be in the tournament? '))

    print('')
    for i in range(TeamCounter):
        NameOfTeam=input(f'Please Enter Team {i+1} Name: ')
        MemberCount=int(input('How Many Members in Team? '))
        print('')
        teams.append( Team( i+1, NameOfTeam, MemberCount, 0) )


def Score(teams, winner):
    for team in teams:
        if team.name == winner:
            team.add_victory()
            print('Updated Leaderboard')
            break

def Leaderboard():
    for t in teams:
        print(t)
    
def Menu():
    MenuOption = False
    while MenuOption!='4':
        print('1.Create Tournament')
        print('2.Update Existing Tournament')
        print('3.View Leaderboard')
        print('4.Exit')
        MenuOption=input('')
        if MenuOption=='1':
            print('Creating Tournament')
            NewTournament()#runs the new tournament function
            
        elif MenuOption=='2':
            print('Updating Tournament')
            EventName=input('Which Event Was Completed? ')
            winner=input('Which Team Won the Event? ')#asking me this 2 times
            print('Event Winner:', winner, '||', 'Event:',EventName)
            Check=input('Is this correct? Y/N\n') 
            if Check.upper()=='Y':
                print('Updating Leaderboard')
                Score(teams, winner)
                
        elif MenuOption=='3':
            Leaderboard()
            print('')
            time.sleep(0.3)
            
                
        elif MenuOption=='4':
            print('Exiting Program...')
        else:
            print('Error, please choose an option from the list below.')#keeps looping if user is not choosing a correct number from list


#start of program
teams = []        

print('░██╗░░░░░░░██╗███████╗██╗░░░░░░█████╗░░█████╗░███╗░░░███╗███████╗')
print('░██║░░██╗░░██║██╔════╝██║░░░░░██╔══██╗██╔══██╗████╗░████║██╔════╝')
print('░╚██╗████╗██╔╝█████╗░░██║░░░░░██║░░╚═╝██║░░██║██╔████╔██║█████╗░░')
print('░░████╔═████║░██╔══╝░░██║░░░░░██║░░██╗██║░░██║██║╚██╔╝██║██╔══╝░░')
print('░░╚██╔╝░╚██╔╝░███████╗███████╗╚█████╔╝╚█████╔╝██║░╚═╝░██║███████╗')
print('░░░╚═╝░░░╚═╝░░╚══════╝╚══════╝░╚════╝░░╚════╝░╚═╝░░░░░╚═╝╚══════╝')#welcome user
print('')
Username=input('Enter Username: ')
Password=input('Enter Password: ')
if Username =='Admin' and Password == 'Admin':#very basic login system for security of school
    print('Logging in...')
    print('User Verified')
    Menu()
else:
    print('User Does Not Exist.')#stops pupils gaining unauthorised access
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71664612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档