简单入门题,涉及到的知识:条件分支和循环流程、列表和字符串、模拟系统
条件分支流程(if语句)、循环流程
1.将一个数组中的值按逆序重新存放。
例如,原来的顺序为 8,6,5,4,1。要求改为 1,4,5,6,8。
n = int(input('数组中元素的个数 n:'))
l = []
l1 = []
for i in range(1,n+1):
s = int(input(''))
l.append(s)
print(l)
for i in range(1,n+1):
s = l.pop()
l1.append(s)
print(l1)
2.DoinB:
十五个猴子围成一圈选大王,依次1-7 循环报数,报到7 的猴子被淘汰,直到最后一只猴子成为大王。问,哪只 猴子最后能成为大王
monkeys = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
num = 0
while True:
for i in range(1,7):
monkeys.append(monkeys[0]) #第一次循环第一个元素为1,将第一个添加到列表后面,同理,第二次循环就是将2添加到列表的最后面
del(monkeys[0]) #第一次循环删除列表的第一个元素,也就是1,然后2就变成了列表的第一个元素。同理,第二次循环就删除的2
if i == 6:
num += 1
print('第%d次出局猴子的编号为:%d' % (num, monkeys[0]))
monkeys.pop(0) #循环6次之后,第7次将第7个元素出栈,删除第七个元素,继续循环下去
if len(monkeys)==1: #要选出来的大王
break
print()
print('猴子大王的编号为:%d' % int(monkeys[0]))
3.螺旋填数:
读入两个整数m,n,输出一个m 行n 列的矩阵,这个矩阵是1~m * n,这些自然 数按照右、下、左、上螺旋填入的结果。
n = int(input(''))
arr = [[0]*n for i in range(n)]#初始化数组
def dfs(arr, x, y, start, n):#递归解决
if n<=0:return 0
if n==1:
arr[x][y] = start
return 0
#up
for i in range(n):
arr[x][y+i] = start
start += 1
#right
for i in range(n-1):
arr[x+1+i][y+n-1] = start
start += 1
#down
for i in range(n-1):
arr[x+n-1][y+n-2-i] = start
start += 1
#left
for i in range(n-2):
arr[x+n-2-i][y] = start
start += 1
dfs(arr,x+1,y+1,start,n-2)
a = dfs(arr,0,0,1,n)
#格式化输出print
l = len(str(n*n))+1
format = ('%'+str(l)+'d')*n
for tmp in arr:
print (format%tuple(tmp))
4.八皇后问题
def conflict(state, nextColumn):
nextRow = rows = len(state)
for row in range(rows):
column = state[row]
if abs(column - nextColumn) in (0, nextRow - row):
#如果差值等于0,两个皇后在同一列,列的差值等与行的差, 两个皇后在对角线上, 则代表冲突返回True;
return True
return False
def queens(num, state=()):#num: 皇后的数量 。state: 标记已经排好的每个皇后的位置
for pos in range(num): # 八皇后的数量N=0, 1, 2, 3, 4, 5, 6 , 7 你要在哪一列放置皇后
if not conflict(state, pos): # 如果不冲突,则递归构造棋盘。
# 如果棋盘状态state已经等于num-1,即到达倒数第二行,而这时最后一行皇后又没冲突,直接yield,打出其位置(pos, )
if len(state) == num - 1:
yield (pos,)
else: # (0, )
for result in queens(num, state + (pos,)):
yield (pos,) + result
def prettyprint(solution):#用X表示每个皇后的位置
def line(pos, length=len(solution)):
return ' . ' * (pos) + ' x ' + ' . ' * (length - pos - 1)
for pos in solution:
print(line(pos))
if __name__ == '__main__':
solutions = queens(8)
for index, solution in enumerate(solutions):
print("第%d种解决方案:" % (index + 1), solution)
prettyprint(solution)
print('*' * 100)
5.扔两个骰子游戏
游戏规则:游戏者随机扔两个骰子,每个骰子有六个面,分别标有1、2、3、4、5、6。把两个骰子朝上的点 数相加。
如果相加的和为7或者11,那么赢,如果和为2、3或12,输。
如果和为4、5、6、8、9、10,那么此和为游戏者的点数,如果想赢,可以接续扔骰子,直到新扔出的点数相加和第一次点数相同算输。如果继续扔 出的点数相加为7,则为输。 要
求:用户输入1则为继续扔骰子,输入0则结束,每次扔完骰子,都要询问用户,是否要继续。
每一行都必须写注释,注释的量要占到整个程序的80%
'''
游戏规则:游戏者随机扔两个骰子,每个骰子有六个面,分别标有1、2、3、4、5、6。把两个骰子朝上的点 数相加。
如果相加的和为7或者11,那么赢,如果和为2、3或12,输。
如果和为4、5、6、8、9、10,那么此和为游戏者的点数,如果想赢,可以接续扔骰子,直到新扔出的点数相加和第一次点数相同算输。如果继续扔 出的点数相加为7,则为输。 要
求:用户输入1则为继续扔骰子,输入0则结束,每次扔完骰子,都要询问用户,是否要继续。
每一行都必须写注释,注释的量要占到整个程序的80%
'''
import random
winList = [7, 11]
lostList = [2, 3, 12]
continueList = [4, 5, 6, 8, 9, 10]
score = []
def throw():
return random.randint(1, 6)
#第一次扔骰子
ss1 = throw()
ss2 = throw()
print("骰子扔出的点数分别为:",ss1,"\t",ss2,"\t和为:",ss1+ss2)#第一次扔骰子所扔出的点数
if ss1+ss2 in winList:#如果点数和为7或者11,那么赢。
print("赢!")
elif ss1+ss2 in lostList:#如果点数和为2、3或12,输。
print("输!")
else:
one = ss1+ss2
print("目前游戏者的点数为:",one)#如果和为4、5、6、8、9、10,那么此和为游戏者的点数
print("是否要继续? 1(继续) / 0(退出):")#如果想赢,游戏者可以选择接续扔骰子
n = int(input('')) #询问用户,是否要继续
if n == 1:#用户输入1则为继续扔骰子
s1 = throw()
s2 = throw()
print("骰子扔出的点数分别为:", s1, "\t", s2,"\t和为:",s1+s2)#如果想赢,游戏者可以选择接续扔骰子
if s1+s2 == one and s1+s2 == 7:
print("输!")
while s1+s2 != one and s1+s2 != 7:#如果继续扔出的点数相加为7,或者新扔出的点数相加和第一次点数相同,则为输。
one = s1 + s2#更新游戏者的点数
print("目前游戏者的点数为:", one)
print("是否要继续? 1(继续) / 0(退出):")
n = int(input(''))#询问用户,是否要继续
if n == 0:#用户输入0则结束游戏
print("已退出!")
break
elif n != 1 and n != 0:#如果用户输入的既不是1也不是0,那么则输入错误
print("输入错误!")
#用户输入1则为继续扔骰子所扔出的点数
s1 = throw()
s2 = throw()
print("骰子扔出的点数分别为:", s1, "\t", s2,"\t和为:",s1+s2)#如果想赢,游戏者可以选择接续扔骰子
elif n == 0:#用户输入0则结束游戏
print("已退出!")
else:#如果用户输入的既不是1也不是0,那么则输入错误
print("输入错误!")
列表、字符串
1.字符串
dict1 = {}
print(dict1.fromkeys((1, 2, 3), ('one','two', 'three')))#{1: ('one', 'two', 'three'), 2: ('one', 'two', 'three'), 3: ('one', 'two', 'three')}
print(dict1.fromkeys((1, 3), '数字')) #{1: '数字', 3: '数字'}
dict1={'one':1,'two':2,'three':3}
dict2 = dict1.copy()
print(dict2)
(2)
a = dict(one=1, two=2, three=3)
b = {'one': 1, 'two': 2, 'three': 3}
c = dict(zip(['one', 'two', 'three'],[1, 2, 3]))
d = dict([('two', 2), ('one', 1),('three', 3)])
e = dict({'three': 3, 'one': 1,'two': 2})
结果为:
#结果
{'one': 1, 'two': 2, 'three': 3}
{'one': 1, 'two': 2, 'three': 3}
{'one': 1, 'two': 2, 'three': 3}
{'two': 2, 'one': 1, 'three': 3}
{'three': 3, 'one': 1, 'two': 2}
2.给定一个字符,用它构造一个底边长 5 个字符,高 3 个字符的等腰字符三角形。
for i in range(1,4):
print((3-i)*" ",(2*i-1)*"*")
3.输入一个字符串,输出该字符串是否回文。回文是指顺读和倒读都一样的字符串。
s = input("")
print(s)
left = 0
right = len(s) - 1
if len(s) <= 100:
while left <= right:
if s[left] == s[right]:
left += 1
right -= 1
else:
break
if left > right:
print('{}是回文字符串!'.format(s))
else:
print('{}不是回文字符串!'.format(s))
4.给定硝酸、王水、粗汞、铅、矾的量,问可以炼出多少需要的物质
s = input("请输入硝酸、王水、粗汞、铅、矾的量(用空格隔开):")
ss = s.split()
print(ss)
list = []
for i in range(0,5):
list.append(int(ss[i]))
print(min(list[0],list[1],list[2]//2,list[3]//7,list[4]//4))
5.输入一个长度不超过80 的字符串,输出其最小周期。
s = input("")
count = 0
for i in range(1, len(s)):
if len(s) % i == 0:
flag = True
for j in range(i, len(s)):
if s[j % i] != s[j]:
flag = False
break
if flag:
count = i
print(count)
break
if count == 0:
print('不是一个周期串!')
模拟用户注册和登录
1.模拟用户注册和登录功能,还有菜单功能:
user_data = {}
#用户注册:
def logon():
prompt = '请输入用户名:'
while True:
name = input(prompt)
if name in user_data:
prompt = '此用户名已经被使用,请重新输入:'
continue
else:
break
password = input('请输入密码:')
user_data[name] = password
print('注册成功,赶紧试试登录吧^_^')
#用户登录
def login():
prompt = '请输入用户名:'
while True:
name = input(prompt)
if name not in user_data:
prompt = '您输入的用户名不存在,请重新输入:'
continue
else:
break
password = input('请输入密码:')
check_password = user_data.get(name)
if password == check_password:
print('欢迎进入XXOO系统,请点右上角的X结束程序!')
else:
print('密码错误!')
#菜单
def showmenu():
print( """
|--- 新建用户:N/n ---|
|--- 登录账号:E/e ---|
|--- 推出程序:Q/q ---|
|--- 请输入指令代码:""")
while True:
chosen = False
while not chosen:
choice = input()
if choice not in 'NnEeQq':
print('输入的指令代码错误,请重新输入:')
else:
chosen = True
if choice == 'q' or choice == 'Q':
break
if choice == 'n' or choice == 'N':
logon()
if choice == 'e' or choice == 'E':
login()
showmenu()
2.添加查找功能:
user_data = {"张三": "19834422222"}
def find():
name = input('请输入联系人姓名:')
if name in user_data:
print("%s : %s " % (name, user_data[name]))
else:
print('您输入的姓名不在通讯录中!')
showmenu()
def keep():
name = input('请输入联系人姓名:')
if name in user_data:
print("您输入的姓名已在通讯录中存在 --> %s:%s")
print("%s : %s " % (name, user_data[name]))
flag = input("是否修改用户资料(YES/NO):")
if flag == 'YES':
tel = input('请输入用户联系电话:')
user_data.update({name: tel}) # 更新字典
print("联系人已更新!")
else:
showmenu()
else:
user_data[name] = input('请输入联系人电话:')
print("联系人已保存!")
def delete():
name = input('请输入要删除的联系人姓名:')
if name in user_data:
flag = input('确定要删除此联系人?(YES/NO)')
if flag in ['YES', "yes", "Y", "y"]:
del (user_data[name])
print('联系人 %s 删除成功!' % name)
else:
showmenu()
else:
print('%s 不在通讯录中!' % name)
def showmenu():
print("""
|--- 欢迎进入通讯录程序 ---|
|--- 1:查询联系人资料 ---|
|--- 2:插入新的联系人 ---|
|--- 3:删除已有联系人 ---|
|--- 4:退出通讯录程序 ---|""")
while True:
button = int(input("请输入相关指令:"))
if button == 1:
find()
if button == 2:
keep()
if button == 3:
delete()
if button == 4:
print("|--- 感谢使用通讯录程序 ---|")
break
showmenu()
版权声明:本文为qq_45956730原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。