python 杂例

猜数字

from random import randint
num = randint(1, 100)

print('Guess what I think?')
bingo = False
count = 0

while bingo == False:
    count += 1
    answer = int(input())
    if answer<num:
        print(str(answer)+ ' is too small!')
    if answer>num:
        print(str(answer)+ ' is too big!') 
    if answer==num:
        print('BINGO!%d is the right answer' %answer)
        bingo = True

print(count)

输出-1

* * * * *
* * * * *
* * * * *
* * * * *
* * * * *

for i in range(0, 5):
    for p in range(0, 5):
        print('*',end='')
    print()

输出-2

*
**
***
****
*****

n=0
for i in range(0, 5):
    for p in range(0, 1+n):
        print('*',end='')
    n=n+1
    print()

猜数字

def isEqual(num1, num2):
   if num1<num2:
       print ('too small')
       return False
   if num1>num2:
       print ('too big')
       return False
   if num1==num2:
       print ('bingo!')
       return True

from random import randint
num = randint(1, 100)
print('Guess what I think?')
bingo = False
while bingo == False:
   answer = int(input())
   bingo = isEqual(answer, num)

函数可以把某个功能的代码分离出来,在需要的时候重复使用,就像拼装积木一样,这会让程序结构更清晰。

if的嵌套

if y >= 0:
   if x >= 0:
       print (1)
   else:
       print (2)
else:
   if x < 0:
       print (3)
   else:
       print (4)

点球小游戏

待会儿要去现场看场中超比赛。于是想到,以我们现在所学的,可以做一个罚点球的游戏。大概流程是这样: 每一轮,你先输入一个方向射门,然后电脑随机判断一个方向扑救。方向不同则算进球得分,方向相同算扑救成功,不得分。 之后攻守轮换,你选择一个方向扑救,电脑随机方向射门。 第5轮结束之后,如果得分不同,比赛结束。 5轮之内,如果一方即使踢进剩下所有球,也无法达到另一方当前得分,比赛结束。 5论之后平分,比赛继续进行,直到某一轮分出胜负。

官方解答:我打算从今天开始,每天说一点这个小游戏的做法。方法有很多种,我只是提供一种参考。你可以按照自己喜欢的方式去做,那样她才是属于你的游戏。 先说一下方向的设定。我的想法比较简单,就是左、中、右三个方向,用字符串来表示。射门或者扑救的时候,直接输入方向。所以这里我准备用 input。有同学是用1-9的数字来表示八个方向和原地不动,每次输入一个数字,这也是可以的。不过这样守门员要扑住的概率可就小多了。 至于电脑随机挑选方向,如果你是用数字表示,就用我们之前讲过的randint来随机就行。不过我这次打算用random的另一个方法:choice。它的作用是从一个list中随机挑选一个元素。 于是,罚球的过程可以这样写:

from random import choice
print ('Choose one side to shoot:')
print ('left, center, right')
you = input()
print ('You kicked ' + you)
direction = ['left', 'center', 'right']
com = choice(direction)
print ('Computer saved ' + com)
if you != com:
    print ('Goal!')
else:
    print ('Oops...')

反之亦然,不赘述。

昨天有了一次罚球的过程,今天我就让它循环5次,并且记录下得分。先不判断胜负。用score_you表示你的得分,score_com表示电脑得分。开始都为0,每进一球就加1。

from random import choice

score_you = 0
score_com = 0
direction = ['left', 'center', 'right']

for i in range(5):
   print ('==== Round %d - You Kick! ====' % (i+1))
   print ('Choose one side to shoot:')
   print ('left, center, right')
   you = input()
   print ('You kicked ' + you)
   com = choice(direction)
   print ('Computer saved ' + com)
   if you != com:
       print ('Goal!')
       score_you += 1
   else:
       print ('Oops...')
   print ('Score: %d(you) - %d(com)\n' % (score_you, score_com))

   print ('==== Round %d - You Save! ====' % (i+1))
   print ('Choose one side to save:')
   print ('left, center, right')
   you = input()
   print ('You saved ' + you)
   com = choice(direction)
   print ('Computer kicked ' + com)
   if you == com:
       print ('Saved!')
   else:
       print ('Oops...')
       score_com += 1
   print ('Score: %d(you) - %d(com)\n' % (score_you, score_com))

在昨天代码的基础上,我们加上胜负判断,如果5轮结束之后是平分,就继续踢。 所以我们把一轮的过程单独拿出来作为一个函数kick,在5次循环之后再加上一个while循环。 另外,这里把之前的score_you和score_com合并成了一个score数组。这里的原因是,要让kick函数里用到外部定义的变量,需要使用全局变量的概念。暂时想避免说这个,而用list不存在这个问题。(但希望你不要觉得在函数里使用外面定义的变量很自然,后面我们会具体分析)

from random import choice

score = [0, 0]
direction = ['left', 'center', 'right']

def kick():
    print('==== You Kick! ====')
    print('Choose one side to shoot:')
    print('left, center, right')
    you = input()
    print('You kicked ' + you)
    com = choice(direction)
    print('Computer saved ' + com)
    if you != com:
        print('Goal!')
        score[0] += 1
    else:
        print('Oops...')
    print('Score: %d(you) - %d(com)\n' % (score[0], score[1]))

    print('==== You Save! ====')
    print('Choose one side to save:')
    print('left, center, right')
    you = input()
    print('You saved ' + you)
    com = choice(direction)
    print('Computer kicked ' + com)
    if you == com:
        print('Saved!')
    else:
        print('Oops...')
        score[1] += 1
    print('Score: %d(you) - %d(com)\n' % (score[0], score[1]))

for i in range(5):
    print('==== Round %d ====' % (i + 1))
    kick()

while (score[0] == score[1]):
    i += 1
    print('==== Round %d ====' % (i + 1))
    kick()

if score[0] > score[1]:
    print('You Win!')
else:
    print('You Lose.')

处理文件中的数据

比如我现在拿到一份文档,里面有某个班级里所有学生的平时作业成绩。因为每个人交作业的次数不一样,所以成绩的数目也不同,没交作业的时候就没有分。我现在需要统计每个学生的平时作业总得分。

文件 scores.txt
刘备 23 35 44 47 51
关羽 60 77 68
张飞 97 99 89 91
诸葛亮 100

f = open('scores.txt', encoding='gbk')
lines = f.readlines()
# print(lines)
f.close()
results = []
 
for line in lines:
   # print (line)
   data = line.split()
   # print (data)

   sum = 0
   score_list = data[1:]
   for score in score_list:
       sum += int(score)
   result = '%s \t: %d\n' % (data[0], sum)
   # print (result)
   
   results.append(result)

# print (results)
output = open('result.txt', 'w', encoding='gbk')
output.writelines(results)
output.close()

查天气

import requests
while True:
    city = input('请输入城市,回车退出:\n')
    if not city:
        break
    try:
        req = requests.get('http://wthrcdn.etouch.cn/weather_mini?city=%s' % city)
    except:
        print('查询失败')
        break

    #print(req.text)
    dic_city = req.json()  #转换成字典
    #print(dic_city)

    city_data = dic_city.get('data') #没有‘data’的话返回None
    if city_data:
        city_forecast = city_data['forecast'][0]  #下面都可以换成get的方法
        print(city_forecast.get('date'))
        print(city_forecast.get('high'))
        print(city_forecast.get('low'))
        print(city_forecast.get('type'))
    else:
        print('未获得')

注: city_data数据类型是字典

分数等级

输入一个分数。分数在 0-100 之间。90 以上是 A,80 以上是 B,70 以上是 C,60 以上是 D。60 以下是 E。

注://表示除法,求结果的整数(舍掉小数)。

循环嵌套的用法

输入工资(注意else用法)

salarySum = 0
salarys =[]
for i in range(4):
    s = input("请输入一共4名员工的薪资(按Q或q中途结束)")

    if s.upper() == "Q":
        print("录入完成,退出")
        break
    if float(s) < 0:
        continue

    salarys.append(float(s))
    salarySum += float(s)

else:      # else语句,如果前面出现了Q/q(提前跳出循环),那么才不执行else
    print("您已经全部录入4名员工的薪资")

print("录入平均薪资: ",salarys)
print("平均薪资{0}".format(salarySum/4))

 

Leave a Reply